NBT格式¶
T21:43:31+08:00 NBT(Named Binary Tags)为MC向文件中存储数据的一种格式。
以特殊二进制标签与数据的线性排列来表示树形数据结构。
标签¶
ID | 二进制 | 标签类型 | SNBT(仅Java版) | 描述 | 存储范围 |
---|---|---|---|---|---|
0 | 00 | TAG_End | - | 用于标记复合标签的结尾。本标签无任何名称所以只有一个零字节。 | N/A |
1 | 01 | TAG_Byte | <number>b 或<number>B |
8位有符号整数 | -27到27-1(-128到127) |
2 | 02 | TAG_Short | <number>s 或<number>S |
16位有符号整数 | -215到215-1(-32,768到32,767) |
3 | 03 | TAG_Int | <number> |
32位有符号整数 | -231到231-1(-2,147,483,648到2,147,483,647) |
4 | 04 | TAG_Long | <number>l 或<number>L |
64位有符号整数 | -263到263-1(-9,223,372,036,854,775,808到9,223,372,036,854,775,807) |
5 | 05 | TAG_Float | <number>f 或<number>F |
32位有符号浮点数 | 数据精度根据数值而定,见单精度浮点数 |
6 | 06 | TAG_Double | <decimal number> 、<number>d 或<number>D |
64位有符号浮点数 | 数据精度根据数值而定,见双精度浮点数 |
7 | 07 | TAG_Byte_Array | [B;<byte>,<byte>,...] |
数组的大小size + size个TAG_Byte | 根据JVM的不同,数组成员最大数量可能在231 - 9和231 - 1(2,147,483,639和2,147,483,647)之间。 |
8 | 08 | TAG_String | <a-zA-Z0-9 text> 、"<text>" (" 需使用\" 转义)或'<text>' (' 需使用\' 转义) |
无符号16位整数的大小size + size长的UTF-8字符串。没有空结束符。 | 可解释为UTF-8字符串的最多65,535个字节(见变种UTF-8;ASCII字符均为1字节,大多数中文字符为3字节) |
9 | 09 | TAG_List | [<value>,<value>,...] |
无名称同类型标签列表。8位有符号整数的tagId + 32位有符号整数的大小size + size个tagId类型的标签负载 | 由于JVM的限制以及ArrayList的实现问题,列表成员最大数量为231 - 9(2,147,483,639)。另外,List和Compound标签的嵌套深度不能超过512。 |
10 | 0A | TAG_Compound | {<tag name>:<value>,<tag name>:<value>,...} |
以TAG_End结束。一系列完整的标签信息,包括ID、名称以及负载等。任意两个标签都不能有相同的名称。 | 不像列表,Compound标签内的标签数量没有硬性限制(不过仍受JVM分配的内存限制)。另外,List和Compound标签的嵌套深度不能超过512。 |
11 | 0B | TAG_Int_Array | [I;<integer>,<integer>,...] |
数组的大小size + size个TAG_Int | 根据JVM的不同,数组成员最大数量可能在231 - 9和231 - 1(2,147,483,639和2,147,483,647)之间。 |
12 | 0C | TAG_Long_Array | [L;<long>,<long>,...] |
数组的大小size + size个TAG_Long | 根据JVM的不同,数组成员最大数量可能在231 - 9和231 - 1(2,147,483,639和2,147,483,647)之间。 |
Text Only | |
---|---|
例:
Text Only | |
---|---|
0A
为 TAG_COMPOUND 标签,00 00
指示标签名字符串长度为0(level.dat
最外层被一个无名称的 TAG_COMPOUND 包裹)
0A
为 TAG_COMPOUND 标签,00 04
指示标签名字符串长度为 4,标签名字符串为 44 61 74 61
即 data
......
00
为 TAG_COMPOUND 标签结束
00
为 TAG_COMPOUND 标签结束
Dissect MC¶
level.dat¶
以 GZip 方式压缩后的NBT格式,将其添加后缀 .gzip
后解压,再用HEX Editor打开即可。