RF 模块(appeng.integration.modules.RF)

基本信息

属性 值
源码 appeng/integration/modules/RF.java
类声明 27,public final class
实现接口 只有 IIntegrationModule(不实现任何 abstraction 接口)
静态单例 public static RF instance
modID CoFHAPI(IntegrationType.java:27,显示名 RedstoneFlux Power - Tiles)
side BOTH
本 wiki 收录情况 CoFH Core / 红石通量 未被本 wiki 收录 —— 写全名 CoFH Core(红石通量)

职责

只服务方块侧的 RF 兼容。对应的物品侧目标 IntegrationType.RFItem(IntegrationType.java:29)是空壳 (RFItem.java:28 / :31),什么都不注入。

⚠️ 命名陷阱:RF / RFItem / CoFHWrench 三个目标的 modID 全是 CoFHAPI (IntegrationType.java:27 / :29 / :30),但只有 RF 有实际内容。

生命周期

阶段 行号 动作
init() 41 注册 LayerIEnergyHandler(:46)
postInit() 51 调律 4 个外部 mod 共 15 项(:52-74)

注入内容 1:part layer

// RF.java:45-47
if (IntegrationRegistry.INSTANCE.isEnabled(IntegrationType.RF)) {
    partHelper.registerNewLayer("appeng.parts.layers.LayerIEnergyHandler", "cofh.api.energy.IEnergyReceiver");
}
AE2 侧 layer CoFH 侧接口
appeng.parts.layers.LayerIEnergyHandler cofh.api.energy.IEnergyReceiver

注入内容 2:15 项 P2P 调律,覆盖 4 个没有 IntegrationType 的 mod

RF.java:52-74 全部经 registerRFAttunement(mod, name, dmg)(:77-89), 全部指向 TunnelType.RF_POWER。

外部 mod 物品 damage 行号
Extra Utilities(本 wiki 未收录) extractor_base 12 52
Extra Utilities pipes 11 53
Extra Utilities pipes 14 54
Extra Utilities generator WILDCARD_VALUE 55
Thermal Expansion(本 wiki 未收录) Cell WILDCARD_VALUE 57
Thermal Expansion Dynamo WILDCARD_VALUE 58
Thermal Dynamics(本 wiki 未收录) ThermalDynamics_0 0 — Leadstone Fluxduct 61
Thermal Dynamics ThermalDynamics_0 1 — Hardened Fluxduct 63
Thermal Dynamics ThermalDynamics_0 2 — Redstone Fluxduct 65
Thermal Dynamics ThermalDynamics_0 4 — Resonant Fluxduct 67
Thermal Dynamics ThermalDynamics_0 6 — Cryo-Stabilized Fluxduct 69
Ender IO(本 wiki 未收录) itemPowerConduit WILDCARD_VALUE 71
Ender IO blockCapBank WILDCARD_VALUE 72
Ender IO blockPowerMonitor 0 73
Ender IO itemPowerConduitEndergy WILDCARD_VALUE 74

Thermal Dynamics 的注释在源码里(:60 / :62 / :64 / :66 / :68), 逐个标出管道种类。

⚠️ RF.java:72 的 blockCapBank 用了 WILDCARD_VALUE(-1)作 damage, 但 registerRFAttunement 的 assert dmg >= 0(:82)只在开了 -ea 时生效。开发环境下这条断言会失败。生产环境(无 -ea) ItemStack.setItemDamage(-1) 等于「任意 durability」。

这 4 个 mod 不在 IntegrationRegistry 里

集合运算结论(详见 IntegrationType):

IntegrationType 常量     : 27
其中 modID 不同者        : 24
RF.java 额外引用的 mod   : 4   ← 无 IntegrationType 常量
源码中真正有兼容逻辑的外部 mod : 31

这 4 个 mod 不受 ModIntegration 配置项控制 (没有对应的 IntegrationNode),但安全跳过是硬保证:

// RF.java:84-88
final ItemStack modItem = GameRegistry.findItemStack(mod, name, 1);
if (modItem != null) {
    modItem.setItemDamage(dmg);
    AEApi.instance().registries().p2pTunnel().addNewAttunement(modItem, TunnelType.RF_POWER);
}

GameRegistry.findItemStack 在 mod 未安装时返回 null → 整段跳过。 不抛异常、不记日志。

registerRFAttunement 的 4 条 assert

RF.java:78-82:

assert mod != null;
assert !mod.isEmpty();
assert name != null;
assert !name.isEmpty();
assert dmg >= 0;      // :82

全是 assert,仅在 JVM 带 -ea 时生效。生产环境全部失效。

mod 没装时是否安全跳过

是,CoFHAPI 缺失 → Loader.isModLoaded("CoFHAPI") 为 false → ModNotInstalled(IntegrationNode.java:87)→ FAILED。

⚠️ 但 RF 的 modID 是 CoFHAPI(CoFH Core), 不是 ExtraUtilities / ThermalExpansion 等。也就是说 装了 Thermal Expansion 但没装 CoFH Core 时,整个 RF 目标禁用, 那 15 项调律一项都不会注册。逻辑上是自洽的(RF 隧道本身需要 CoFH API)。

相关条目