首頁 游戲

Minecraft指令手冊

第一百四十四章 彈射物共通標簽

Minecraft指令手冊 你好MC 1370 2021-04-24 23:12:12

  張三剛剛費盡千辛萬苦打死了一個在水中拿三叉戟射他的溺尸,并獲得了一把殘三叉戟。他試了試這個三叉戟,發(fā)現(xiàn)按右鍵是可以丟出它的。于是張三嘗試了一下,“聽”的一聲,三叉戟就丟了出去?!爱敗钡囊宦?,三叉戟掉了下來。

  三叉戟可以右鍵扔出,像這樣可以右鍵扔出的東西,在Minecraft中還有雪球、雞蛋。而箭這種需要用弓或弩射出的也是類似于這種東西。

  這種可以射出、扔出、發(fā)射出的東西,我們給了他們一個總的稱呼:彈射物。

  既然都是彈射物,那肯定就有“彈射物共通標簽”。

  彈射物共通標簽說白了就只有三個東西:兩個布爾值一個Int整形數(shù)組。

  首先我們看看這兩個布爾值,它們分別是:

  HasBeenShot(Byte字節(jié)型:1 或 0)

  LeftOwner(Byte字節(jié)型:1 或 0)

  HasBeenShot這個標簽在彈射物最開始射出時為0(false),當該彈射物實體存在超過1游戲刻時會改為1(true)。為什么要這樣?因為這樣,游戲才能確保讓你只射出去了一次該彈射物(這是一個游戲事件:projectile_shoot)。如果沒有這個標簽會怎么樣?

  假設(shè)張三裝了一個模組,該模組會在玩家每使用彈射物一次時,在玩家頭頂20格處生成一個落地就會消失的鐵砧,以增加游戲的挑戰(zhàn)性。該模組是這樣判斷玩家使用彈射物的:

  玩家右鍵射出彈射物時,會觸發(fā)一個游戲事件:projectile_shoot。模組監(jiān)測到該事件被觸發(fā),就立刻執(zhí)行生成鐵砧的指令,然后就完成了這個玩法。

  如果沒有HasBeenShot這個標簽,當張三右鍵扔出剛才那個三叉戟時,游戲就會開始每一游戲刻都觸發(fā)一遍projectile_shoot事件,模組每一游戲刻都監(jiān)測到projectile_shoot被觸發(fā),最后導(dǎo)致張三只能走不能停,甚至需要躲進礦洞里才能避免被鐵砧砸死。這就是沒有這個標簽的后果。

  那LeftOwner呢?這個比HasBeenShot要好理解些。當彈射物剛剛被射出時,它此時的碰撞箱和射出者的碰撞箱是重復(fù)的。游戲總不可能剛開始檢測到碰撞箱重復(fù)就認為是彈射物打中實體吧?所以,為了防止張三剛剛?cè)映鋈骊捅蝗骊o刺死,LeftOwner最開始的值被設(shè)定為0(false),直到完全射出去之后再改為1(true)。

  那這個標簽這樣做會發(fā)生什么?這個標簽的用途就是設(shè)定該彈射物是否會與其他實體碰撞(簡而言之就是會不會打中其他實體)。所以游戲才會用這個標簽來避免發(fā)生烏龍。

  最后,這個Int整形數(shù)組是:Owner。它的作用很簡單:儲存丟出該彈射物的人。它不一定存在,比如箭的NBT內(nèi)就(好像)沒有這個(作者看箭的NBT里沒有)。那它有什么用呢?

  舉個例子。JAVA的死亡信息比基巖版的死亡信息要豐富(且搞笑)很多。比如張三用這個三叉戟殺死了李四,那么將會:

  李四被張三刺穿了

  為什么游戲知道這個三叉戟是張三射出的呢?答案就在于Owner存儲了張三的UUID。翻一下這個三叉戟的NBT,你會發(fā)現(xiàn)這么一條:

  {Owner:[I;604943943,800279987,-1589083251,1188657888]}

  其中,[I;604943943,800279987,-1589083251,1188657888]就是張三的UUID。

  但別忘了一件事情。1.16版本是把UUID高位和低位合并成了一個新的整形數(shù)組UUID。那在1.16版本以前,Owner是什么呢?難不成是{Owner:{UUIDMost:XXX,UUIDLeast:XXX}}?

  都不對。實際上這比你們想的要簡單許多。假設(shè)張三剛剛不是在1.16版本刺穿李四的,而是在1.13版本,那么你將會發(fā)現(xiàn)Owner變成了:

  {ownerName:“張三“}

  其中,“張三”是張三的游戲ID。沒錯,你沒看錯,是游戲ID!

  好啊你個Mojang,這么偷懶,連UUID都不用了,直接上玩家名啊。

  吐槽歸吐槽,我們還是要研究一下Owner能搞出什么效果。

  末影珍珠可以傳送玩家。但當發(fā)射器射出末影珍珠時,反而傳送不了發(fā)射器。這最主要的原因就是末影珍珠觸碰到方塊確定要傳送的實體時是看Owner里存儲的實體UUID的,而發(fā)射器不是實體所以沒有UUID。如果在末影珍珠還在飛行的時候更改Owner存儲的值從[I;604943943,800279987,-1589083251,1188657888]到[I;-1208925302,-1027194075,-1929403206,-1285938804],會發(fā)生什么?

  李四落地過猛

  這就是Owner的用法之一。

按 “鍵盤左鍵←” 返回上一章  按 “鍵盤右鍵→” 進入下一章  按 “空格鍵” 向下滾動
目錄
目錄
設(shè)置
設(shè)置
書架
加入書架
書頁
返回書頁
指南