🏷️ 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 是位標記。
其餘項是預設組合或別名。