NBTフォーマット

提供: Minecraft Wiki
NBTタグから転送)
移動先: 案内検索

NBTフォーマット(The Named Binary Tag format)はMinecraftでデータをファイルに保存するのに使われる。このフォーマットをNotchが簡潔に説明しているspecification。このフォーマットは様々な"タグ"からなるツリー構造でデータを蓄えている。全てのタグはIDとnameを持っている。元の基地のバージョンは、Minecraft Beta 1.3で導入っされた19132であったが、その後Anvilで19133に更新されInt Arrayタグが追加された。NBT形式は、Minecraft Indevのタグ0~10を使用する。

タグ定義[編集 | ソースを編集]

タグはデータツリーの一部分である。タグの最初のバイトはタグタイプIDである。続いて2バイトがnameの長さで、それからnameがUTF-8フォーマットで続いている(注意: TAG_Endに名前は無いので2バイトは必要ない、名前が空であると仮定されている)。タグnameにもしかしたらスペースがあるかもしれない、だがMinecraft自身はけっしてnameにスペースを含めタグを保存することはない。最終的にタグのタイプによりタグのペイロードバイトが続く。このテーブルはNBTFormat19133バージョンにおける12のタグの説明である。

ID アイコン タグの種類 ペイロード 説明 ストレージ容量
0 TAG_End なし 終了するのに使用する。このタグに名前はない、だから1バイト(0)のみである。空のリストのタグになることもある。 N/A
1 Nbtsheet.png TAG_Byte 1バイト/8ビット符号付き 符号付整数型 しばしば真偽値を表すのにも使用される 範囲 -(27)から(27 - 1)
(-128から127)
2 Nbtsheet.png TAG_Short 2バイト/16ビット符号付きビッグエンディアン 符号付整数型 範囲 -(215)から(215 - 1)
(-32,768から32,767)
3 Nbtsheet.png TAG_Int 4バイト/32ビット符号付きビッグエンディアン 符号付整数型 範囲 -(231)から(231 - 1)
(-2,147,483,648から2,147,483,647)
4 Nbtsheet.png TAG_Long 8バイト/64ビット符号付きビッグエンディアン 符号付整数型. 範囲 -(263)から(263 - 1)
(-9,223,372,036,854,775,808から9,223,372,036,854,775,807)
5 Nbtsheet.png TAG_Float 4バイト/32ビット符号付きビッグエンディアン, IEEE 754-2008, バイナリ32 符号付浮動小数点数. 精度は数字の行全体で異なる:
Single-precision floating-point format参照。最大値3.4*1038
6 Nbtsheet.png TAG_Double 8バイト/64ビット符号付きビッグエンディアンIEEE 754-2008, バイナリ64 符号付浮動小数点数 精度は数字の行全体で異なる:
Double-precision floating-point format参照。最大値 1.8*10308
7 Nbtsheet.png TAG_Byte_Array TAG_Intで要素数 それから要素数分のTAG_Byteのペイロード. バイト配列 最大要素数 (231 - 9) and (231 - 1) (2,147,483,639 and 2,147,483,647) JVMによる
8 Nbtsheet.png TAG_String TAG_Shortのペイロードでバイト数 それからUTF-8文字列のバイト. UTF-8でエンコードされた文字列。

サイズがあり、nullで終わることはない。

最大で32767バイト 詳しくはUTF-8フォーマットを参照
9 Nbtsheet.png TAG_List TAG_ByteのペイロードでTagタイプを決め、続いてTAG_Intのペイロードで要素数を決める。それから指定したタグIDのペイロードが続く。 タグペイロードのリスト、なおTagIDは省略され名前も無い。 最大要素数は231-9個 または20億4748万3639個である。

(JVMの上限やjava.util.ArrayListの実装による) (リストは512回以上入れ子にできない)

10 Nbtsheet.png TAG_Compound フリーフォーマットである。終端にTAG_Endを指定する。 フリーフォーマット JVMのメモリによるが、リストと違い、要素(タグ)の数に上限はない。(512回以上入れ子にはできない)
11 Nbtsheet.png TAG_Int_Array TAG_Intのペイロードで要素数、それからTAG_Intのペイロードが要素数分続く。 4バイト整数配列 特定のJVMに応じ、エレメントの最大数の範囲は(231 - 9)から(231 - 1) (2,147,483,639から2,147,483,647)

ListおよびComponentタグは、再帰的にネストできる。また、リストのリストでは、サブリストのそれぞれが異なる種類のタグをリストできる事に注意。 注意:要素数や文字数を示す型は符号付きである。

Fileフォーマット[編集 | ソースを編集]

NBTファイルは、GZipされた複合タグであり、名前とタグIDが含まれている。 Minecraftで使用されるファイルの一部は圧縮されていない場合があるが、ほとんどの場合、ファイルはNotchの元の仕様に従っており、GZipで圧縮されている。Xbox 360 Editionでは、LZX圧縮アルゴリズムのバリエーションであるXMemCompressでチャンクが圧縮される。バージョンやその他の情報を指定するヘッダーはない。level.datファイルのみがバージョンを指定する。

Minecraftで使用されるもの[編集 | ソースを編集]

MinecraftのNBT形式の使用は時々奇妙である。場合によっては、空のリストは、正しい種類のリストではなく、バイトタグのリストとして、または新しいバージョンのMinecraftの終了タグのリストとして表されることがある。さらに、ほとんどすべてのルートタグには空の名前文字列があり、実際のデータと名前を持つ1つの複合タグのみをカプセル化する。 例えば:

  • Nbtsheet.png ほとんどのMinecraft NBT構造のルートタグ。
    • Nbtsheet.png SomeName: ルートタグ内に含まれる唯一のタグ - 名前があり、すべての実際のデータが含まれる。

もう1つの注目すべき奇妙な点は、Notchによる元の仕様ではタグ名にスペースを使用できるが、例でもタグ名にスペースを使用しているにもかかわらず、Minecraftにはタグに名前にスペースが含まれる既知のファイルがないということである。また、大部分がlowerCamelCaseまたはUpperCamelCaseのいずれかであるが、場合によってはすべて小文字でもよいなど、大文字小文字の使用に一貫性がない。

使用[編集 | ソースを編集]

  • level.datは圧縮されたNBT形式で保存される
  • <player>.datファイルは圧縮されたNBT形式で保存される
  • idcounts.datは非圧縮NBT形式で保存される
  • villages.datは圧縮されたNBT形式で保存される
  • map_<#>.datファイルは圧縮されたNBT形式で保存される
  • servers.datは保存されたマルチプレイヤーサーバーのリストを非圧縮NBTとして保存するのに使用される
  • ChunksはRegionファイル内に圧縮されたNBT形式で保存される
  • scoreboard.datは圧縮されたNBT形式で保存される
  • Generated structuresは圧縮されたNBT形式で保存される

ソフトウェア[編集 | ソースを編集]

Mojangは、開発者がMcRegion -> Anvil converterコンバーターのソースコードの一部として使用および参照するためのサンプルJava NBTクラスを提供している。これ以外に、コミュニティは圧縮および非圧縮のNBTファイルを表示および変更するプログラムを開発した。

名前 NBTバージョン 説明 スクリーンショット
MineBack Ultimate 19133 MineBack Ultimateは、利用可能なすべてのタイプのNBT形式ファイル(マップ、レベル、ワールドなど)をサポートする完全なNBTエディターを提供する。最新のGUIと多くのヘルパー機能が付属している。 MineBackNBTEditor.png
NBTEdit 19132 Windowsツリーコントロールを介してNBTファイルを表示および変更できる。 NBTバージョンが遅れているだけでなく、同じ名前の複数のタグをサポートせず、一部の種類で誤った範囲を強制し、非圧縮のNBTファイルをサポートしていないため、時代遅れである。 NBTEdit Level.Dat.png
NBTExplorer - Forum Post 19133 このプログラムは、NBTEditに触発され、それに基づいており、Windowsツリーコントロールを介してNBTファイルを表示および編集できる。圧縮および非圧縮のNBTファイルをサポートし、MCRegionおよびAnvilファイル、level.datなどのNBT構造を直接編集できる。 NBTExplorer.png
NBT grammar for Synalyze It! 19132 これを使用すると、解析されたタグツリーとともに色分けされた16進ダンプが表示される。現在、非圧縮ファイルのみがサポートされている。 Synalyze-It-NBT-decoded.png
NEINedit 19132 テキストベースのツリー構造を備えたMac用のNBTエディター。 NEINedit.png
NBT2YAML 19133 nbt2yamlは、カスタムYAML形式を使用してMinecraft NBTファイルを読み取りおよび編集するためのコマンドラインインターフェイスを提供しする。 また、単純なPythonデータ構造との間でNBTファイルを解析および書き込むためのPython APIも含まれている。
webNBT 19133 webNBTは、ユーザーがアプリケーションをダウンロードしたり、サードパーティのブラウザープラグイン(FlashやJavaなど)を使用したりすることなく、最新のブラウザーで実行されるNBTエディターである