第一百零八章 掉落物的NBT 上 -物品通用標(biāo)簽
物品的NBT就先講到這,如果你還想了解更多,可以前往Minecraft Wiki搜索詞條『Player.dat格式』,里面寫了很多常用的物品標(biāo)簽。從這一章開始,我們就要開始學(xué)習(xí)實體的NBT。
.......
如果你看過『作品相關(guān)』的:
『如何制作一個起床戰(zhàn)爭資源點(diǎn)』
?。ìF(xiàn)在不推薦你看這一章)
那你應(yīng)該知道,在Java版,除了那一章講的方法以外,還可以使用/summon指令來快捷生成掉落物。而這種方法的核心,就是:掉落物(minecraft:item)的NBT。
?。ㄊ裁??Mojang改名了?Logo也改了?微軟為了慶祝Minecraft11周年改的?)
————一個并不怎么華麗的分割線————
鉆石<——看!你掉了一顆鉆石在這!
你知道,如果你不在五分鐘內(nèi)撿起它的話,那么你幸幸苦苦挖到的鉆石就會憑空消失。
你也知道,如果這顆鉆石掉進(jìn)巖漿,或碰到仙人掌和火焰,那么這顆鉆石也會消失。
但你可能不知道,上面這些,都是寫在掉落物的NBT里的。
接下來,讓我們進(jìn)入鉆石(掉落物)的NBT里,來研究研究:
{Age:0s,Health:5s,PickupDelay:0s,Item:{Count:1b,id:“minecraft:diamond“}
↑↑↑這是你掉的鉆石的NBT,需要注意這只不過是一個簡化版↑↑↑
其中,Age標(biāo)簽的數(shù)據(jù)類型為Short短整型,它唯一的作用是記錄『這個物品已經(jīng)掉落多長時間,以方便游戲清除掉落時間過長的物品』,它的單位為『游戲刻』。此時Age標(biāo)簽的值為0,說明這個鉆石剛剛才掉落。該標(biāo)簽實際可發(fā)揮作用的值范圍為『-32767~6000』,如果設(shè)置為『-32767』,那么這個物品將會一直存在于這里(沒錯,你就不用擔(dān)心死了之后跑回來在要撿起物品時物品突然消失所導(dǎo)致的德國boy行為了)。
那如果到了6000呢?恭喜,你的物品違反了能量守恒定律憑空消失了。
然后是Health,你肯定會很驚訝為什么掉落物也有生命值呢?實際上小編也——
實際上我不驚訝,因為我早就知道了
Health標(biāo)簽的數(shù)據(jù)類型也是Short短整型,它的值決定了你的物品的抗火焰、巖漿以及仙人掌的能力(想攻擊一個掉落物?做夢!),游戲默認(rèn)值為5,當(dāng)為0時就會被銷毀。
如果你不想讓你的鉆石被熔巖焚毀,就可以嘗試修改修改這個Health標(biāo)簽的值。
于是——震驚MC科學(xué)界的發(fā)現(xiàn)!碳元素組成的鉆石竟然在超高溫下仍然健在!
?。ㄟ@樣子就可以解釋為什么那些坑新手的MC教程里,鉆石扔進(jìn)熔巖并沒有被銷毀了。)
→記住:永遠(yuǎn)不要和MC講科學(xué)
PickupDelay這個標(biāo)簽有點(diǎn)有趣。在介紹這個NBT標(biāo)簽之前,先讓你了解了解一個掉落物的細(xì)節(jié):
假設(shè)現(xiàn)在將鉆石扔到你的腳下,你會發(fā)現(xiàn):鉆石在落地后并沒有馬上被你撿起,而是過了一兩秒之后,才被你撿起來。
(如果在很土豆的服務(wù)器,這個時間會更長)
為什么會這樣呢?
就是因為PickupDelay標(biāo)簽。
PickupDelay標(biāo)簽的數(shù)據(jù)類型也是Short短整型,它的值代表著掉落物剩下不能被撿起的時長,每游戲刻它的值都會減少1,當(dāng)它的值減到0時就代表掉落物可以被玩家撿起。
就因為這個標(biāo)簽,導(dǎo)致你扔出去東西后不會立馬回到你的身上,而是要等一會兒。
如果你將這個值設(shè)定為32767,那恭喜你——你永遠(yuǎn)也撿不起這個鉆石了,因為設(shè)定為32767后,這個值將不再會減少。
Item標(biāo)簽的數(shù)據(jù)類型是復(fù)合標(biāo)簽,它存儲著該掉落物的核心——物品的信息。那這物品的信息到底是通過哪些標(biāo)簽儲存的呢?
接下來,容許我隆重介紹Minecraft中三大通用標(biāo)簽之一的:
物品通用標(biāo)簽
『物品通用標(biāo)簽』具有下面幾個標(biāo)簽:
Count(Byte字節(jié)型)——物品堆疊的數(shù)量。
Slot(Byte字節(jié)型)——物品所在的欄位(很多情況下不會有這個標(biāo)簽)。
id(String文本|JE1.8前只支持?jǐn)?shù)值)——物品命名空間ID。神奇的是如果你不填,那么游戲會把物品認(rèn)成石頭。
Damage(扁平化中被換職|Short短整型)——物品數(shù)據(jù)值
tag(復(fù)合標(biāo)簽)——關(guān)于當(dāng)前物品的額外信息,我們前幾章了解的各種物品標(biāo)簽其實都存儲在這個復(fù)合標(biāo)簽里面。
舉個例子,假設(shè)你的副手拿著三顆附魔了鋒利I的鉆石,那么這三顆鉆石的物品NBT標(biāo)簽就是:
{Count:3b,Slot:-106b,id:“minecraft:diamond“,tag:{Enchantments:[{id:“minecraft:sharpness“,lvl:1}]}}
\\適用于Java1.13及以上版本\\
{Count:3b,Slot:-106b,id:“minecraft:diamond“,Damage:0s,tag:{ench:[{id:16,lvl:1}]}}
\\適用于Java1.8~1.12.2版本\\
其中,『Count:3b』代表有3個物品,『Slot:-106b』代表該物品在副手欄位(副手欄位的號碼為-106,注意這里的欄位號碼不等同于欄位ID),『id:“minecraft:diamond“』代表該物品是鉆石,『tag』下的『Enchantments或ench』規(guī)定了該物品的附魔情況。對于扁平化前的版本來說,『Damage:0s』還代表著該鉆石的數(shù)據(jù)值為0。
『物品通用標(biāo)簽』中唯一需要注意的是id標(biāo)簽,id標(biāo)簽在MC歷史上有很多改變。在Java1.8以前,它的數(shù)據(jù)類型為Short短整型,存儲的是物品的數(shù)字ID。而1.8之后,Mojang漸漸拋棄了數(shù)字id,id標(biāo)簽的數(shù)據(jù)類型也就變成了String文本(字符串)類型,用來存儲物品的命名空間ID。
現(xiàn)在,讓我們嘗試生成一個鉆石。等等,這個Damage標(biāo)簽,不是已經(jīng)在第一百零三章就出現(xiàn)了嗎,為什么這里又出現(xiàn)了呢?
因為這個Damage標(biāo)簽在扁平化之前,也是物品通用標(biāo)簽的一份子,用來儲存這個物品的數(shù)據(jù)值。1.13扁平化之后,數(shù)據(jù)值沒了,這個Damage標(biāo)簽就被Mojang調(diào)到tag下面成為物品的『損壞值』。
所以存在于物品tag標(biāo)簽下的Damage標(biāo)簽,是JE1.13更新中才出現(xiàn)的。JE1.13以前的損害值,就直接和物品數(shù)據(jù)值結(jié)合在一起(就像現(xiàn)在的基巖版一樣)。
現(xiàn)在,讓我們正式生成一個鉆石:
/summon item ~~-2 ~{Age:0s,Item:{Count:1b,id:“minecraft:diamond“}}
\\適用于Java1.11及以上版本\\
/summon Item ~~-2 ~{Age:0s,Item:{Count:1b,id:“minecraft:diamond“}}
\\適用于Java1.8~1.10.2\\
/summon Item ~~-2 ~{Age:0s,Item:{Count:1b,id:264s}}
\\適用于Java1.7.2~1.7.10\\
你可能注意到了,這條指令的生成位置是在腳底下兩格處。為什么要這樣做?
答案你應(yīng)該知道:因為我們沒有指定PickupDelay標(biāo)簽,游戲在生成時就會默認(rèn)它為0,就容易導(dǎo)致鉆石一生成還沒落地就被我們吸走。
所以現(xiàn)在你知道該如何制作一個高端大氣上檔次的起床戰(zhàn)爭資源點(diǎn)了嗎?別忘記把Age設(shè)成-32767了!
本章到此為止。
附錄:掉落物和物品通用標(biāo)簽的歷史
Java
0.24——加入了掉落物
1.3.1——同一處的同一類型掉落物現(xiàn)在會自行堆疊
1.8——物品通用標(biāo)簽的id標(biāo)簽的數(shù)據(jù)類型從Short短整型改為String字符串
1.11——實體ID從Item變?yōu)閕tem
1.13——物品通用標(biāo)簽的Damage標(biāo)簽被移到tag標(biāo)簽下,數(shù)據(jù)類型從Short短整型改為Int整型。
攜帶版/基巖版
0.2.0——加入了掉落物
?——物品通用標(biāo)簽的id標(biāo)簽被Name標(biāo)簽替代