Minecraft 21w05a 新更改+代碼簡析

經(jīng)過Mojang兩周的努(g)力(ū)后,21w05a發(fā)布了。由于東西有點(diǎn)多,只會講一部分。
版本修改表:https://paste.ubuntu.com/p/MdkxXkCjF8/
注意:官方中文譯名還沒有發(fā)布,這里只是用中文直譯的結(jié)果
一.苔蘚方塊和苔蘚地毯(Moss Block&Moss Carpet)
這兩種方塊將在新的Lush Cave繁茂洞穴中生成,兩種方塊材質(zhì)相同,只是類型不一樣而已。
首先說說苔蘚方塊。官方對它的介紹也就寥寥幾筆,但是代碼中寫出:它可以施用骨粉催熟

它施用骨粉時(shí)的行為如下:
首先是判定范圍,1x1到5x5不等的范圍。在范圍內(nèi)的方塊進(jìn)行下一步操作。
如果范圍內(nèi)的方塊具有l(wèi)ush_plants_replaceable標(biāo)簽,則替換為苔蘚方塊。
之后每個(gè)方塊會計(jì)算一次隨機(jī)數(shù)(就是概率的表現(xiàn))判斷是否進(jìn)行下一步操作,這個(gè)概率是0.8。
最后判定上方放置什么方塊,生成的東西如下:Flowering Azalea杜鵑花花叢(4%),Azalea杜鵑花樹叢(10%),Moss Carpet苔蘚地毯(25%),草(50%)和高草(11%)

接下來,苔蘚地毯上場,它可以由苔蘚方塊合成。
它在代碼中和地毯共用一個(gè)類。等下,這是否意味著它能刷?——遺憾的是,不能。

無法復(fù)制具體原因不詳(其實(shí)是懶得找),猜測為BlockBehaviour.Properties不同:苔蘚地毯為PLANT,而地毯為CLOTH_DECORATION。
二.洞穴藤蔓(Cave Vine)和熒光漿果(Glow Berries)
先說洞穴藤蔓,它是和垂淚藤一樣從上向下生長的植物,和海帶一樣分為Head(具有Age屬性)和Body部分。當(dāng)施用骨粉時(shí)會變?yōu)閹{果的藤蔓,亮度為14。

當(dāng)右鍵帶漿果的藤蔓會得到一個(gè)熒光漿果并且藤蔓的漿果清除。

掉落物熒光漿果右鍵會種植洞穴藤蔓,同時(shí)它也是一種食物。它的飽食度為2,飽和度比例系數(shù)為0.1。
三.浮萍植物(Dripleaf)
浮萍植物分為小型和大型兩種,兩種的特性不同,先從小的說起。
小型浮萍植物和高草一樣屬于兩格高的植物,方塊生存條件為黏土上或者在水中的植物可生長方塊。

在執(zhí)行骨粉催熟時(shí),小型浮萍植物會生長成為大型浮萍植物,高度為1-5格。但是,Mojang你怎么又把前置條件忘了??在成長判定放置方塊的時(shí)候,Mojang沒有判定將要生長的方塊,于是——基巖都被破掉了(MC-213971)。

大型浮萍植物和小型的不同,它分為兩部分:上面的葉子和下面的梗(Stem)
先說說它的梗,梗無法用骨粉,和葉子不同,所以不再細(xì)說。
而葉子部分就大有講究了。
首先是它與骨粉的交互,骨粉能讓它長高一格,同樣這個(gè)也沒檢查方塊。
另一個(gè)就是之前就說過要實(shí)現(xiàn)的特性:在上面站著會掉下來。
首先是前提條件:如果玩家潛行,那么就不會導(dǎo)致葉子傾斜(Tilt)。

傾斜的階段有4個(gè):NONE(不傾斜),UNSTABLE(不穩(wěn)定),PARTIAL(部分傾斜),F(xiàn)ULL(完全傾斜)。其中,UNSTABLE階段能持續(xù)20tick(1s),PARTIAL階段持續(xù)10tick(0.5s),F(xiàn)ULL階段持續(xù)100tick(5s)。所以從玩家站上去開始至完全傾斜掉落只需要30tick(1.5s)。
P.S.Wiki上寫為40tick,在測試之后得到數(shù)據(jù)確實(shí)為30tick而非40tick,希望能快一點(diǎn)改過來。

傾斜的開始是從實(shí)體進(jìn)入方塊內(nèi)部開始的(葉子上表面沒有全部高度,整好少一個(gè)像素,所以上方不刷怪),這時(shí)候會檢查前置條件,檢查之后開始傾斜過程,Tilt標(biāo)簽會從NONE變?yōu)閁NSTABLE。

之后就是一系列的變化:不穩(wěn)定-》部分傾斜-》完全傾斜,這些都由計(jì)劃刻執(zhí)行。當(dāng)處于完全傾斜時(shí),整個(gè)方塊的碰撞箱就消失了(只有葉片有碰撞箱,梗只有包圍盒而沒有碰撞箱)

在FULL階段持續(xù)5s后,它會自動恢復(fù)為NONE階段。

到這里,我們解釋了這個(gè)過程的基本內(nèi)容和潛行不會掉下去的原理,可是另外一個(gè)還沒有解釋:為什么跳來跳去也不會導(dǎo)致它傾斜。
原理如下:
在計(jì)劃刻執(zhí)行時(shí),會再次檢查是否有實(shí)體在上面,如果沒有,恢復(fù)原狀。這也是為什么跳來跳去的時(shí)候會有“Dripleaf Tilt Up”的聲音而潛行沒有。

最后,它可以被任何投擲物摧毀掉落。

四.銅類方塊銹蝕改變
之前說過銅類方塊是以計(jì)劃刻運(yùn)行的,現(xiàn)在則以隨機(jī)刻進(jìn)行判定。這個(gè)變化比之前要復(fù)雜一點(diǎn)。
首先是判定是否生效,每次隨機(jī)刻觸發(fā)都運(yùn)行判定,這個(gè)判定成功的概率是0.05688889(真搞不懂這啥玩意,可能是3/512?)

這就完事了?不,下一步才是最主要的。
接下來還要進(jìn)行一次判定是否進(jìn)行變化,有關(guān)與附近曼哈頓距離小于等于4的所有方塊。首先將這些方塊遍歷,如果是同一類型方塊,總體方塊計(jì)數(shù)加一;如果這個(gè)方塊銹蝕程度比它還大,那么銹蝕計(jì)數(shù)加一。然后將這些數(shù)據(jù)集合起來,得到下面的概率公式:

通過公式看出:旁邊的方塊越少概率越大,最大取值為旁邊沒有任何方塊的暴露銅塊(Exposed)或銹蝕的銅塊,這些方塊的這個(gè)概率為100%;最小取值是周圍全都是銅塊的銅塊,這個(gè)方塊的這個(gè)概率為3/66564(0.045%)

最后,更新方塊,我們才能看到一個(gè)成功銹蝕的銅塊。
五.細(xì)雪方塊的變化
細(xì)雪方塊在這個(gè)版本中可以被活塞推拉,這里沒有什么好講的,主要是下面兩個(gè)。
第一個(gè):帶火的箭射過細(xì)雪方塊時(shí)火焰熄滅
和在水、雨中一樣,現(xiàn)在帶火的箭穿過細(xì)雪方塊的時(shí)候火焰熄滅。

但是有的時(shí)候這個(gè)不起效果,原因是:MC計(jì)算移動時(shí)只考慮前進(jìn)路徑上是否有碰撞,之后會直接將實(shí)體移動到計(jì)算的點(diǎn)而不考慮中間過程,所以有的時(shí)候穿過細(xì)雪方塊是沒有計(jì)算到它在細(xì)雪方塊里面所以火焰不熄滅。
第二個(gè):骷髏小白變流浪者(流髑)
現(xiàn)在骷髏進(jìn)入細(xì)雪方塊會變化為流浪者,一共耗時(shí)900tick(45s),但是如果它在細(xì)雪里面已經(jīng)呆了超過600tick(30s),則變化不可逆轉(zhuǎn),即使現(xiàn)在立刻從細(xì)雪里面出來最終也會變?yōu)榱骼苏摺?strong>

六.發(fā)光苔蘚沒法變水了
上一個(gè)版本發(fā)光苔蘚能把巖漿變?yōu)楹陌l(fā)光苔蘚,導(dǎo)致下界能夠產(chǎn)生水?,F(xiàn)在已經(jīng)修復(fù)了(修復(fù)花了3天)
七.世界凍結(jié)bug MC-213788 在2月4日晚21:15修復(fù)?

代碼源:基于Mojang官方混淆表的反混淆+反編譯(CFK、JD-Core)
反混淆器:正在努力開發(fā)中的MCDynamicExchanger beta 7
發(fā)布版本為beta 6 ONLY REMAPPING DECOMPILING COMPARING
項(xiàng)目地址 https://github.com/Nickid2018/MCDynamicExchanger
文章中出現(xiàn)了錯(cuò)誤?歡迎留言在下面!