提供: Minecraft Modding Wiki
移動先: 案内検索

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 編集中の文章
3行目: 3行目:
 
「NBT」を利用したデータ管理システムについての概論。
 
「NBT」を利用したデータ管理システムについての概論。
 
==NBTとは==
 
==NBTとは==
NBTとはMinecraftで利用されているデータの管理システム、あるいは保存書式のようなものである。<br>
+
NBTとはMinecraftで利用されているデータの管理システム、あるいは保存書式のようなものである。
ゲームを終了した際に記録されるデータのほとんどすべてがNBT形式で(datファイルに)保存されている。
+
ゲームを終了した際にHDDに記録しておきたいデータは“ほとんどすべて”NBT形式で書かれ(datファイルに)保存されている。
 
(例外としてはプレイヤーの実績・統計、Forge式Config等)
 
(例外としてはプレイヤーの実績・統計、Forge式Config等)
  
「NBTBase」クラスを基として様々な継承クラスがあるが、バニラ含め多くの場合「NBTTagCompound」クラスで管理されている。
+
「NBTBaseクラス」が基本クラスであるが、バニラ含め多くの場合「NBTTagCompoundクラス」を利用する。
状況によっては、「NBTTagList」クラスで管理される場合もある。(Enchantmentなど)
+
状況によっては、「NBTTagListクラス」を使うこともある。(Enchantmentの管理)
  
==書式と扱える型==
+
==データ書式と扱えるデータの種類==
NBTTagCompoundへのデータの読み書きはGetter,Setterを介して行う。(コピペしても動かないので注意)
+
NBTTagCompoundへのデータの読み書きは以下の書式で行える。(コピペしても動かないので注意)
 
<source lang = "java">
 
<source lang = "java">
 
NBTTagCompound nbt;
 
NBTTagCompound nbt;
 
//読み込み
 
//読み込み
nbt.getXxx("<データのキー>");
+
nbt.get<データ形式>("<データの保存名>");
 
//書き込み
 
//書き込み
nbt.setXxx("<データのキー>", <データ>);
+
nbt.set<データ形式>("<データ保存名>", <データ形式と同型のデータ>);
 
</source>
 
</source>
また、NBTTagCompoundの扱える型は以下の通りである。<br />
+
また、NBTの扱えるデータは以下の通りである。<br />
 
byte, short, int, long, float, double, byte配列, 文字列, NBTBaseのリスト, NBTTagCompound, int配列<br />
 
byte, short, int, long, float, double, byte配列, 文字列, NBTBaseのリスト, NBTTagCompound, int配列<br />
 
それぞれのgetter,setterは以下の通りである。<br />
 
それぞれのgetter,setterは以下の通りである。<br />
 
getByte, getShort, getInteger, getLong, getFloat, getDouble, getByteArray, getString, getTagList, getCompoundTag, getIntArray<br />
 
getByte, getShort, getInteger, getLong, getFloat, getDouble, getByteArray, getString, getTagList, getCompoundTag, getIntArray<br />
 
setByte, setShort, setInteger, setLong, setFloat, setDouble, setByteArray, setString, setTagList, setCompoundTag, setIntArray<br />
 
setByte, setShort, setInteger, setLong, setFloat, setDouble, setByteArray, setString, setTagList, setCompoundTag, setIntArray<br />
 +
※注意:メソッド名ではプリミティブ型には見えないが、実際はプリミティブ型で管理している。<br />
  
setterメソッドではそれぞれ以下のNBTBase継承クラスとして保管されるので、データ形式の違うものであっても同じ保存名を付けるとデータ不整合が起こる。<br />
+
setterメソッドではそれぞれ以下のNBTBase継承クラスとして保存されるので、データ形式の違うものに同じ保存名を付けるとデータ不整合が起こる。<br />
 
NBTTagByte, NBTTagShort, NBTTagInt, NBTTagLong, NBTTagFloat, NBTTagDouble, NBTTagByteArray, NBTTagString, NBTTagList, NBTTagCompound, NBTTagIntArray<br />
 
NBTTagByte, NBTTagShort, NBTTagInt, NBTTagLong, NBTTagFloat, NBTTagDouble, NBTTagByteArray, NBTTagString, NBTTagList, NBTTagCompound, NBTTagIntArray<br />
NBTBaseで読み込み、書き込み出来るメソッドgetTag, setTagが用意されているため、より汎用的に扱うこともできる。
+
NBTBaseで読み込み、書き込み出来るメソッドgetTag, setTagが用意されており、推奨はしないが、データ形式によらず、同名の保存名で扱うことも出来る。
 
==NBTでデータを保存する方法==
 
==NBTでデータを保存する方法==
 
NBTでデータを保存する方法は、NBTTagCompoundを用意して紐付ける方法と引数にNBTTagCompoundを持つwriteToNBTメソッドを利用する方法がある。
 
NBTでデータを保存する方法は、NBTTagCompoundを用意して紐付ける方法と引数にNBTTagCompoundを持つwriteToNBTメソッドを利用する方法がある。
 
*NBTTagCompoundを用意して紐付ける方法
 
*NBTTagCompoundを用意して紐付ける方法
 
ItemStackにNBTを保存する場合はこちらを用いる。
 
ItemStackにNBTを保存する場合はこちらを用いる。
ItemStack#hasTagCompoundメソッドで紐付けされてるNBTTagCompoundがあるかどうか判定し、ない場合はItemStack#setTagCompoundメソッドで新たに生成したNBTTagCompoundを紐付ける。
+
ItemStack#hasTagCompoundメソッドで紐付けされてるNBTTagCompoundがあるかどうか判定し、ない場合はItemStack#setTagCompoundメソッドでNBTTagCompoundを紐付けさせる。
すでに紐付けられているNBTTagCompoundがあるなら、ItemStack#getTagCompoundメソッドから取得できる。
+
すでに紐付けられているNBTTagCompoundがあるなら、ItemStack#getTagCOmpoundメソッドで取得することが出来る。
 
*引数にNBTTagCompoundを持つwriteToNBTメソッドを利用する方法
 
*引数にNBTTagCompoundを持つwriteToNBTメソッドを利用する方法
 
TileEntity, EntityCustomData, WorldSavedData等はこちらを用いる。
 
TileEntity, EntityCustomData, WorldSavedData等はこちらを用いる。
 
writeToNBT(あるいは類似名称のメソッド)をOverrideして、引数のNBTTagCompoundにデータを書き込む形となる。
 
writeToNBT(あるいは類似名称のメソッド)をOverrideして、引数のNBTTagCompoundにデータを書き込む形となる。
 
保存のタイミングはシステムの処理による。(大体チャンク保存処理時に行われる)
 
保存のタイミングはシステムの処理による。(大体チャンク保存処理時に行われる)
 
==関連リンク==
 
*[http://forum.minecraftuser.jp/viewtopic.php?f=21&t=4937 MOD開発に関する留意事項 チャンク初期化とNBTデータの不整合]
 

Minecraft Modding Wikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMinecraft Modding Wiki:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)

このページで使用されているテンプレート: