跨模组集成
基本信息
| 属性 | 值 |
|---|---|
| 包名 | shedar.mods.ic2.nuclearcontrol.crossmod |
| Java 文件数 | 50(find crossmod -name '*.java' | wc -l) |
| 统一入口 | shedar.mods.ic2.nuclearcontrol.crossmod.CrossModLoader |
| 目标 modid 常量 | shedar.mods.ic2.nuclearcontrol.crossmod.ModLib |
| 必需前置 | required-after:IC2(IC2NuclearControl.java:61) |
依赖声明
dependencies.gradle:4-16 中只有两项是 api(运行时必需):
| 依赖 | 作用域 | 版本 |
|---|---|---|
com.github.GTNewHorizons:GTNHLib |
api |
0.9.33 |
net.industrial-craft:industrialcraft-2 |
api |
2.2.828-experimental |
其余 8 项为 compileOnly(仅编译期,运行时不打包):Applied Energistics 2 rv3-beta-853-GTNH、waila 1.19.22、OpenComputers 1.12.16-GTNH、GT5-Unofficial 5.09.52.331、BuildCraft 7.1.55、bigreactors(curse 2282591)、mekanism(curse 2475797)、argo 6.0。NotEnoughItems 2.8.72-GTNH 标为 devOnlyNonPublishable,不随成品发布。
argo 是 JSON 库,唯一使用者是 panel/http/HttpCardSender.java 与 panel/http/Request.java(import argo.jdom.*、import argo.format.*),即 Web Upgrade 的 HTTP 通道——该通道当前未被调用,见 升级件。
已接线的集成
| 集成 | 触发点 | 方式 |
|---|---|---|
| Waila | CrossModLoader.init()(crossmod/CrossModLoader.java:21-24) |
FMLInterModComms.sendMessage("Waila", "register", "...CrossWaila.callbackRegister"),crossmod/waila/ 下 6 个文件均 import mcp.mobius.waila |
| Big Reactors | CrossModLoader.init() 第 25 行 |
CrossBigReactors.doStuff() |
| Applied Energistics 2 | CrossModLoader.init() 第 26 行 |
CrossAppeng.registrationCheck() |
| 原版机器 | CrossModLoader.init() 第 27 行 |
Vanilla.initVanilla() |
| 通用 TileEntity 桥接 | CrossModLoader.postinit() 第 31 行 |
CrossTE.intergrateTE() |
| Mekanism | CrossModLoader.postinit() 第 32-35 行 |
new CrossMekanism(),加载时才 LoadItems() |
| BuildCraft / Thermal Expansion | IC2NuclearControl.postInit() 第 221 行 |
new CrossBuildcraft() |
| Railcraft | IC2NuclearControl.postInit() 第 222 行 |
new CrossRailcraft(),纯反射实现 |
| RF 系 | IC2NuclearControl.postInit() 第 223 行 |
new CrossRF() |
| IndustrialCraft 2 | IC2NuclearControl.postInit() 第 224 行 |
IC2Cross.getIC2Cross() |
| OpenComputers | IC2NuclearControl.init() 第 209 行 |
if (Loader.isModLoaded("OpenComputers")) new CrossOpenComputers() |
| GregTech | IC2NuclearControl.postInit() 第 243 行 |
new CrossGregTech() |
crossmod/railcraft/CrossRailcraft.java 不 import 任何 railcraft 包,而是用 Class.forName("mods.railcraft.common.blocks.machine.ITankTile", ...) 探测后再反射调用 getTank()——所以它不需要在 dependencies.gradle 里声明 Railcraft。
ModLib 中的 modid 常量为:BC = "BuildCraft|Core"、TE = "ThermalExpansion"、AE2 = "appliedenergistics2"、BIG_REACTORS = "BigReactors"、ENDER_IO = "EnderIO"、MEKANISM = "Mekanism"、GT = "gregtech"(crossmod/ModLib.java:5-11)。注意 ModLib.GT 是 gregtech,与 @Mod 依赖串里的 gregtech_nh 是两个不同字符串。
未接线的集成(不算已实现功能)
- NEI:
crossmod/nei/NEINuclearControlConfig.java:10内部会GuiContainerManager.addTooltipHandler(new TooltipHandler()),但NEINuclearControlConfig这个类在全仓库除自身定义外没有任何引用。同时 NEI 依赖是devOnlyNonPublishable,成品 jar 内根本不含 NEI 运行时。 - IC2Classic / Spieiger 分支:
IC2ExpCross、IC2Fallback、IC2Type三个类提供 IC2 实验版与 Spieiger IC2 的兼容路径,由IC2Cross.getIC2Cross()选择。