
AutoEMC
为 ProjectE 实现自动、准确的 EMC 分配 — 专为整合包而构建,而不仅仅是原版。
AutoEMC — 完全指南
为 ProjectE 自动、安全地生成 EMC 值。
AutoEMC 是一个 Forge 模组,它会在启动时扫描整合包中的物品和配方,然后自动填补缺失的 ProjectE EMC 值。专为大型“厨房水槽”整合包设计,手动为每个物品定价是不现实的。
1. 概览:AutoEMC 做什么
AutoEMC 从来不想取代 ProjectE——它只是填补空缺。在启动时,它会:
- 检查 ProjectE 已经知道的 EMC 值。
- 读取所有已加载的配方。
- 尝试从它能理解的配方中推导缺失的值(这总是优先于猜测)。
- 仅在没有配方路径时,才回退到智能猜测。
- 将所有内容写入 ProjectE 的值文件,以及自己的诊断日志。
两个版本的核心规则:AutoEMC 不会故意降低 ProjectE 或整合包作者已设置的值。 它只填补空缺,或者(在 1.20.1 版本中)当新的配方证据证明合理时,提高自己早期的回退猜测值。
2. 值如何被解算(配方解算)
这是两个版本中首选的方法——在猜测之前,先通过实际合成配方来解算价格。
- 如果配方中的每种成分都有已知的 EMC 值,AutoEMC 就可以计算出产物的价值(大致为:总成分成本 ÷ 产出数量)。
- 1.20.1 在这里增加了更多细微差别:
- 运行多次解算“轮次”(
maxRecipePasses),以便配方链可以分阶段解析。 - 为原始/基础材料设定一个起始回退值,以便依赖它们的配方仍然可以解算,然后在之后重新解算。
- 如果加载的配方证明某个物品应该更贵,则可以稍后提高回退产物的价格(
postFallbackRecipeUpgrade)。 - 特殊处理锻造台转化配方(升级后的工具/盔甲从其基础物品 + 升级材料继承价值),但会跳过装饰性的锻造台纹饰,因为它们会产生混乱/误导性的值。
- 当一种成分有多个匹配选项时,默认使用更安全的、更低的 EMC 值(
allowRecipeValueIncrease可以改变此行为,但关闭它更安全)。
- 运行多次解算“轮次”(
- 1.16.5 也使用捆绑的映射/转换数据(来自 ProjectE Integration)作为额外的“类似配方”的边缘,因此非普通合成配方的东西(如物品转换机制)仍然可被视为可解算路径。
3. 回退定价(当没有配方时)
如果配方无法解算价格,AutoEMC 会依次通过几个层级进行回退,大致顺序如下:
捆绑的基础值 —— 从 ProjectE Integration 附带的数据中提取(植物魔法、末影接口、通用机械、机械动力等数十个模组)。
基于材料/标签的回退 —— 匹配诸如
forge:ingots/copper、forge:gems/diamond、forge:dusts/sulfur、forge:storage_blocks/iron等标签。一个基础材料值会乘以其形态(例如,一个存储块 ≈ 9 个锭,一个粒 ≈ 1/9 个锭)。基于稀有度/等级的回退作为最后手段:
- 1.16.5:简单的基于稀有度的回退,带有一个“反向配方底线”,因此原材料最终不会比由其制成的加工品更便宜。
- 1.20.1:增加了稀有度 + 堆叠大小 + 耐久度回退,以及一个专门的进阶等级系统,用于强大的模组物品,这样它们就不会获得便宜的通用价值:
- 强 —— 例如,ATM金属、飞龙级物品
- 非常强 —— 例如,振金、龙之、龙块、觉醒级物品
- OP(超强) —— 例如,终焉锭、混沌、无限、创造级物品
- 等级匹配可以由模组命名空间、精确的物品 ID 或物品路径中的关键字触发。
回退在两个版本中默认开启(因为它使大型整合包可用),但可以为了更严格的设置而收紧或禁用。
4. NBT 标签物品
两个版本都理解某些物品(药水、附魔书、材料标签物品)会因其 NBT 数据而变化,而不仅仅是其基础 ID。
- 一个可插拔的 NBT 材料解析器框架根据其实际嵌入的材料为这些物品定价,而不是将每个变体都归入一个通用值。
- 对诸如 Avaritia 奇点之类的东西的内置支持(根据其材料 + 一个乘数定价)。
- 可以作为预扫描轮次运行,在某些情况下,还可以在 ProjectE 实际转换期间实时运行。
maxNbtVariantsPerItem限制一个物品 ID 可以生成的变体数量,因此在一个大型整合包中,一个物品不会爆炸式地产生数百个条目。
5. 安全特性(保护经济)
两个版本都共享相同的安全理念——不要让自动定价毁掉整合包的经济:
- 仅创造 / 无配方技术性物品 默认锁定为
1 EMC,因此它们永远不会作为无限价值的来源泄露到生存模式。 - 大幅掉落保护 阻止任何单次扫描将已定价物品的价值崩溃到超出可配置的比例——相反,它会被记录到检疫报告中,而不是静默应用。
- 所有权追踪:AutoEMC 保持自己的记录,记录它生成了哪些值,与 ProjectE/整合包作者的值分开,因此它知道以后允许再次接触哪些值。
- 1.16.5 特别有一个“所有权仲裁器”,防止 ProjectE 仅仅回响 AutoEMC 的最后一个值而被误认为是手动覆盖(否则会删除 AutoEMC 对该条目的追踪)。
- 永不降低 ProjectE 拥有的值。
- 自适应、批量化扫描——在服务器 ticks 间以小批次工作,而不是在启动时冻结服务器,即使有数千个物品。
- 1.20.1 另外:如果自上次扫描以来没有任何变化,则跳过重新扫描,并且可以要求在信任正常回退之前,成功加载的配方达到最低数量(及早捕获损坏的配方加载)。
6. 报告和日志
两个版本都写入诊断文件,以便您可以审计到底发生了什么以及为什么:
generated_entries.json—— AutoEMC 当前拥有/生成的所有内容。underpriced_inputs_report.json(1.16.5) —— 标记那些看起来价格过低、与其用于合成的物品相比不匹配的非拥有物品。quarantined_drops.json(1.16.5) —— 因看起来不安全而被阻止的值更改。autoemc-debug.log/autoemc-debug.previous.log(1.20.1) —— 主要故障排查日志,以及前一次运行的日志。recipe_solve_state.json(1.20.1) —— 扫描状态,因此未更改的整合包可以跳过不必要的重新扫描。known_items.json(1.20.1) —— 追踪的物品注册表状态。config/ProjectE/custom_emc.json—— ProjectE 实际读取以应用 EMC 值的文件。
每个生成的值都带有其来源标签(baseline、tag-material、rarity-fallback、reverse-recipe-floor、creative-no-recipe 等),因此您可以追溯某个数字是如何得出的。
7. 关键配置选项
通用
enabled—— 总开关。alwaysRescan(1.20.1) —— 每次服务器启动时扫描,即使没有任何变化。chatNotifications/chatVerbosity—— 聊天中的扫描消息(0 = 最少,2 = 详细)。itemsPerTick/adaptiveBatchSizing/adaptiveBatchTargetMs—— 控制扫描批处理/延迟。
配方解算
solveRecipes—— 开启/关闭从配方推导的值。maxRecipePasses(1.20.1) —— 运行多少次依赖解算轮次。allowRecipeValueIncrease—— 使用最高选项还是最低选项成分(最低/关闭更安全)。useBundledProjectEMappingConversions/useMapperFramework—— 使用捆绑的 ProjectE 风格转换数据作为额外的配方边缘。
回退
useFallbackForUnsolvable—— 是否允许回退定价。useForgeTagFallback—— 在通用稀有度回退之前,使用材料标签。useProjectEIntegrationBaselines—— 使用捆绑的基础值。giveCreativeNoRecipeItemsOneEmc—— 针对创造/无配方物品的 1 EMC 安全底线。tagFallbackNamespaces—— 要检查的标签命名空间(默认值:forge、mekanism、create)。protectedCheapFallbackPatterns(1.20.1) —— 绝不应该获得廉价回退值的物品 ID 片段。
安全
largeDropProtectionThreshold/maxAllowedDropRatio—— 调整大幅掉落防护。ownershipSmallDifferenceRatio—— AutoEMC 和 ProjectE 值之间的差异多大程度会被视为“仅噪声”。consistencyWarnMinRatio/consistencyWarnMinAbsoluteDelta(1.16.5) —— 低价输入报告的阈值。
NBT
scanNbtVariants—— 扫描 NBT 标签物品变体。maxNbtVariantsPerItem—— 每个物品 ID 能生成的变体上限。useNbtMaterialResolvers/useLiveNbtMaterialResolution—— 启用材料感知的 NBT 定价。nbtMaterialMultipliers—— 材料标签 NBT 解析器使用的乘数。
以上所有内容都位于 autoemc-common.toml 中。
8. 命令 (1.20.1)
/autoemc rescan
需要权限等级 2。立即强制进行一次全新的扫描,无需等待服务器重启。
9. 构建信息 (1.20.1)
- 模组 ID:
autoemc - 版本:
2.0.0 - 构建命令:
.\gradlew.bat clean build - 输出 jar:
build/libs/autoemc-2.0.0.jar
预发布冒烟测试检查清单:
- 安装 ProjectE 和 AutoEMC 后启动游戏。
- 确认日志中出现扫描开始消息。
- 确认
latest.log或config/autoemc/autoemc-debug.log中无错误。 - 确认
config/ProjectE/custom_emc.json被写入/更新。 - 重启或执行
/reload以使生成的值生效。
注意:在大型整合包上首次扫描可能需要 5 分钟以上,并且可能看起来像什么都没发生——它正在处理物品、配方和回退逻辑。在出现完成消息之前,请等待,不要假设它卡住了。
10. 要求回顾
1.16.5 版本:
- Minecraft 1.16.5,Forge
- ProjectE(必需)
- ProjectE Integration(必需——用于基础数据和其自身集成的功能)
1.20.1 版本:
- Minecraft 1.20.1,Forge 47.x,Java 17
- ProjectE(必需,但无需捆绑 jar——使用反射/兼容)
- ProjectE Integration(用作基础数据源)
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。