提供: Minecraft Modding Wiki
2017年2月19日 (日) 16:05時点におけるModderKina (トーク | 投稿記録)による版 (いろいろ。好みが分かれるかも?)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

この記事は"Minecraft Forge Universal 10.12.1~"を前提MODとしています。

Stone pickaxe.png
中級者向けのチュートリアルです。

「NBT」を利用したデータ管理システムについての概論。

NBTとは

NBTとはMinecraftで利用されているデータの管理システム、あるいは保存書式のようなものである。
ゲームを終了した際に記録されるデータのほとんどすべてがNBT形式で(datファイルに)保存されている。 (例外としてはプレイヤーの実績・統計、Forge式Config等)

「NBTBase」クラスを基として様々な継承クラスがあるが、バニラ含め多くの場合「NBTTagCompound」クラスで管理されている。 状況によっては、「NBTTagList」クラスで管理される場合もある。(Enchantmentなど)

書式と扱える型

NBTTagCompoundへのデータの読み書きはGetter,Setterを介して行う。(コピペしても動かないので注意)

NBTTagCompound nbt;
//読み込み
nbt.getXxx("<データのキー>");
//書き込み
nbt.setXxx("<データのキー>", <データ>);

また、NBTTagCompoundの扱える型は以下の通りである。
byte, short, int, long, float, double, byte配列, 文字列, NBTBaseのリスト, NBTTagCompound, int配列
それぞれのgetter,setterは以下の通りである。
getByte, getShort, getInteger, getLong, getFloat, getDouble, getByteArray, getString, getTagList, getCompoundTag, getIntArray
setByte, setShort, setInteger, setLong, setFloat, setDouble, setByteArray, setString, setTagList, setCompoundTag, setIntArray

setterメソッドではそれぞれ以下のNBTBase継承クラスとして保管されるので、データ形式の違うものであっても同じ保存名を付けるとデータ不整合が起こる。
NBTTagByte, NBTTagShort, NBTTagInt, NBTTagLong, NBTTagFloat, NBTTagDouble, NBTTagByteArray, NBTTagString, NBTTagList, NBTTagCompound, NBTTagIntArray
NBTBaseで読み込み、書き込み出来るメソッドgetTag, setTagが用意されているため、より汎用的に扱うこともできる。

NBTでデータを保存する方法

NBTでデータを保存する方法は、NBTTagCompoundを用意して紐付ける方法と引数にNBTTagCompoundを持つwriteToNBTメソッドを利用する方法がある。

  • NBTTagCompoundを用意して紐付ける方法

ItemStackにNBTを保存する場合はこちらを用いる。 ItemStack#hasTagCompoundメソッドで紐付けされてるNBTTagCompoundがあるかどうか判定し、ない場合はItemStack#setTagCompoundメソッドで新たに生成したNBTTagCompoundを紐付ける。 すでに紐付けられているNBTTagCompoundがあるなら、ItemStack#getTagCompoundメソッドから取得できる。

  • 引数にNBTTagCompoundを持つwriteToNBTメソッドを利用する方法

TileEntity, EntityCustomData, WorldSavedData等はこちらを用いる。 writeToNBT(あるいは類似名称のメソッド)をOverrideして、引数のNBTTagCompoundにデータを書き込む形となる。 保存のタイミングはシステムの処理による。(大体チャンク保存処理時に行われる)

関連リンク