🏷️ NBT API
NBT(二进制命名标签,Named Binary Tags**)** 格式为Minecraft中用于向文件中存储数据的一种存储格式。
NBT格式以树形结构并配以许多标签 的形式存储数据。所有的标签都有一个独立的ID和名称。--- Minecraft Wiki
这里为脚本提供了操作 NBT 数据类型的能力。 NBT 接口的支持,极大的提高了游戏的可扩展性
游戏中,使用被称为 **NBT标签 **的节点来标识一项NBT数据。NBT标签中可以储存普通数据、List、Compound 等多种数据类型。
在LegacyScriptEngine中,每种NBT数据类型都有其对应的数据类型,我们统称他们为「NBT对象」。
脚本引擎类型与NBT数据类型的对照如下:
| NBT数据类型 | 对应的NBT对象类型 | 类型说明(来自MC Wiki) |
|---|---|---|
Byte | NbtByte | 有符号字节 或 布尔值(8位) |
Short | NbtShort | 有符号短整型(16位) |
Int | NbtInt | 有符号整形(32位) |
Long | NbtLong | 有符号长整型(64位) |
Float | NbtFloat | 单精度浮点数 |
Double | NbtDouble | 双精度浮点数 |
ByteArray | NbtByteBuffer | 字节数组 |
String | NbtString | UTF-8 字符串 |
List | NbtList | NBT 列表(类似于 数组) |
Compound | NbtCompound | NBT 标签(类似于 键值对列表) |
每种数据类型可能有略微不同的使用接口。下面对他们作分别介绍
🎈 NBT 对象通用接口
每一个 NBT 对象都包含一些可以执行的成员函数(成员方法)
对于任何种类的NBT对象,都有下面这些通用的接口。以名为nbt的某个NBT对象为例:
获取NBT对象储存的数据类型
nbt.getType()
- 返回值:此NBT对象储存的数据类型
- 返回值类型:
Enum
可能的返回值有:NBT.End NBT.Byte NBT.Short NBT.Int NBT.Long
NBT.Float NBT.Double NBT.ByteArray NBT.String
NBT.List NBT.Compound
将NBT对象转换为JSON字符串
nbt.toString([space])
- 参数
- space :
Integer
(可选参数)如果要格式化输出的字符串,则传入此参数
代表每个缩进的空格数量,这样生成的字符串更适合人阅读
此参数默认为-1,即不对输出字符串进行格式化 - 返回值:对应的JSON字符串
- 返回值类型:
String
提示:如果这个NBT对象储存的是List或者Compound类型,将递归展开为Array或Object
如果这个NBT对象储存的是ByteArray类型,输出的字节串将先进行base64编码后再输出
上述函数输出的字符串符合JSON标准格式,但是无法进行反序列化。
如果有反序列化的需求,请使用 NBT标签类 提供的的 SNBT 接口
将 NBT 对象转换为 SNBT 字符串
nbt.toSNBT([space[,format]])
- 参数
- space :
Integer(可选参数)缩进空格数。传入-1或省略时不进行格式化输出。 - format :
Enum(可选参数)SNBT 输出格式,使用SnbtFormat枚举中的值。 - 返回值:对应的 SNBT 字符串
- 返回值类型:
String
调用 nbt.toSNBT() 时,默认使用 SnbtFormat.ForceQuote。
调用 nbt.toSNBT(space) 且 space >= 0 时,默认使用
SnbtFormat.PartialLineFeed。
如果需要显式指定其他 SNBT 格式,请使用 nbt.toSNBT(space, format)。
🎨 SnbtFormat 枚举
SnbtFormat 是 nbt.toSNBT([space[,format]]) 使用的枚举。
可用的枚举值如下:
| 枚举值 | 数值 | 说明 |
|---|---|---|
SnbtFormat.Minimize | 0 | 最小化输出。 |
SnbtFormat.CompoundLineFeed | 1 | 对 Compound 成员进行换行。 |
SnbtFormat.ArrayLineFeed | 2 | 对数组 / 列表内容进行换行。 |
SnbtFormat.Colored | 4 | 为输出添加颜色格式。 |
SnbtFormat.Console | 8 | 使用面向控制台的格式。 |
SnbtFormat.ForceAscii | 16 | 强制使用 ASCII 输出。 |
SnbtFormat.ForceQuote | 32 | 强制字符串使用引号输出。 |
SnbtFormat.CommentMarks | 64 | 添加注释风格标记。 |
SnbtFormat.Jsonify | 96 | 预设组合:ForceQuote | CommentMarks。 |
SnbtFormat.PartialLineFeed | 1 | CompoundLineFeed 的别名。 |
SnbtFormat.AlwaysLineFeed | 3 | 预设组合:CompoundLineFeed | ArrayLineFeed。 |
SnbtFormat.PrettyFilePrint | 1 | PartialLineFeed 的别名。 |
SnbtFormat.PrettyChatPrint | 5 | 预设组合:PrettyFilePrint | Colored。 |
SnbtFormat.PrettyConsolePrint | 13 | 预设组合:PrettyFilePrint | Colored | Console。 |
其中 CompoundLineFeed、ArrayLineFeed、Colored、Console、ForceAscii、ForceQuote、CommentMarks 是位标记。
其余项是预设组合或别名。