NBT Format

2022-03-23Minecraft_Protocol

このサイトを参考にしたり表を取っています

広告

フォーマット

Type ID(byte)名前の長さ(short)名前Payload
デーコード結果29shortTest32767
16進数上0200 0973 68 6F 72 74 54 65 73 747F FF
https://wiki.vg/NBTの票を一部改変

注意:TAG_Listの中にある場合はTypeIDと名前の長さ、名前がありません

TypeIDの種類

Type ID名前Payload の大きさ(byte)説明
0TAG_End0TAG_Compoundの終わりを知らせる
名前の長さや、名前、Payloadは存在しない
1TAG_Byte1符号付きのbyte(8bit)
2TAG_Short2符号付きのshort(16bit)
3TAG_Int4符号付きのinteger(32bit)
4TAG_Long8符号付きのlong(64bit)
5TAG_Float4符号付きのIEEE-754に準拠したfloat(NaNもある)
6TAG_Double8符号付きのIEEE-754に準拠したdouble(NaNもある)
7TAG_Byte_Arrayinteger(32bit)+中身符号付きのbyte(8bit)の配列
初めに符号付きのinteger(配列の長さ)で
その次からbyteの塊
8TAG_String符号なしshort(16bit)+byteの塊String(文字列) 文字列の形式
初めに文字列の長さ(読み込むbyte数)として
符号なしのshort(16bit)が送られる、次にその分byteを読み込む
9TAG_Listbyte(8bit)+integer(32bit)
+中身
中身の名前がなく中身のTypeIDがすべて同じである
初めにTypeID(byte)で、
次に配列の長さ(integer)がある
中には名前、TypeIDがない(つまりPayloadやデータのみ)

注意:
TAG_Compoundは、TypeIDの10はないけど最後のTAG_Endの0はある

長さが0以下の場合はTypeIDは0にするのが望ましい
解析する人は、長さが0以下の場合は任意のタイプを受け付けないといけない(よくわからんかった)
10TAG_Compound知らん最後はTAG_Endで終わるまとまり TAG_Listと違ってTypeIDや名前がある
長さなどはない(代わりにTAG_Endがある)
また、中身がすべて同じ型じゃなくてもいい
TAG_Endでこれが終わったことが分かる
11TAG_Int_Arrayinteger(32bit)+中身符号付きのinteger(32bit)の配列
初めに符号付きのinteger(配列の長さ)で
その次からintegerの塊
12TAG_Long_Arrayinteger(32bit)+中身符号付きのlong(64bit)の配列
初めに符号付きのinteger(配列の長さ)で
その次からlongの塊
これもhttps://wiki.vg/NBTの票を一部改変

その他

NBTファイルは非圧縮かzlibかgzipで圧縮されている
ファイルの初めは無名(名前の長さが0)のTAG_Compound(typeID:10)で始まっている
Java版のNBTファイルの数値はすべてビッグエンディアンです

またBedrockエディションのNBTファイルはちょっと違います
(BedrockのNBTファイルを扱ったことはないので….)
Bedrockはこんな感じの仕様みたいです

広告

2022-03-23Minecraft_Protocol

Posted by koufu193