能源模组集成
基本信息
| 属性 | 值 |
|---|---|
| 集成包 | crossmod/RF/、crossmod/bigreactors/、crossmod/mekanism/ |
| 模组 ID 常量表 | crossmod/ModLib.java |
| 统一入口 | CrossModLoader(crossmod/CrossModLoader.java:11) |
| 初始化阶段 | init(注册方块/物品)与 postInit(注册 TileEntity) |
支持的模组 ID
ModLib 定义了 7 个 modid 字符串(ModLib.java:5-11):
| 常量 | 字符串 | 用于 |
|---|---|---|
BC |
BuildCraft|Core |
BuildCraft |
TE |
ThermalExpansion |
Thermal Expansion |
AE2 |
appliedenergistics2 |
Applied Energistics 2 |
BIG_REACTORS |
BigReactors |
Big Reactors |
ENDER_IO |
EnderIO |
Ender IO |
MEKANISM |
Mekanism |
Mekanism |
GT |
gregtech |
GregTech |
条件注册的内容
以下方块与物品只在对应模组加载时才注册。基准的 2 方块 + 16 物品之外,最多再增加 2 方块 + 6 物品:
| 触发模组 | 门控位置 | 物品数 |
|---|---|---|
| AE2 | CrossAppeng.registrationCheck() 的 Loader.isModLoaded(ModLib.AE2) |
2 |
| Big Reactors | CrossBigReactors.doStuff() 的 Loader.isModLoaded(ModLib.BIG_REACTORS) |
2 |
| TE 或 EnderIO | CrossTE.intergrateTE() 的 Loader.isModLoaded(ModLib.TE) || Loader.isModLoaded(ModLib.ENDER_IO) |
1 |
| Mekanism | CrossModLoader.postinit() 的 Loader.isModLoaded(ModLib.MEKANISM) |
1 |
⚠️ BuildCraft 不注册任何物品(只有扳手/储罐的 API 兼容), 原表把它列为触发模组是错的。 另:
Vanilla.initVanilla()的 3 个物品无门控(CrossModLoader.init()直接调用),已计入基准 16。
| 触发模组 | 新增方块 | 新增物品 | 引用 |
|---|---|---|---|
BuildCraft|Core 或 ThermalExpansion |
— | RFSensorCard(RF 能源传感定位卡片) |
crossmod/RF/CrossTE.java:15-24 |
EnderIO |
— | RFSensorCard(同上,与 TE 共用分支) |
CrossTE.java:15 |
Mekanism |
— | MekRFenergyCard |
crossmod/mekanism/CrossMekanism.java:27-30 |
BigReactors |
NC-BRinfoFetch |
NC-BRreactorCard、NC-BRrfsensorKit |
crossmod/bigreactors/CrossBigReactors.java:30-35 |
各注册点均在 @Optional.Method(modid = ...) 标注的方法内(CrossBigReactors.java:28、CrossAppeng.java:26),由 Loader.isModLoaded 守卫。
BuildCraft / Thermal Expansion / Ender IO
CrossTE.intergrateTE() 在 postInit 调用(CrossModLoader.java:31)。判定条件是 TE 或 Ender IO 任一加载(CrossTE.java:15),随后注册 ItemCardRFEnergyLocation 为 RFSensorCard(CrossTE.java:22-24),并输出日志「Another Energy System is Loaded. Adding Intergration!」(CrossTE.java:17)。
Mekanism
CrossMekanism 的构造函数用反射探测 mekanism.api.energy.IStrictEnergyStorage 是否存在(CrossMekanism.java:15-20),postInit 中若 Mekanism 加载则调用 LoadItems() 注册 MekRFCard(CrossMekanism.java:33-35)。注意类名/字段拼写为 isMekanismPresent(CrossMekanism.java:23)。
Big Reactors
CrossBigReactors.doStuff() 在 init 阶段调用(CrossModLoader.java:25)。检测到 Big Reactors 时先打印一条特殊的日志「We know that there is a foreign reactor installed…」(CrossBigReactors.java:23),再注册 1 方块 + 2 物品 + 1 TileEntity(CrossBigReactors.java:30-36)。其配方按 recipes 配置项分流到 BigReactorsRecipesNew(normal)或 BigReactorsRecipesGregtech(gregtech),各 3 处 addRecipe(CrossBigReactors.java:38-44)。
RF 计数器替换
加载 TE / BuildCraft / Ender IO 时,CrossRF 会注册两份 RF 专用 TileEntity(crossmod/RF/CrossRF.java:25-28):
| 注册名 | 类 |
|---|---|
IC2NCAverageCounterRF |
RFTileEntityAverageCounter |
IC2NCEnergyCounterRF |
RFTileEntityEnergyCounter |
它们是 TileEntityEnergyCounter / TileEntityAverageCounter 的子类,实现 Forge IEnergyHandler(RFTileEntityAverageCounter.java、RFTileEntityEnergyCounter.java:12)。这解释了电力计数器为何从 crossRF 取单例:RF 环境下计数器直接测量 Forge 能量网络的流量。
无检测的条件化代码
CrossBuildcraft 通过反射探测 buildcraft.api.tools.IToolWrench(crossmod/RF/CrossBuildcraft.java:18-20),提供 isWrench / useWrench / isTankContainer 三个方法(CrossBuildcraft.java:27,32,37),但不注册任何方块或物品。CrossRailcraft 同样只用反射探测 mods.railcraft.common.blocks.machine.ITankTile(crossmod/railcraft/CrossRailcraft.java:17),提供 getIronTank(CrossRailcraft.java:24),也不注册内容。
相关条目
- 电力计数器 - RF 环境下的单例来源
- IC2 与 GregTech 集成 - 硬前置与 GT 配方
- 信息类模组集成 - AE2 / Waila / NEI / OpenComputers