MCJE 低版本的紅石粉表現(xiàn)
本文的所有實(shí)驗(yàn)都在 Minecraft Java 版的一個 1.12.2 服務(wù)器上運(yùn)行,服務(wù)器使用的是 carpet 端,默認(rèn)不影響原版特性,沒有打開影響原版特性的設(shè)置。本文所有的代碼分析取自 1.12.2 carpet mod 的一個分支,源碼是 MCP 生成的,使用限度在相關(guān)條款規(guī)定的限度之內(nèi)。本文的結(jié)論應(yīng)當(dāng)適用于 Minecraft Java 版 1.8 - 1.15 的版本。1.16 之后紅石線被改動了,變成了今天我們熟知的樣子。本文的圖片的材質(zhì)包使用了 XK?紅石顯示資源包,和一個在低版本顯示高版本材質(zhì)的資源包。
最近在 MCJE 1.12 實(shí)驗(yàn)的時候,發(fā)覺低版本的紅石粉特性不僅和高版本的很不一樣,而且很怪異。這種怪異體現(xiàn)在何處?首先上一張圖:

這張圖里你看到的方塊就是所有方塊了,沒有你看不到的電路結(jié)構(gòu)?,F(xiàn)在假設(shè)我們把所有拉桿都打開,請回答,圖中的七個活塞哪些會伸出,哪些會收回?

好,答案已經(jīng)在上一張圖給出來了,實(shí)驗(yàn)結(jié)果非常反直覺。低版本的紅石粉是這樣的,它的表現(xiàn)確實(shí)很反直覺,現(xiàn)在我們將要給出低版本紅石粉的運(yùn)作規(guī)律。下面描述的規(guī)律是直接看代碼得到的,并且經(jīng)過了實(shí)驗(yàn)測試,測試結(jié)果均與理論相符,因此應(yīng)當(dāng)是準(zhǔn)確的。



好,控制紅石粉對某個方向的方塊充能的方法就在這里了。這個方法的參數(shù)中的 pos 是紅石粉的位置,side 是計算的要充能的位置相對于紅石粉的相反的方向。我們看一下這個邏輯:
紅石粉始終可以對自己下方的方塊充能,始終不可以對自己上方的方塊充能。
如果測試的方向是水平的方向,那么對全部四個水平方向判斷一個條件 T,代碼中是 isPowerSourceAt(...) 這個方法,將符合條件的方向添加到一個列表里面。
如果所有四個水平方向都不符合條件 T,那么紅石粉可以對目標(biāo)位置充能。
否則,紅石粉可以對目標(biāo)位置充能,當(dāng)且僅當(dāng)目標(biāo)方向的相反方向滿足條件 T,但是垂直于目標(biāo)方向的兩個水平方向都不滿足。
我們看到,決定紅石粉對水平方向充能的關(guān)鍵是這個條件 T 也就是 isPowerSourceAt(...) 這個判定,我們來看一下它的內(nèi)容:

我們經(jīng)過代碼閱讀,可以得到下面的邏輯:取位置?P,方向?D,紅石粉對是否應(yīng)該對方向?D?供能的判定如下:
對水平的方向?E,記?Q?為?P?向?E?移動一格的位置,我們按照下面的條件判定是否認(rèn)為方向?E?是滿足條件 T 的:
1)?如果?P?上面的方塊不是完整固體,Q?是完整固體,Q?上面是紅石粉,則認(rèn)為?E 滿足條件 T (對應(yīng)紅石線爬過一個完整方塊連到高一格的紅石線)
2)?如果?P?的紅石粉可以連到?Q?的方塊,則認(rèn)為?E?滿足條件 T (對應(yīng)紅石線被一個中繼器、偵測器、探測鐵軌或者紅石粉等等轉(zhuǎn)向)
3)?如果?Q?位置的方塊不是完整固體,Q?下面是紅石粉,那么認(rèn)為?E?滿足條件 T?(對應(yīng)紅石線連到低一格的紅石線)
4)?否則認(rèn)為?E?不是滿足條件 T?的
我們看到,條件 T 的判定大概的意思是,P 處的紅石粉可以沿著方向 E 連到某個別的紅石粉或者可以引導(dǎo)紅石粉朝向的元件。因此,我們稱這個條件 T 為可連接的。我們對上面的邏輯有如下可視化:

其中,紅色混凝土表示紅石粉的位置,綠色混凝土表示紅石粉認(rèn)為可以連接的方向,灰色混凝土表示紅石粉認(rèn)為不可以連接的方向。如果用文字描述可連接的判定的話:紅石粉有三種方式在某個方向可連接:連到高一格、同一高度 或者 低一格的元件。
紅石粉可以連接到目標(biāo)方向上的高一格的置于普通方塊上的紅石粉(注意,半磚之類的方塊不行),并且要求沒被壓線
紅石粉可以連接到目標(biāo)方向上的同一格高的別的紅石粉或者可以引導(dǎo)紅石線朝向的元件上
紅石粉可以連接到目標(biāo)方向上的低一格的紅石粉(與第一條不同,沒有要求普通方塊),并且要求沒被壓線
如果上述三條都不滿足,就不認(rèn)為在這個方向上是可連接的。請讀者自行驗(yàn)證,上面的文字描述與可視化是相符的。那么一開始我們寫的關(guān)于可以充能的方向的判定,可以變成下面一張圖的可視化的規(guī)律總結(jié)——注意下圖在旋轉(zhuǎn)和翻轉(zhuǎn)的意義下已經(jīng)涵蓋了所有方向的所有可能的連接判定的情況:

其中,紅色混凝土代表紅石粉的位置,綠色混凝土代表紅石粉認(rèn)為在這個方向上可以連接,灰色混凝土代表認(rèn)為在這個方向上不可以連接,一個方向上的紅石燈亮起/熄滅代表紅石粉會/不會對這個方向充能。注意到第一種情況代表點(diǎn)狀紅石,第二、三種情況是我們通常的紅石線。
那么理論部分完畢了,我們解釋開頭的現(xiàn)象也是容易的了。開頭的那幾個裝置的下方的混凝土,分別代表了連接判定情況。請讀者自行驗(yàn)證這與理論相符,作者只描述兩個裝置:


其它的現(xiàn)象留給讀者作為練習(xí)。