背景

众所周知,等价交换是一款不错的防肝模组,但它在某些维度上有点过于超模了,对于生存玩家并不友好,包括但不限于:

  1. EMC太容易获取:前期可以靠和村民疯狂交易获取绿宝石来卖钱,中后期靠能量收集器,凝聚器,加速火把,怀表等大规模刷取EMC,很容易就变成亿万富翁。再搭配模组自带的一些饰品(例如飞行饰品,自动修复饰品,回血回饥饿值饰品),跟开创造没什么区别,严重破坏了游戏平衡。

  2. 设置EMC不是很方便:现有的设置EMC的途径无非就两种,一种是通过游戏内的指令给物品赋予EMC,另一种是修改custom_emc.json,但无论是哪种方法,都不是很方便。特别是在游玩一些大型整合包的时候,可能很多模组的物品都没有EMC,这个时候要一个个去赋值会非常麻烦。并且等价兼容模组目前支持的物品也不是很多,不具备可扩展性。


基于以上背景,为了造福广大等价交换玩家,我魔改了原有的模组并开发了一款全新的EMC批量赋值器(EMC Assigner,下简称EMCA)。


等价交换(交易版)

  1. EMC 毕竟是等价交换中的硬通货。如果想提升玩家的游戏体验,就必须限制各种刷 EMC 的方式(当然,完全杜绝是不可能的,只要有人想刷,总会找到办法。我能做的,就是尽量封禁大部分常见的刷法)
    为此,我删除了这个模组中除「转化桌」和「便携式转化桌」以外的所有物品合成配方。也就是说,在生存模式下,玩家只能获取并使用这两件物品,其他内容都无法合成。

  2. 等价交换的核心理念是炼金术——“万物皆可转化”。在我删掉大量配方之后,我更希望它能成为一个偏向交易的模组。因此,我将「转化桌」更名为「交易台」,「便携式转化桌」更名为「交易终端」,并替换了它们的贴图材质。与此同时,我更新了相关术语(例如将 “EMC” 改为 “Coins”),并将模组名改为 「等价交换(交易版)」,以便与原版区分。

  3. 经过魔改后的等价交换已支持 70 余个模组的 EMC 系统兼容,包括暮色森林、农夫乐事、机械动力、通用机械、Ad Astra 等等。


相关游戏截图:

或许是更好的等价交换?等价交换(交易版)还有EMC批量赋值器它来了!-第1张图片或许是更好的等价交换?等价交换(交易版)还有EMC批量赋值器它来了!-第2张图片

或许是更好的等价交换?等价交换(交易版)还有EMC批量赋值器它来了!-第3张图片

EMCA

这里先讲一下博主的思路。不想动脑子可以直接跳过红色文字这部分。


大家都知道:只要某个物品存在合成配方,它的 EMC 就会自动等于配方中各材料 EMC 的总和。因此我们无需关注这些“可合成”的物品,只需要为原子物品(也就是那些无法通过配方自动推导 EMC 的物品)赋值即可。需要注意的是,“原子物品”并不完全等同于“不可合成物品”。比如钻石块可以在工作台中分解成 9 个钻石,但在我们的场景里,钻石虽然能由钻石块“合成”得到,仍然应被视为原子物品,必须单独为其指定 EMC。

EMCA的工作流程分为三个阶段。

阶段1:

  1. 先扫描出某个模组中所有“可手持”的原子物品(扫描结果可能会存在些许遗漏,因为不同模组的设计原则不同,无法保证 100% 覆盖)。为什么只扫描可手持的?因为无法手持的物品无法放进转化桌,自然也就无法出售或用于转化。

  2. 扫描该模组下所有配方规则并进行缓存,供后续分析使用。

  3. 对每一种配方规则进行遍历,并递归展开合成关系。如果发现形如 A -> B -> A 的闭环合成链路,那么 A 和 B 中必定只有一个是原子物品,另一个不是。此时用 A 的数量除以 B 的数量,得到一个系数,记为 alpha。
    若 alpha > 1,则默认 A 是原子物品、B 不是。

    举个例子:9 × 钻石 -> 1 × 钻石块 -> 9 × 钻石。这里 A 是钻石、B 是钻石块,alpha = 9。因为 alpha > 1,所以钻石被判定为原子物品,而钻石块不是。


阶段2:

当我们拿到一个模组内所有原子物品后,就要开始为它们赋予 EMC。
显然可以用基于规则的方法去做,但这种方法过于死板、代码量大、泛化性也弱。更简单有效的办法,是让 LLM 在给定充分上下文和合适 prompt 的情况下,直接为这些物品赋值,从而自动产出一套相对合理的结果。

考虑到并不是所有人都会调用 LLM API,也不是所有人都愿意为 API 付费,我们的设计目标应尽可能“开箱即用”。于是我采用了下面这套方案:

  1. 首先从 MC 百科上收集了下载量靠前的热门模组(大约 100 个),提取出其中所有原子物品,总计 20000+ 个。

  2. 在提供充足上下文与资料的前提下,撰写合适的 prompt,使用Opus 4.5为这 20000+ 个物品批量生成 EMC。

  3. 以 LLM 赋值后的数据为训练集,使用 LGBMRegressor 进行对数回归训练,得到一版模型。

    • 为什么选 LGBM?
      博主对比过 ridge、elasticnet、lgb、bilstm、charcnn、transformer 等模型在 LLM 合成数据集上的表现,最终 LGBM 的效果最稳定、整体最好。

    • 为什么用对数回归?
      EMC 的取值范围跨度非常大,直接回归会导致训练不稳定。先对目标值取对数能显著改善拟合效果与收敛稳定性。


阶段3:

将 LGBM 模型的预测结果合并进 custom_emc.json,并覆盖原有文件,从而完成整套自动赋值流程。


目前EMCA还是会存在一些问题:

  • 毕竟是机器学习模型,其本质是一个黑盒,不能保证输出完全符合预期,但对于热门模组,应该够了。对于不符合预期的,需要自己进入到游戏里通过指令修改。

  • 对于大型整合包,例如ATM这种,可能因为模组之间的相互作用,导致游戏内的实际值和custom_emc里的值对不上,这属于正常现象,需要你自己通过指令修改。

  • 建议刚进游戏先把绿宝石的EMC设为0,防止靠村民交易刷EMC。


使用界面(以macOS为例):

或许是更好的等价交换?等价交换(交易版)还有EMC批量赋值器它来了!-第4张图片

注意,一定要等到「模型加载成功」字样出现后,再继续使用。加载会比较慢,请耐心等待。

mods目录选你放模组的文件夹,选择完之后输出目录会自动设定。如果你是1.21+的版本,请勾选,否则不要勾选。最后点击「开始处理」即可批量赋值EMC。中间即使断了也没关系,赋值过程中会自动缓存,每次赋值都会优先从缓存中查找。

请在使用之前备份一下custom_emc.json!!!


设计理念

等价交换(交易版)和EMCA是两个完全独立的产品,你完全可以只使用其中的一个而不使用另外一个。

《等价交换(交易版)》的设计理念,是将原版等价交换彻底魔改为一个以“交易”为核心导向的模组。它的重点不再是复杂的转化体系,而是围绕交易体验展开,目标是在保证玩法效率的同时,尽可能减轻玩家的重复劳动与时间成本(也就是“护肝”)。因此,模组最终仅保留了两件关键物品:交易台(原转化桌)以及交易终端(原便携式转化桌)。

需要注意的是,《等价交换(交易版)》从设计之初就未考虑与任何等价交换系模组的兼容性。如果你打算使用它,请务必确保未安装其他任何与等价交换相关的模组,否则可能出现功能冲突或不可预期的问题。若你平时习惯搭配多种等价交换扩展模组共同游玩,那么我不建议你选择本模组。

EMCA 是一款用于为整合包内物品批量赋值 EMC 的工具,不依赖任何模组。考虑到大多数玩家的核心需求主要集中在这一功能上,我会进行长期维护。


下载方式

等价交换(交易版)目前仅支持1.21.1、1.20.1、1.19.2、1.18.2、1.16.5、1.12.2版本。

EMCA支持Windows和MacOS平台,适用于1.12.2+。

指路(提取码:B42F) -> 点我点我


声明

如大家有更好的建议请在评论区提出,博主会选择点赞量高的需求进行实现。

如果这篇文章有帮到你,请给我点个赞,让更多的人看到,帮助更多的人 👍🏻


本产品基于 ProjectE 构建。
ProjectE 版权归 SinKillerJ 所有。


MIT License

Copyright (c) 2020 Sin Tachikawa

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


FAQ

A1:交易版能否支持XXX,增加XXX,兼容XXX?

Q1:请先看上方的「设计理念」。交易版在设计之初就没有考虑兼容性,它仅仅是对这原版模组这一个模组的魔改,后续也不会经常维护,除非有玩家遇到明显BUG。如果你觉得它好用,那么就用它。如果你觉得它不符合你的口味,那么不要下载,或者你自己基于交易版进行进一步的魔改。


A2:如何设置在转化桌出售的时候进行半价出售?

Q2:参考https://www.mcmod.cn/post/3395.html


A3:EMCA能否支持XXX,增加XXX?

Q3:可以。不同于交易版,EMCA是长期、高频维护的对象,有任何需求请在评论区提出,博主会视情况实现。


A4:为什么给我的整合包赋值后,EMC很离谱?

Q4:如果只有部分物品的EMC很离谱,这属于正常现象,未来也无法避免,请你手动通过命令修改。如果是绝大部分甚至全部物品的EMC都很离谱,那大概率是模型的问题,这需要长期优化。


更新日志

V 1.1

  1. EMCA现已兼容1.12.2版本

  2. 修改了原子物品的提取算法:

    1. 对于每个可手持的物品,获取所有可以合成它的配方,记为r_1, r_2, ..., r_n

    2. 对于每个r_i,扫描其原材料的物品种类数,如果这个数大于1,那么立刻判定为可合成物品。否则,递归的展开剩余配方直到无法展开为止,得到一条合成链路,记为c_i(如果把合成链路看作链表,那么终止的条件是新加入的节点已经在链表中出现过)

    3. 这个物品是原子物品当且仅当以下条件成立:

      1. 所有c_i的alpha系数严格大于1

  3. TL;DR:EMCA的赋值涵盖率会有所降低。原先的配方扫描算法只考虑原版的配方type(例如crafting_shaped,crafting_shapeless等),这样做的好处是一些不属于原版配方type的可合成物品也会被视为原子物品,进而可以被赋予EMC。而现在将这一条件放宽,任何type都将允许被扫描,但缺点是一些可合成的物品将不会被赋予EMC。例如农夫乐事中的一些cooking/cutting类的可合成物品,在现在的规则下将不会被赋予EMC。


V 1.0

初始版