【Minecraft】余燼煉金計(jì)算方式及計(jì)算工具

最近和朋友一起玩 ETM 包的時(shí)候接觸到了余燼這個(gè)模組,里面有一個(gè)叫煉金的機(jī)制。
在煉金臺(tái)上擺放好合成,周圍的基座內(nèi)填入一定數(shù)量的灰燼,就可以合成物品。

但是通過 JEI 可以看見,需要的灰燼只提示了一個(gè)范圍,而不是精確的數(shù)值。一般是放置最少的量,然后通過給出的煉金失敗物來計(jì)算正確的數(shù)值。這樣就導(dǎo)致每合成一種新的物品,都需要兩份材料。
最開始認(rèn)為需要的灰燼數(shù)是隨機(jī)的,查看教程都也大概都說是隨機(jī)值,每新建一個(gè)世界都不同。


但是通過朋友在周圍記錄的配方,總是能感覺到一定的規(guī)律。最后雖然成功猜出了規(guī)律,但是這里還是選擇直接對(duì)代碼[1]?解讀。
前兩段代碼是設(shè)置種子偏移量和是否按象征隨機(jī)。最后一段才是獲得隨機(jī)量,具體的操作是將世界種子加上一個(gè)偏置再加上象征名,這三個(gè)要素作為一個(gè)新種子去隨機(jī)。得到一個(gè) 0 到最大值和最小值之差之間的隨機(jī)數(shù),再加上最小值就得到了具體需要的灰燼量。
但是繼續(xù)查看代碼,種子偏移量在游戲中沒有使用,按象征隨機(jī)在原版 Mod 配方中也就只有不穩(wěn)定灰燼能量管道使用了。
所以對(duì)幾乎所有配方,我們可以有兩點(diǎn)結(jié)論:
只要知道世界種子,就能通過程序算出灰燼量。
只要最大值最小值之差相同,需要的灰燼偏移量就相同。
結(jié)論一對(duì)于大多數(shù)玩家,尤其是服務(wù)器玩家可能沒什么用。因?yàn)榫退阒懒朔N子也還需要用 Java 的隨機(jī)函數(shù)來得到數(shù)據(jù)。
但是結(jié)論二就不同了,通過這個(gè)結(jié)論我們可以從一個(gè)配方推論到另一個(gè)配方。
我們先來解釋一下結(jié)論二到底是什么意思:每次隨機(jī)的,不是直接隨機(jī)出最小值到最大值之間的一個(gè)灰燼量,而是一個(gè)比最小值再額外多 x 個(gè)灰燼的一個(gè)偏移量。
因?yàn)殡S機(jī)種子是固定的,所以這個(gè) x 就完全由隨機(jī)范圍決定。這個(gè)范圍就是最大灰燼減最小灰燼。

舉個(gè)例子:

上文提到的黎明石結(jié)晶,鐵象征需要 48-64。最終結(jié)果是 60。此時(shí)隨機(jī)范圍就是 64 減去 48 也就是 16,同時(shí)計(jì)算出偏移量是 60 - 48 = 12。

那么我們通過這一個(gè)條件就可以得出:所有需要 48-64 范圍的都具體需要 60 灰燼,比如上面的銀結(jié)晶都需要 60?灰燼。
除此之外,我們還可以計(jì)算其他的配方,比如這里的烈焰屏障:

需要的范圍是 16-32,差值也是 16。我們將之前得到的偏移量 12 帶入,就可以知道這個(gè)配方需要 16 + 12 = 28 個(gè)灰燼,和朋友測(cè)出來的結(jié)果也一致。
也就是說一個(gè)差值對(duì)應(yīng)一個(gè)偏移量,同差值的配方只要知道了一個(gè),其他的就都能計(jì)算。

最后給出計(jì)算煉金的工具:Python Excel 表格 ( ??。)
沒錯(cuò) Excel 已經(jīng)能勝任這樣的計(jì)算了,沒必要再寫一個(gè)程序。
下面是一段簡(jiǎn)單的使用過程。只需要輸入已知的配方,就能計(jì)算新的配方。
數(shù)據(jù)就是上面的結(jié)晶和烈焰屏障。

這個(gè) Excel 文件需要在 Office 2016 及以上版本才能運(yùn)行,WPS 沒有測(cè)試。如果不能使用,還有功能稍微簡(jiǎn)陋一些的兼容版或在線版可以使用。
這里是鏈接,評(píng)論也會(huì)放出一份便于復(fù)制:
網(wǎng) 盤:https://share.weiyun.com/ty6X4pYY
在線版:

[1] https://github.com/DaedalusGame/EmbersRekindled/blob/rekindled/src/main/java/teamroots/embers/api/alchemy/AspectList.java#L161