能源模组集成

基本信息

属性 值
集成包 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),也不注册内容。

相关条目