23w12a的一些代碼細(xì)節(jié)

1.20的第一個快照23w12a于昨天發(fā)布,加了一噸新特性。本文介紹一些代碼中發(fā)掘的細(xì)節(jié)。

對Decorated Pot掉落的改動
1.19.4中,Decorated Pot的物品掉落沒有使用戰(zhàn)利品表,而是直接糊了一段生成物品實(shí)體的代碼上去。由于這個方塊的四個面的信息是儲存在方塊實(shí)體里的,直接用戰(zhàn)利品表產(chǎn)生掉落不好實(shí)現(xiàn)。這段臨時代碼有很多bug,比如創(chuàng)造模式破壞沒有聲音,掉落物沒有撿起來的延遲,用debug stick改方塊狀態(tài)就會刷出來一個掉落物等。
23w12a通過一些datapack的魔法,將decorated pot的掉落寫到戰(zhàn)利品表里了。除了修復(fù)了臨時代碼的各種問題后,方塊的onBreak方法也精簡了很多:
注意到這個版本里decorated block多了一個cracked方塊狀態(tài)。這個狀態(tài)用于控制decorated pot被破壞的聲音(手和工具破壞的聲音不一樣)。這個方塊狀態(tài)只當(dāng)被工具破壞時被設(shè)為true,隨后這個方塊就消失了。這個方塊狀態(tài)不會改變decorated block的外表。
除此以外,decorated pot沒有很大改動。

Pitcher Pod的碰撞判定?
Pitcher pod作物的那個盆是有碰撞的,并且會向下延伸1像素:
這使它成為唯一一個向下延伸碰撞的方塊;此前有向上延伸的柵欄。目前尚不知道是否為特性。ilmango的快照視頻(https://www.youtube.com/watch?v=GXWeDQHkaUo)中演示了用這個特性制作凋靈籠,但視頻中的設(shè)計用到了成熟的pitcher crop可以在沒有耕地時生存的特性。這個特性已被確認(rèn)為bug且很可能在隨后的版本中修復(fù)(MC-261204)。

Sculk Sensor的紫水晶共振聲音
眾所周知23w12a加入了紫水晶共振同頻段sculk sensor振動的功能。當(dāng)共振發(fā)聲時,紫水晶會發(fā)出一個對應(yīng)的聲音。而這個聲音的頻率是根據(jù)振動的頻率決定的:振動頻率越高,聲音越尖銳。
(雖然但是,為什么用了note block的方法啊喂 你們soundcategory沒有自己的方法嗎)
這個frequency list首先是一坨0-24之間的數(shù)字,然后借用note block的一個方法(恰好也是0-24直接)轉(zhuǎn)換成對應(yīng)的pitch,frequency再選擇對應(yīng)的pitch播放。順便,那個方法是這樣計算頻率的:
建議扔mathhelper里。

Sniffer Egg孵蛋
23w12a加了一個很大的sniffer egg,但孵蛋的方法卻很水。
當(dāng)這個方塊被添加時,它會檢查下面是不是HatchBooster(moss),然后再設(shè)置對應(yīng)的時間。以及那個令人迷惑的除以3,可以直接用 ? 4000 : 8000代替。畢竟代碼是給developer讀的,不是給player讀的,這種可讀性完全可以省略。此后還會加一個300tick的隨機(jī)。Sniffer Egg和frog spawn一樣使用scheduled tick而不是random tick。值得一提的是frog spawn使用scheduled tick被mj標(biāo)記成了bug(MC-249308)。sniffer egg也有一個ticket,但是截至目前只是moderator confirmed狀態(tài),并沒有mj priority(MC-261250)。
當(dāng)被scheduledtick到時,檢查age是否為2,不是的話就增加age并再schedule一次,否則產(chǎn)生一個小的snifflet.