UU看書

第五十四章 初識NBT

天才一秒記住【UU看書】地址:www.uukanshu.co

(此章節已於2022年8月1日再次修改)

你肯定很好奇為什麼多人遊戲指令講著講著就突然講到NBT了。實際上原本這一章講的是『解封玩家』,但在本書第一次大修過程中這一章的內容被合併到了第五十二章,因此這一章就空了出來。

還有一個原因是,第一次大修過程中,我也去參考了許多其他製作得比較優良的Minecraft命令教程,發現他們大多數講NBT比較早,這樣子以後深入時就好展開講。而本書在第一次大修前,NBT的內容在第100章才匆忙開始。

因此,為了讓各位讀者能夠更好地掌握NBT的相關知識,我們就先在這裡初步認識一下NBT。

————————————

在第一次聽到NBT這個詞時,你腦海裡肯定會浮現出三個問題:

『什麼是NBT?NBT能幹什麼?我該如何使用NBT?』

NBT,全稱NamedBinaryTag,中文翻譯為二進位制命名標籤。它在Minecraft中你雖然見不到,但它無處不在:在雞裡面、在計分板裡面、在玩家裡面、在區塊裡面

所以NBT到底是啥?

『看,那裡有一個東西!』

單純這樣描述,你估計想不出來也不瞭解這個『東西』是什麼。但如果我這樣描述呢:

這個東西的『種類』是『生物』

『生物種類』是『狗』

『毛髮顏色』是『黃色』

『品種』是『哈士奇』

『質量』是『33kg』

『主人』是『旁邊的那個人』

『年齡』是『5歲』

當我像上面這樣描述時,你對這個東西也越發的變得了解。NBT也是個類似的玩意兒,只不過它不光是給你看的,它還是給遊戲看的。

在Minecraft中,NBT就像上面我描述那個東西所用的方法一樣,它也用於『描述』遊戲內部的事物:

『名稱空間ID』是『minecraftcommandblock』

『限制』是『無條件限制』

『座標』是『45,12,32』

『自動啟用』是『關閉』

『內部指令』是『sayhello』

透過上面的描述,你和遊戲應該都清楚了,這是一個脈衝型、沒有條件限制、處於座標45,12,32)、需要紅石、寫有指令『sayhello』的命令方塊。

仔細觀察上面的內容,你應該會發現,我們都是使用類似於下面的格式來進行描述:

『一個描述』是『多少』

像上面這樣子的一對『描述』和『值』,在NBT中就叫做『標籤』。

一個標籤具有標籤名稱和值,標籤名稱規定了這個標籤具體是幹啥用的,值則描述了這個標籤具體是怎麼幹的。標籤名稱和值使用英文半形冒號分開,標籤名在左,值在右。比如:

Health200f

這個標籤的名稱是『Health』,代表著這個標籤用來記錄著這個東西的生命值。值是『200f』,代表著這個東西當前的生命值為200(你先不用管f是啥)。

標籤和標籤之間使用英文半形逗號區分,比如:

Health200f,CustomName“What“

一堆像這樣的標籤,就組成了一個NBT標籤:

Health200f,CustomName“What“

一個NBT標籤內有一個或多個標籤,外面被花括號所包圍。NBT標籤其實還可以巢狀作為值成為『複合標籤』,下面會具體講到這個東西。

和JSON文字一樣,標籤的值也有許多型別,具體的我們到以後再詳細瞭解,這裡就先簡單介紹一下。

值的資料型別可以粗略分為五種:陣列、數值、文字、複合標籤和列表。陣列以後再講,現在我們只需要來認識一下剩下的四種。

數值型別,也就是一串數字。一般這一串數字為整型數,比如:

Dimension10

但有些標籤的值也可以是浮點數,如:

Health78f

(f在這邊代表值型別為單精度浮點數,一般情況下可以省略這些字尾字母,但如果出了問題還是要加上的)

什麼是整型和浮點數?簡單來說,整型就是整數資料型別,也就是整數;浮點數是一種看起來很像小數的表示方法。其中,後者具有小數點,既能表示整數也能表示小數。比如:

10

100

雖然這兩個數大小一樣,也都是整數。但在計算機眼中,上者是『整型數』,下者是『浮點數』,並不一樣。

文字型別,也就是一串文字。和數值不一樣的是,文字需要使用英文半形引號將內容包裹起來。如:

CustomName“Arcaea“

在Java114及以上版本中,引號也可以使用半形單引號:

CustomNameArcaea

複合標籤型別聽起來很高大上。但只要你語文好一點,就會發現它並沒有多麼高大上。

『複合』的意思是:把兩種或幾種成分結合起來。所以『複合標籤』的意思就是:把多個標籤結合起來。在這邊,這個標籤並不是普通的標籤,而是由多個標籤組合成的NBT標籤:

標籤名標籤名值,標籤名值

也就是說,複合標籤本質上,其實就是將一個NBT標籤塞到另一個NBT標籤裡面去:

Ridingid“xxxx“,Health200f,id“yyy“

列表型別常常與複合標籤型別結合使用。它長這個樣子:

標籤名值,值,值,值

列表型別的本質,就是把多個同型別的值組合在一起。比如:

Friends“XiaoHong“,“XiaoMing“,“XiaoZhang“

這裡Friends標籤的值就是三個文字組成的列表。

剛才說過列表型別常常與複合標籤型別結合使用,具體的使用法是這樣子的:

標籤標籤,標籤,標籤

也就是把多個NBT標籤(複合標籤)組合成一個列表。在以後我們會經常性地遇到這樣的用法。

這就是NBT,或者說,是Mojang專門研發出來能夠給人看的:SNBT(StringifiedNBT),也就是『字串化的二進位制命名標籤』。而真正的NBT,其實是樹狀結構,和上面的SNBT有很大差別。只不過你不用擔心怎麼區分NBT和SNBT,因為幹嘛要管呢?在大多數語境下,大家是不會特意區分NBT和SNBT的,一般都統稱為NBT。

現在你能夠看懂NBT了吧?你可以嘗試一下下面的這串,看看能否看懂。

ElementsName“Pyro“,Id1,Name“Hydro“,Id2,Name“Anemo“,Id3,Name“Electro“,Id4,Name“Dendro“,Id5,Name“Cryo“,Id6,Name“Geo“,Id7

本章就到這裡了。

(其實,標籤的本質,和JSON的元件差不多,都是一個『鍵值對』)

如遇章節錯誤,請點選報錯(無需登陸)

新書推薦

直播:艾澤拉斯 知晴知航線 鬥羅V:王者獨家系統來攪局 我有千萬打工仔 國象小子 網遊之超神級NPC玩家 這個海洋領主有點強