首頁(yè) 游戲

Minecraft指令手冊(cè)

第五十四章 初識(shí)NBT

Minecraft指令手冊(cè) 你好MC 226 2020-01-30 10:24:33

 ?。ù苏鹿?jié)已于2022年8月1日再次修改)

  你肯定很好奇為什么多人游戲指令講著講著就突然講到NBT了。實(shí)際上原本這一章講的是『解封玩家』,但在本書(shū)第一次大修過(guò)程中這一章的內(nèi)容被合并到了第五十二章,因此這一章就空了出來(lái)。

  還有一個(gè)原因是,第一次大修過(guò)程中,我也去參考了許多其他制作得比較優(yōu)良的Minecraft命令教程,發(fā)現(xiàn)他們大多數(shù)講NBT比較早,這樣子以后深入時(shí)就好展開(kāi)講。而本書(shū)在第一次大修前,NBT的內(nèi)容在第100章才匆忙開(kāi)始。

  因此,為了讓各位讀者能夠更好地掌握NBT的相關(guān)知識(shí),我們就先在這里初步認(rèn)識(shí)一下NBT。

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

  在第一次聽(tīng)到NBT這個(gè)詞時(shí),你腦海里肯定會(huì)浮現(xiàn)出三個(gè)問(wèn)題:

  『什么是NBT?NBT能干什么?我該如何使用NBT?』

  NBT,全稱Named Binary Tag,中文翻譯為二進(jìn)制命名標(biāo)簽。它在Minecraft中你雖然見(jiàn)不到,但它無(wú)處不在:在雞里面、在計(jì)分板里面、在玩家里面、在區(qū)塊里面......

  所以NBT到底是啥?

  .........

  『看,那里有一個(gè)東西!』

  單純這樣描述,你估計(jì)想不出來(lái)也不了解這個(gè)『東西』是什么。但如果我這樣描述呢:

  這個(gè)東西的『種類(lèi)』是『生物』

  『生物種類(lèi)』是『狗』

  『毛發(fā)顏色』是『黃色』

  『品種』是『哈士奇』

  『質(zhì)量』是『33kg』

  『主人』是『旁邊的那個(gè)人』

  『年齡』是『5歲』

  當(dāng)我像上面這樣描述時(shí),你對(duì)這個(gè)東西也越發(fā)的變得了解。NBT也是個(gè)類(lèi)似的玩意兒,只不過(guò)它不光是給你看的,它還是給游戲看的。

  在Minecraft中,NBT就像上面我描述那個(gè)東西所用的方法一樣,它也用于『描述』游戲內(nèi)部的事物:

  『命名空間ID』是『minecraft:command_block』

  『限制』是『無(wú)條件限制』

  『坐標(biāo)』是『45,12,32』

  『自動(dòng)激活』是『關(guān)閉』

  『內(nèi)部指令』是『say hello!』

  通過(guò)上面的描述,你和游戲應(yīng)該都清楚了,這是一個(gè)脈沖型、沒(méi)有條件限制、處于坐標(biāo)(45,12,32)、需要紅石、寫(xiě)有指令『say hello!』的命令方塊。

  仔細(xì)觀察上面的內(nèi)容,你應(yīng)該會(huì)發(fā)現(xiàn),我們都是使用類(lèi)似于下面的格式來(lái)進(jìn)行描述:

  『一個(gè)描述』是『多少』

  像上面這樣子的一對(duì)『描述』和『值』,在NBT中就叫做『標(biāo)簽』。

  一個(gè)標(biāo)簽具有標(biāo)簽名稱和值,標(biāo)簽名稱規(guī)定了這個(gè)標(biāo)簽具體是干啥用的,值則描述了這個(gè)標(biāo)簽具體是怎么干的。標(biāo)簽名稱和值使用英文半角冒號(hào)分開(kāi),標(biāo)簽名在左,值在右。比如:

  Health:20.0f

  這個(gè)標(biāo)簽的名稱是『Health』,代表著這個(gè)標(biāo)簽用來(lái)記錄著這個(gè)東西的生命值。值是『20.0f』,代表著這個(gè)東西當(dāng)前的生命值為20.0(你先不用管f是啥)。

  標(biāo)簽和標(biāo)簽之間使用英文半角逗號(hào)區(qū)分,比如:

  Health:20.0f,CustomName:“What?“

  一堆像這樣的標(biāo)簽,就組成了一個(gè)NBT標(biāo)簽:

  {Health:20.0f,CustomName:“What?“}

  一個(gè)NBT標(biāo)簽內(nèi)有一個(gè)或多個(gè)標(biāo)簽,外面被花括號(hào)所包圍。NBT標(biāo)簽其實(shí)還可以嵌套作為值成為『復(fù)合標(biāo)簽』,下面會(huì)具體講到這個(gè)東西。

  和JSON文本一樣,標(biāo)簽的值也有許多類(lèi)型,具體的我們到以后再詳細(xì)了解,這里就先簡(jiǎn)單介紹一下。

  值的數(shù)據(jù)類(lèi)型可以粗略分為五種:數(shù)組、數(shù)值、文本、復(fù)合標(biāo)簽和列表。數(shù)組以后再講,現(xiàn)在我們只需要來(lái)認(rèn)識(shí)一下剩下的四種。

  數(shù)值類(lèi)型,也就是一串?dāng)?shù)字。一般這一串?dāng)?shù)字為整型數(shù),比如:

  {Dimension:10}

  但有些標(biāo)簽的值也可以是浮點(diǎn)數(shù),如:

  {Health:7.8f}

  (f在這邊代表值類(lèi)型為單精度浮點(diǎn)數(shù),一般情況下可以省略這些后綴字母,但如果出了問(wèn)題還是要加上的)

  什么是整型和浮點(diǎn)數(shù)?簡(jiǎn)單來(lái)說(shuō),整型就是整數(shù)數(shù)據(jù)類(lèi)型,也就是整數(shù);浮點(diǎn)數(shù)是一種看起來(lái)很像小數(shù)的表示方法。其中,后者具有小數(shù)點(diǎn),既能表示整數(shù)也能表示小數(shù)。比如:

  10

  10.0

  雖然這兩個(gè)數(shù)大小一樣,也都是整數(shù)。但在計(jì)算機(jī)眼中,上者是『整型數(shù)』,下者是『浮點(diǎn)數(shù)』,并不一樣。

  文本類(lèi)型,也就是一串文本。和數(shù)值不一樣的是,文本需要使用英文半角引號(hào)將內(nèi)容包裹起來(lái)。如:

  {CustomName:“Arcaea“}

  在Java1.14及以上版本中,引號(hào)也可以使用半角單引號(hào):

  {CustomName:'Arcaea'}

  復(fù)合標(biāo)簽類(lèi)型聽(tīng)起來(lái)很高大上。但只要你語(yǔ)文好一點(diǎn),就會(huì)發(fā)現(xiàn)它并沒(méi)有多么高大上。

  『復(fù)合』的意思是:把兩種或幾種成分結(jié)合起來(lái)。所以『復(fù)合標(biāo)簽』的意思就是:把多個(gè)標(biāo)簽結(jié)合起來(lái)。在這邊,這個(gè)標(biāo)簽并不是普通的標(biāo)簽,而是由多個(gè)標(biāo)簽組合成的NBT標(biāo)簽:

  {標(biāo)簽名:{標(biāo)簽名:值,標(biāo)簽名:值......}}

  也就是說(shuō),復(fù)合標(biāo)簽本質(zhì)上,其實(shí)就是將一個(gè)NBT標(biāo)簽塞到另一個(gè)NBT標(biāo)簽里面去:

  {Riding:{id:“xxxx“,Health:20.0f},id:“yyy“}

  列表類(lèi)型常常與復(fù)合標(biāo)簽類(lèi)型結(jié)合使用。它長(zhǎng)這個(gè)樣子:

  {標(biāo)簽名:[值,值,值,值......]}

  列表類(lèi)型的本質(zhì),就是把多個(gè)同類(lèi)型的值組合在一起。比如:

  {Friends:[“XiaoHong“,“XiaoMing“,“XiaoZhang“]}

  這里Friends標(biāo)簽的值就是三個(gè)文本組成的列表。

  剛才說(shuō)過(guò)列表類(lèi)型常常與復(fù)合標(biāo)簽類(lèi)型結(jié)合使用,具體的使用法是這樣子的:

  {標(biāo)簽:[{標(biāo)簽},{標(biāo)簽},{標(biāo)簽}]}

  也就是把多個(gè)NBT標(biāo)簽(復(fù)合標(biāo)簽)組合成一個(gè)列表。在以后我們會(huì)經(jīng)常性地遇到這樣的用法。

  這就是NBT,或者說(shuō),是Mojang專門(mén)研發(fā)出來(lái)能夠給人看的:SNBT(Stringified NBT),也就是『字符串化的二進(jìn)制命名標(biāo)簽』。而真正的NBT,其實(shí)是樹(shù)狀結(jié)構(gòu),和上面的SNBT有很大差別。只不過(guò)你不用擔(dān)心怎么區(qū)分NBT和SNBT,因?yàn)楦陕镆苣??在大多?shù)語(yǔ)境下,大家是不會(huì)特意區(qū)分NBT和SNBT的,一般都統(tǒng)稱為NBT。

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

  {Elements:[{Name:“Pyro“,Id:1},{Name:“Hydro“,Id:2},{Name:“Anemo“,Id:3},{Name:“Electro“,Id:4},{Name:“Dendro“,Id:5},{Name:“Cryo“,Id:6},{Name:“Geo“,Id:7}]}

  本章就到這里了。

  (其實(shí),標(biāo)簽的本質(zhì),和JSON的組件差不多,都是一個(gè)『鍵-值對(duì)』)

按 “鍵盤(pán)左鍵←” 返回上一章  按 “鍵盤(pán)右鍵→” 進(jìn)入下一章  按 “空格鍵” 向下滾動(dòng)
目錄
目錄
設(shè)置
設(shè)置
書(shū)架
加入書(shū)架
書(shū)頁(yè)
返回書(shū)頁(yè)
指南