天才一秒記住【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的元件差不多,都是一個『鍵值對』)