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)。