IC2 与 GregTech 集成

基本信息

属性 值
必需前置 required-after:IC2(IC2NuclearControl.java:61)
软前置 after:gregtech_nh(IC2NuclearControl.java:61)
集成包 crossmod/ic2/、crossmod/gregtech/
IC2 跨模组抽象 IC2Cross(抽象类,crossmod/ic2/IC2Cross.java:14)
IC2 实现 IC2ExpCross、IC2Fallback(crossmod/ic2/)
IC2 版本分支 枚举 IC2Type:SPEIGER / EXP / NONE(crossmod/ic2/IC2Type.java:3-7)

功能

本模组是 IC2 的硬前置附属。为兼容 IC2 实验版与经典版两套反应堆实现,crossmod/ic2/ 提供了抽象基类 IC2Cross 与两份实现,由 IC2Cross.getIC2Cross()(IC2Cross.java:43)在 postInit 阶段决定使用哪一份(IC2NuclearControl.java:224)。

IC2Cross 抽象契约

抽象方法 作用 引用
isWrench(ItemStack) 判断物品是否为 IC2 扳手 IC2Cross.java:16
getNuclearCellTimeLeft(ItemStack) 读取核燃料棒剩余时间 IC2Cross.java:18
isSteamReactor(TileEntity) 判断是否为蒸汽反应堆 IC2Cross.java:20
getStorageData(TileEntity) 读取储能设备数据 IC2Cross.java:22
getReactorInfo(TileEntity) 读取反应堆信息 IC2Cross.java:28
isMultiReactorPart(TileEntity) 判断是否为多反应堆部件 IC2Cross.java:30
getType() 返回 IC2 分支类型 IC2Cross.java:32

内部数据类 IC2Cross.ReactorInfo 携带 5 个字段:isOnline、outTank、inTank、emitHeat、coreTemp(IC2Cross.java:34-40)。

对经典版 IC2 的配方妥协

若检测到 IC2 为 SPEIGER(经典版),postInit 会根据 recipes 配置项做特殊处理(IC2NuclearControl.java:225-234),并对两种情况各打印一条警告:

recipes 值 行为 日志
normal-force 强制加载 RecipesNew,警告「Loading normal recipes with IC2 Classic may prevent certain recipes working」 IC2NuclearControl.java:226-228
gregtech-force 强制加载 GregtechRecipes,警告「Loading Gregtech recipes with IC2 Classic may prevent certain recipes working」 IC2NuclearControl.java:229-231
其他 退回 RecipesOld.addOldRecipes() IC2NuclearControl.java:232-234

GregTech

项目 内容
检测方式 after:gregtech_nh 依赖声明 + crossmod/gregtech/CrossGregTech.java
实例化时机 postInit,crossGT = new CrossGregTech()(IC2NuclearControl.java:243)
GT 版本判定 IC2NuclearControl.java:237 接受 gregtech 与 gregtech5 两个值
配方组 crossmod/gregtech/GregtechRecipes.java,共 29 处 addRecipe
GT 物品常量 GameRegistry.findItem("gregtech", "gt.metaitem.01"),meta 32740 = 电脑显示器、32690 = 传感器、32680 = 发射器(GregtechRecipes.java:30-33)

注意依赖声明用的是 gregtech_nh(GTNH 改版 modid),而 IC2Type/配方分支里判断的字符串是 gregtech。两处字符串不一致,是源码现状。

死代码

IC2NuclearControl.isThorfusionLoaded 字段在 preInit 中被赋值(IC2NuclearControl.java:87,179),但全仓库 grep -rn 'isThorfusionLoaded' src/main/java 仅 2 处命中(声明与赋值),没有任何读取点。即:检测了 ThorFusion 是否加载,但结果从未被使用。

相关条目