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 是否加载,但结果从未被使用。