justenoughcalculation

[!INFO] Git Commit: ef2a0a1 | Updated: 2025-03-02

Just Enough Calculation(modid jecalculation,包名 me.towdium.jecalculation) 是 GTNH 1.7.10 上的一个纯客户端配方计算器。它把 NEI 里的配方拆解成 「要做出这个东西,到底需要哪些原始材料、各多少个」,并且能反过来算出 「我背包里这些东西能做出什么、多出多少」。

它的本质是一个递归配方展开算法 + 一个标签合并系统,全部逻辑都在客户端, 不注册任何方块、物品、实体,也不注册服务端内容(无网络封包、无服务端指令)。

它到底显示什么

只有数量。 结果面板上的每一个格子都是一种标签(物品 / 流体 / 矿物词典 / 占位符) 的个数或百分比。它不显示任何装备属性——没有伤害、没有攻速、没有挖掘速度、 没有爆炸抗性、没有耐久、没有护甲。相关 grep 证据见 本 mod 没有的东西。

三个使用入口

入口 说明
打开合成计算器 热键 keyOpenGuiCraft,默认未绑定
打开数学计算器 热键 keyOpenGuiMath,默认未绑定
指令 /jeca craft、/jeca math,权限等级 0

两个热键的默认按键都是 Keyboard.KEY_NONE,所以装完必须自己绑定, 否则只能走 /jeca 指令。

游戏设定

  • 合成显示模式 - RecordCraft.Mode 全部 4 个取值(INPUT/OUTPUT/CATALYST/STEPS)与 Recipe.IO 全部 3 个取值,以及每个模式渲染什么
  • 数学显示模式 - RecordMath.State 全部 3 个取值与 Operator 全部 5 个取值的精确算式,含 7 位有效数字的除法精度
  • 代价列表算法 - 核心算式:multiplier = ⌈需求量 / 产出量⌉ = (amountB + amountA - 1) / amountB,以及合并、缩放、1000 步硬上限
  • 合成步骤优化 - STEPS 模式的贪心重排 + 死胡同时的逆序回退,含背包槽位估算 Σ ⌈数量 / 64⌉
  • 标签类型与合并 - 4 种标签类型(itemStack/fluidStack/oreDict/placeholder)与 5 条合并规则,含模糊合并的符号门槛
  • 配方消歧 - 同槽位多候选时的浮层、数量输入的红色/白色校验、# 与 % 互斥按钮
  • 配方库管理 - 按组浏览、重命名、导入导出;「全部」视图的删除无二次确认
  • NEI 集成 - tooltip 与 overlay 两个钩子、催化剂的 NEI ≥ 2.1.0-GTNH 版本门槛
  • 配方适配器 - 8 个 IAdapter 实现类(GT5/GT6 互斥,故同时最多 7 个)的 overlay 标识符与转换逻辑
  • 指令 - /jeca 根指令 + 4 个子命令,权限等级 0
  • 数据文件 - record.json 的 4 个顶层键、配方库 JSON 结构、导入导出
  • 配置 - main.cfg 的 4 个配置项,以及为什么它们全部无效
  • 本 mod 没有的东西 - 反向索引:11 个空维度 + 逐条 grep 证据

热键列表

⚠️ 三个容易踩的坑

  1. 两个计算器物品在游戏里不存在。 资源目录里留有 item_calculator_crafting / item_calculator_math 的模型、贴图和 item.*.name 本地化条目,但全仓库 Java 代码零引用,也没有任何 registerItem 调用。这是上游遗留的孤儿资源。 证据见 本 mod 没有的东西。

  2. main.cfg 的 4 个配置项全部是死配置。 它们会被写入文件, 但唯一的读取点 JecaConfig.isClintMode() 零调用方,改了不会有任何效果。 详见 配置。

  3. /jeca state 恒输出未本地化的字面量。 它无条件发 new ChatComponentTranslation("inactive")——注意是裸键而非 jecalculation.command.state.inactive,所以原版客户端不会翻译它。 详见 指令。