【Minecraft】余烬炼金计算方式及计算工具

最近和朋友一起玩 ETM 包的时候接触到了余烬这个模组,里面有一个叫炼金的机制。
在炼金台上摆放好合成,周围的基座内填入一定数量的灰烬,就可以合成物品。

但是通过 JEI 可以看见,需要的灰烬只提示了一个范围,而不是精确的数值。一般是放置最少的量,然后通过给出的炼金失败物来计算正确的数值。这样就导致每合成一种新的物品,都需要两份材料。
最开始认为需要的灰烬数是随机的,查看教程都也大概都说是随机值,每新建一个世界都不同。


但是通过朋友在周围记录的配方,总是能感觉到一定的规律。最后虽然成功猜出了规律,但是这里还是选择直接对代码[1] 解读。
前两段代码是设置种子偏移量和是否按象征随机。最后一段才是获得随机量,具体的操作是将世界种子加上一个偏置再加上象征名,这三个要素作为一个新种子去随机。得到一个 0 到最大值和最小值之差之间的随机数,再加上最小值就得到了具体需要的灰烬量。
但是继续查看代码,种子偏移量在游戏中没有使用,按象征随机在原版 Mod 配方中也就只有不稳定灰烬能量管道使用了。
所以对几乎所有配方,我们可以有两点结论:
只要知道世界种子,就能通过程序算出灰烬量。
只要最大值最小值之差相同,需要的灰烬偏移量就相同。
结论一对于大多数玩家,尤其是服务器玩家可能没什么用。因为就算知道了种子也还需要用 Java 的随机函数来得到数据。
但是结论二就不同了,通过这个结论我们可以从一个配方推论到另一个配方。
我们先来解释一下结论二到底是什么意思:每次随机的,不是直接随机出最小值到最大值之间的一个灰烬量,而是一个比最小值再额外多 x 个灰烬的一个偏移量。
因为随机种子是固定的,所以这个 x 就完全由随机范围决定。这个范围就是最大灰烬减最小灰烬。

举个例子:

上文提到的黎明石结晶,铁象征需要 48-64。最终结果是 60。此时随机范围就是 64 减去 48 也就是 16,同时计算出偏移量是 60 - 48 = 12。

那么我们通过这一个条件就可以得出:所有需要 48-64 范围的都具体需要 60 灰烬,比如上面的银结晶都需要 60 灰烬。
除此之外,我们还可以计算其他的配方,比如这里的烈焰屏障:

需要的范围是 16-32,差值也是 16。我们将之前得到的偏移量 12 带入,就可以知道这个配方需要 16 + 12 = 28 个灰烬,和朋友测出来的结果也一致。
也就是说一个差值对应一个偏移量,同差值的配方只要知道了一个,其他的就都能计算。

最后给出计算炼金的工具:Python Excel 表格 ( ゚∀。)
没错 Excel 已经能胜任这样的计算了,没必要再写一个程序。
下面是一段简单的使用过程。只需要输入已知的配方,就能计算新的配方。
数据就是上面的结晶和烈焰屏障。

这个 Excel 文件需要在 Office 2016 及以上版本才能运行,WPS 没有测试。如果不能使用,还有功能稍微简陋一些的兼容版或在线版可以使用。
这里是链接,评论也会放出一份便于复制:
网 盘:https://share.weiyun.com/ty6X4pYY
在线版:

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