本 mod 没有的东西

本条目是反向索引:记录 JustEnoughCalculation(GTNH fork)明确不存在的内容, 并给出可复现的 grep 证据。之所以需要它,是因为这个 mod 的资源文件里残留着 大量已经不存在的注册物的痕迹(见第 1 节),极易让人误以为它注册了物品。

核实基准:/Users/evlos/a/mirror/JustEnoughCalculation/,commit ef2a0a1, 提交时间 2025-03-02T13:33:36+01:00。 全仓库 src/main/java 共 105 个 Java 文件,其中 97 个是本 mod 自己的代码, 另 8 个位于 me/towdium/jecalculation/polyfill/(反编译的 Minecraft / Forge 兼容垫片,不含任何注册逻辑)。本条目所有 grep 均排除 polyfill/。

1. 没有注册任何物品 —— 但资源文件留下了痕迹

资源侧确实存在

文件 内容
assets/jecalculation/models/item/item_calculator_crafting.json {"parent": "item.generated", "layer0": "jecalculation:items/item_calculator_crafting"}
assets/jecalculation/models/item/item_calculator_math.json 同上,纹理为 item_calculator_math
assets/jecalculation/textures/items/item_calculator_crafting.png 贴图
assets/jecalculation/textures/items/item_calculator_math.png 贴图
lang/en_US.lang 第 2~3 行 item.item_calculator_crafting.name=Crafting calculator / item.item_calculator_math.name=Math calculator
lang/zh_CN.lang 第 2~3 行 同键,中文为「合成计算器」「数学计算器」
lang/ru_RU.lang 第 2~3 行 同键,俄文为「Калькулятор создания」「Математический калькулятор」

(三个 lang 文件的这两行位置完全一致,都在第 1 行注释之后。)

item.<注册名>.name 正是原版物品显示名的命名空间,配合 item/generated 模型, 这是一套完整的「已注册物品」资源。

代码侧完全不存在

$ grep -rn --include=*.java "item_calculator_crafting\|item_calculator_math\|calculator_crafting\|calculator_math" src/
(零命中)

本 mod 自己的 97 个 Java 文件里,所有物品注册惯用法全部为零:

检索模式 命中数
registerItem 0
GameRegistry.register 0
extends Item 0
extends ItemBlock 0
new Item( 0
RegistryEvent 0
class .* extends .*Item 0

grep -rn "Registry.register" 命中的两行其实是 ClientRegistry.registerKeyBinding(...)(热键注册,不是物品); grep -rn "Item item =" 命中的三处是 utils/ItemStackHelper.java:25、 data/label/labels/LOreDict.java:156 和 ILabel.java:77 的局部变量声明, 全部是「读别人的物品」,没有一处是「定义自己的物品」。

结论:合成计算器物品与数学计算器物品在本 fork 中不存在。 它们的模型、贴图与本地化条目是上游遗留的孤儿资源,游戏里拿不到。 要打开这两个界面只能用 热键 或 /jeca craft / /jeca math(见 指令)。

更多「已移除」痕迹

位置 残留物 说明
data/Controller.java:62 static Optional<ItemStack> getStack() { return Optional.empty(); } 方法体恒返回空,原本用于「取玩家手持的计算器物品」
lang/*.lang jecalculation.chat.server_mode=...you cannot open the interface without an calculator item 该键无任何 Java 引用,是物品移除前的提示
lang/*.lang jecalculation.config.force_client 无任何 Java 引用
lang/*.lang jecalculation.command.state.active 无任何 Java 引用(见 指令)
lang/*.lang jecalculation.command.state.inactive 代码传的是裸键 "inactive",这个带前缀的键同样无人引用
lang/*.lang jecalculation.chat.help 无任何 Java 引用

⚠️ 判定本地化条目是否被使用时不能直接搜全名:Utilities.I18n.get(key) 会 自动补上 "jecalculation." 前缀,ISubCommand.getKey(k) 也按 "jecalculation.command." + getName() + "." + k 拼接。所以 jecalculation.gui.* 下的大部分条目虽然搜不到全名,实际上都在用。 上面列出的 6 条是逐条确认过连后缀形式也搜不到的。

2. 没有方块、TileEntity、实体、多方块结构

检索模式 命中数
registerBlock 0
registerTileEntity 0
registerEntities 0
extends TileEntity 0
extends Entity 0
extends EntityLiving 0

主类 JustEnoughCalculation 只有 5 个 @Mod.EventHandler: preInit / init / postInit 与 5 个服务器生命周期回调,且全部只是转发给 proxy,proxy 侧也不做任何注册。CommonProxy 里五个服务器回调是空转发, ClientProxy 只做 4 件事:读配置、注册事件、注册 2 个热键、注册 1 条客户端指令。

3. 没有附魔、维度、群系、结构、成就、Buff、物品效果

检索模式 命中数
EnchantmentData 3(见下方说明,均为消费而非注册)
Enchantment(作为注册) 0
DimensionProvider / WorldProvider 0
WorldGen / BiomeProvider 0
WorldSavedData 0
Achievement 0
MobEffect / Potion 0
onItemUse / onEntityItemUpdate 0

关于 EnchantmentData:本 mod 确实在 ILabel.Converter 里处理了它,但那是一个 物品(原版附魔书的内容载体),处理方式是「读别人已有的附魔并包装成标签」:

if (item instanceof EnchantmentData) {
    ItemStack itemStack = new ItemStack(Items.enchanted_book);
    new ItemEnchantedBook().addEnchantment(itemStack, (EnchantmentData) item);
    return new LItemStack(itemStack);
}

即把 NEI 给出的「附魔数据」转成一个 Items.enchanted_book 的 ItemStack 标签。 本 mod 没有 extends Enchantment、没有 registerEnchantment, 不提供任何附魔。

src/main/resources/META-INF/jeca_at.cfg 里只有 2 条 access transformer, 都是给 NEI 读 NBT 用的,且都只是取消字段的 private:

# NEI Access Transformer configuration file
public net.minecraft.nbt.NBTTagCompound field_74784_a #tagMap
public net.minecraft.nbt.NBTTagList field_74747_a #taglist

不涉及任何方块、附魔或世界生成。

4. 没有服务端指令、没有网络封包

检索模式 命中数
ICommand(按词精确匹配,grep -w) 0
ICommandSender 20(全部是 JecaCommand / 4 个子命令的方法签名形参类型)
extends CommandBase 1(JecaCommand,即客户端指令本身)
registerServerCommand 0
SimpleNetworkWrapper / FMLEmbeddedChannel 0
IMessage / MessageContext 0

⚠️ grep -rn "ICommand" 会命中 20 次,但全部是 ICommandSender(子串), 并不存在 ICommand 实现。要精确判定需加 grep -w。

指令只通过 ClientCommandHandler.instance.registerCommand(...) 注册, 纯客户端。CommonProxy.serverStarting 上方有一句注释 // register server commands in this event handler,但方法体是空的。

唯一出网的调用是 NEIPlugin.findItem 向 Find It 发 FindItNetwork.CHANNEL.sendToServer(new FindItemRequest(...))——那是第三方模组的通道, 不是本 mod 的。

5. 不显示装备属性数值

本 mod 没有任何读取装备属性的代码。它不显示:

常见「计算器」属性 本 mod 有无
攻击伤害(damage) 无
攻速(attack speed) 无
护甲值(armor) 无
toughness / knockback resistance 无
挖掘速度(mining speed) 无
挖掘等级(harvest level) 无
爆炸抗性(blast resistance) 无
耐久(durability) 无
步行速度 / 跳跃高度 无
附魔附魔(enchantability) 无

grep -rn "getItemAttributeModifiers\|ToolMaterial\|getExplosionResistance\|getMaxItemUseDuration\|getDurabilityForMinecraft\|getAttackDamage\|EntityEquipmentSlot\|EquipmentAttribute" 在本 mod 代码中零命中(排除 polyfill/)。

计算器结果面板里的每一个格子都是一种标签的数量——物品、流体、矿物词典或 占位符,没有任何一种格子承载属性数值。这是它与「Damage Indicators」「IndustrialCraft 的 EIO Player Inspector」一类属性显示模组的根本区别。

6. 没有 REI / JEI 支持

检索模式 命中数
me.cqpire.roughlyenoughitems / REI 0
mezz.jei / JEI 0

本 mod 只支持 NotEnoughItems(codechicken.nei.*), 且通过 @Mod(dependencies = "required-after:NotEnoughItems") 声明为硬依赖。 它也不提供任何 NEI 搜索提供者(search provider)或自定义配方处理器, 只消费别人已有的配方处理器。详见 NEI 集成。

7. 没有 REI/JEI 之外的高级显示选项

main.cfg 里看起来有 4 个可调项,但它们全部未被读取(详见 配置):

配置项 声明的效果 实际情况
ClientMode 强制客户端模式,不允许物品和配方,改用热键 无读取点
EnableInventoryCheck 设为 false 关闭自动背包检查 无读取点
ListRecipeBlackList 禁止某类配方快速导入 无读取点
ListRecipeCategory 配方分类列表(注释称由 mod 自动维护) 无读取点,且默认值为硬编码常量

唯一的读取点 JecaConfig.isClintMode() 在全仓库零调用。

这正是「客户端模式」在本 fork 中已经变成事实(没有物品了)而非可选项的体现—— 配置项没跟上代码的删除。

8. 没有的维度一览

以下 11 个维度在本 mod 中确认无内容,故未创建对应目录:

维度 为何为空
方块 无 registerBlock,无方块类
物品 无 registerItem,模型/贴图是孤儿资源(第 1 节)
实体 无 registerEntities,无 Entity 子类
多方块 无任何结构类
附魔 无 extends Enchantment、无 registerEnchantment(EnchantmentData 的 3 处命中是读取,见第 3 节)
维度 无 DimensionProvider
药水效果 无 MobEffect / Potion
群系 无 WorldGen / BiomeProvider
结构 无 WorldSavedData
成就 无 Achievement
物品效果 无 onItemUse 等物品交互覆写

实际有内容的维度只有 设置 与 热键 两类。