跳到正文
本頁目錄

🏷️ 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)
ByteNbtByte有符號字節 或 布爾值(8位)
ShortNbtShort有符號短整型(16位)
IntNbtInt有符號整形(32位)
LongNbtLong有符號長整型(64位)
FloatNbtFloat單精度浮點數
DoubleNbtDouble雙精度浮點數
ByteArrayNbtByteBuffer字節數組
StringNbtStringUTF-8 字符串
ListNbtListNBT 列表(類似於 數組)
CompoundNbtCompoundNBT 標籤(類似於 鍵值對列表)

每種數據類型可能有略微不同的使用接口。下面對他們作分別介紹

🎈 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.Minimize0最小化輸出。
SnbtFormat.CompoundLineFeed1對 Compound 成員進行換行。
SnbtFormat.ArrayLineFeed2對數組 / 列表內容進行換行。
SnbtFormat.Colored4為輸出添加顏色格式。
SnbtFormat.Console8使用面向控制台的格式。
SnbtFormat.ForceAscii16強制使用 ASCII 輸出。
SnbtFormat.ForceQuote32強制字符串使用引號輸出。
SnbtFormat.CommentMarks64添加註釋風格標記。
SnbtFormat.Jsonify96預設組合:ForceQuote | CommentMarks。
SnbtFormat.PartialLineFeed1CompoundLineFeed 的別名。
SnbtFormat.AlwaysLineFeed3預設組合:CompoundLineFeed | ArrayLineFeed。
SnbtFormat.PrettyFilePrint1PartialLineFeed 的別名。
SnbtFormat.PrettyChatPrint5預設組合:PrettyFilePrint | Colored。
SnbtFormat.PrettyConsolePrint13預設組合:PrettyFilePrint | Colored | Console。

其中 CompoundLineFeed、ArrayLineFeed、Colored、Console、ForceAscii、ForceQuote、CommentMarks 是位標記。
其餘項是預設組合或別名。