第一百三十二章 生物的共通NBT-2
在上一章的末尾,我們發(fā)現(xiàn)玩家和生物其本身的NBT很多是互通的。所以,你能在生物的共通NBT中找到一些玩家身上也有的NBT。
比如:FallFlying(值:布爾值)
FallFlying是個(gè)布爾值,一般來(lái)說(shuō)它是0。如果是1,生物(或者是說(shuō)“非玩家實(shí)體”)就會(huì)像用鞘翅滑翔般滑翔起來(lái)。而如果是玩家,那么玩家當(dāng)然是在滑翔時(shí)這個(gè)值才會(huì)是1,所以FallFlying被用于檢測(cè)一個(gè)玩家是否在滑翔。
那么這到底有什么用呢?
或許就是讓非玩家實(shí)體滑翔起來(lái)吧,或者是用于服務(wù)器防飛行掛的鞘翅飛行檢測(cè),防止誤判。
這是一個(gè)玩家和生物NBT互通的例子,而在生物的共通NBT中,還有很多這樣的例子,比如這三個(gè):
SleepingX(值:數(shù)值)
SleepingY(值:數(shù)值)
SleepingZ(值:數(shù)值)
這三個(gè)標(biāo)簽并不是時(shí)時(shí)刻刻都會(huì)出現(xiàn),因?yàn)檫@三個(gè)標(biāo)簽的作用是:
記錄實(shí)體當(dāng)前正在睡覺(jué)的床的坐標(biāo)
為什么還要記錄呢?直接使用實(shí)體本身的坐標(biāo)不行嗎?
肯定不行,因?yàn)镸C是一個(gè)充滿特性的世界。如果你哪天在MC里睡覺(jué),沒(méi)想到觸發(fā)了一個(gè)特性,讓你飄離床,在飛天神曲的沐浴下經(jīng)過(guò)了流沙河,翻越了火焰山,到達(dá)了西天大雷音寺這樣子在睡夢(mèng)中完成了西天取經(jīng)的十萬(wàn)八千里。然后你醒來(lái)了,如果游戲就是采用直接使用實(shí)體本身的坐標(biāo)的話,那么——
“我是誰(shuí)?我在哪?我在干什么?”
(過(guò)了一會(huì))
這時(shí)東土大唐邊境河州衛(wèi),玄奘正要離開驛館。突然觀音菩薩出現(xiàn)在玄奘面前,告訴他有人已經(jīng)提前一步拿到了大乘佛法了。
玄奘:.........
所以Mojang為了避免這種情況的發(fā)生,使用了在玩家睡覺(jué)的時(shí)候就記錄床位置的方法,這樣子就算玩家飄離了十萬(wàn)八千里再起來(lái):
“啊~又是新的一天啊?!?p> “應(yīng)該給自己的豪宅再升級(jí)一下了?!?p> (于是玩家挖了幾塊泥土)
“真不錯(cuò)。”
所以這三個(gè)標(biāo)簽是極其重要的。
只不過(guò)生物會(huì)睡覺(jué)嗎?好像只有村民會(huì)哦。
比如現(xiàn)在這里有個(gè)村民,他睡在X=564,Y=87,Z=65這個(gè)床上,那么他這個(gè)時(shí)候的這三個(gè)值就是:
{
SleepingX:564,
SleepingY:87,
SleepingZ:65
}
——————一個(gè)很不華麗的分界線———————
在上一章我們講到,生命的最大值其實(shí)就是一個(gè)屬性。如果我們要修改這個(gè)屬性,該怎么辦呢?
生物的共通NBT里就有這么個(gè)標(biāo)簽:
Attributes(值:列表)
這是一個(gè)列表,所以它的值是這樣的:
{Attributes:[A,B,C]}
那么這些ABC該填什么?
答案是屬性:
{Attributes:[{A屬性},{B屬性},{C屬性}]}
既然是屬性,我們就不妨復(fù)習(xí)一下一百零五章的屬性修飾符:
“{AttributeModifiers:[{}]}
在這個(gè)文件夾里,有這么幾個(gè)文件,需要我們修改一下(記得去“*”號(hào)):
AttributeName*——要修改的屬性id
Name*——要修改的屬性名字
Slot*——指定生效的槽位
Operation*——屬性數(shù)值是怎樣運(yùn)算的
Amount*——屬性數(shù)值
UUIDMost*——這個(gè)屬性UUID的高位
UUIDLeast*——這個(gè)屬性UUID的低位”
可以發(fā)現(xiàn),當(dāng)時(shí)講到的屬性修飾符,里面有很多個(gè)標(biāo)簽。
但別忘了,屬性修飾符是屬性的修飾符啊,我們現(xiàn)在才深入到屬性啊,所以我們得先看看一個(gè)屬性需要幾個(gè)標(biāo)簽:
Name——屬性的名稱
Base——屬性的基礎(chǔ)值
Modifiers——屬性的修飾符
只有三個(gè),看起來(lái)非常簡(jiǎn)單。實(shí)際上也非常簡(jiǎn)單,比如我們的生命最大值,它就是這樣的:
{Attributes:[{Name:“generic.max_health“,Base:20}]}
我們要修改,除了給這個(gè)屬性添加修飾符,還可以直接把Base值修改。
那么Base可以修改到什么程度呢?
這個(gè)Base值的類型是“雙精度浮點(diǎn)型”,比我們上一章提到的“單精度浮點(diǎn)型”高級(jí)了一倍。
注意,這里的“高級(jí)了一倍”不是作者自己猜的,而是有實(shí)際依據(jù)的,因?yàn)椋?p> 單精度浮點(diǎn)型——占用空間:32位(4字節(jié))
雙精度浮點(diǎn)型——占用空間:64位(8字節(jié))
占用空間增加了一倍,確實(shí)是高級(jí)了一倍。
但如果按照這樣子說(shuō)的話,64位系統(tǒng)豈不只是32位系統(tǒng)的兩倍?
那肯定是不對(duì)的。所以我們的這兩個(gè)浮點(diǎn)型,它們雖然占用空間是兩倍的關(guān)系,但實(shí)際可儲(chǔ)存的數(shù)值是:
單精度浮點(diǎn)型——取值范圍:-3.4E38~3.4E38
雙精度浮點(diǎn)型——取值范圍:-1.79769313486232E308~1.79769313486232E308
嗯,確實(shí),是高級(jí)了億倍.......好像還不止
所以,其實(shí)你的生命值上限最高并不是2048,也不是60000,而是:
1.79769313486232×3081?!
所以,你還敢說(shuō)你的創(chuàng)世之刃是能秒殺一切的武器了嗎?
剩下的Modifiers就很簡(jiǎn)單了,因?yàn)槲覀冊(cè)缭诘谝话倭阄逭戮椭v到了。只不過(guò)這里的Modifiers有些不一樣,它只剩下了四個(gè)參數(shù)(1.16及以上5個(gè)):
Name——要修改的屬性名字
Operation——屬性數(shù)值是怎樣運(yùn)算的
Amount——屬性數(shù)值
UUIDMost——該修飾符的UUID高位
UUIDLeast——該修飾符的UUID低位
?。?.16版本UUIDMost和UUIDLeast合并成了UUID)
具體的用法就不再細(xì)說(shuō)了,自己去一百零五章看吧。
?。ㄋ坪跗粔?,再來(lái)一點(diǎn)吧)
接下來(lái)的標(biāo)簽是:
HandItems(值:列表)
HandItems很容易理解,就是生物拿著的東西。又因?yàn)镸C的生物都是有兩只手的(你跟我說(shuō)史萊姆有手?),所以HandItems的列表是固定兩個(gè)項(xiàng)目,一個(gè)主手,一個(gè)副手:
{HandItems:[{主手},{副手}]}
而這個(gè)主手和副手內(nèi)填的就聯(lián)系到我們的物品共通標(biāo)簽了:
Count——物品數(shù)量(值:數(shù)值)
id——物品ID(值:字符串)
tag——物品的額外標(biāo)簽(值:復(fù)合標(biāo)簽——{})
具體的我就不再講了,已經(jīng)講了很多次了,況且才4個(gè)標(biāo)簽(還有一個(gè)Slot),非常簡(jiǎn)單,傻子都能記住。
舉個(gè)例子,比如村民的主手正拿著一個(gè)面包,那么他的HandItems值就是:
{HandItem:[{Count:1,id:“minecraft:bread“}]}
灰常簡(jiǎn)單是不是?
但如果這個(gè)村民拿著這個(gè)面包就被殺死了(哦天吶?。?,掉落這個(gè)面包的幾率是多少呢?
雖然我們不知道幾率是多少,但我們可以更改幾率,這樣子我們就知道了!
控制村民的手中物品掉落幾率的標(biāo)簽是:
HandDropChances
這也是個(gè)列表,也有兩個(gè)項(xiàng)目,分別代表著主手和副手掉落物品的幾率。
這個(gè)幾率的值是單精度浮點(diǎn)型,所以如果你想更改主手和副手掉落物品的幾率為78%的話,那么需要這么改:
{HandDropChances:[0.78,0.78]}
這樣子就可以了,還是灰常簡(jiǎn)單的。
OK這一章我們就先講到這,我們下一章再見!
(不知不覺(jué)國(guó)慶就已經(jīng)過(guò)完一半了啊.......)
現(xiàn)在是中午12點(diǎn)整,王五和趙六正坐在橡木樓梯上刷B站。突然王五像觸電似的站了起來(lái):“wǒ cáo?”
“發(fā)生了什么事?”趙六瞟了一下王五,繼續(xù)看敖廠長(zhǎng)的新視頻。
“wòcào!”王五突然又叫了一聲。
“哎你能不能別......”趙六話還沒(méi)說(shuō)完,王五又來(lái)了第三聲:“wòcào太棒了!”
“你老是臥槽臥槽干什么啊?”趙六決定看看王五到底在看什么,于是把頭伸了過(guò)去。
“wǒ cáo?”
“wòcào!”
“wòcào太棒了!”
只見那個(gè)視頻的標(biāo)題是:
《洞穴更新成了!Minecraft 1.17 更新特性匯總!洞穴與峭壁更新!》