电力体系
基本信息
| 属性 | 值 |
|---|---|
| 实现文件 | power/TilePowered.scala / TilePoweredEU.scala / TilePoweredRF.scala / ItemPowered*.scala |
| 内部单位 | MJ(所有机器参数、工具电量均以 MJ 计量) |
| 外部系统 | IC2(EU)与 CoFH API(RF),均为可选 |
| 必需性 | PowerProxy.logModVersions 明确警告:至少要有 CoFHCore 或 IC2 Experimental 之一,否则「No useable energy system detected」 |
模块探测
compat/PowerProxy.scala:
| 常量 / 变量 | 值 |
|---|---|
IC2_MOD_ID |
"IC2" |
TE_MOD_ID |
"CoFHAPI" |
haveIC2 |
Misc.haveModVersion("IC2") |
haveTE |
Misc.haveModVersion("CoFHAPI") |
EUEnabled |
Tuning.Power.EU.Enabled |
RFEnabled |
Tuning.Power.RF.Enabled |
两个系统都通过 @Optional.Interface / @Optional.Method 注解做可选加载(TilePoweredEU 上有 @Optional.Interface(modid = IC2_MOD_ID, iface = "ic2.api.energy.tile.IEnergySink")),因此未安装 IC2 时不会报 NoClassDefFoundError。
换算比例
来自 tuning.cfg 的 Power 段:
| 键 | 值 | 注释原文 |
|---|---|---|
RF_MJ_Ratio |
10 | 10 RF = 1 MJ |
EU_MJ_Ratio |
2.5 | 5 EU = 2 MJ |
两者方向一致:1 MJ = 10 RF = 2.5 EU。因此 1 EU 比 1 RF 便宜 4 倍(以 MJ 计价)。
IC2 EU 接入
TilePoweredEU 实现 IEnergySink:
| 方法 | 实现 |
|---|---|
getDemandedEnergy |
Misc.clamp(power.capacity - power.stored, 0f, power.maxReceive) * ratio —— 索取量 = 剩余可用空间(不超过 maxReceive)× EU_MJ_Ratio |
getSinkTier |
读 Tuning.Power.EU.SinkTier,默认 2(注释:1 = LV, 2 = MV, 3 = HV, 4 = EV etc.) |
injectEnergy |
power.stored += (amount / ratio).toFloat,绕过 power.inject 并返回 0 |
acceptsEnergyFrom |
见源文件,未做方向限制 |
injectEnergy 绕开正常注入通道的原因写在源码注释里:IC2 忽略了返回值,不这么做会导致能量被白白浪费。代价是 IC2 会以为什么都没接收从而持续推送,模组用「全部收下」的返回值换取不丢能量。
sendLoad / sendUnload 在 serverTick 与 invalidate / onChunkUnload 时向 MinecraftForge.EVENT_BUS 发 EnergyTileLoadEvent / EnergyTileUnloadEvent。
CoFH RF 接入
TilePoweredRF 通过 CoFH API 接口接收 RF,按 RF_MJ_Ratio 折算为 MJ 存入同一个 power 数据槽。两套系统共用同一份储能,不存在双缓冲。
工具侧
ItemPowered trait = ItemPoweredBase(bdlib)+ ItemPoweredRF + ItemPoweredEU,即 Industrial Grafter 与 Scooporator 同样接受 RF 与 EU。
显示单位
client.config 的 PowerShowUnits 决定 GUI 显示单位,默认 RF。选 MJ 时 powerShowMultiplier 保持 1f;选 RF / EU 时分别读 RF_MJ_Ratio / EU_MJ_Ratio。见 client.config。
FML 依赖声明
@Mod(dependencies = ...) 中 CoFH 与 IC2 都是 after:(软依赖)而非 required-after::
required-after:Forestry@[4.0.0.0,);after:BuildCraft|energy;after:BuildCraft|Silicon;
after:IC2;after:CoFHCore;after:BinnieCore;after:ExtraBees;after:ExtraTrees;
after:MineFactoryReloaded;after:MagicBees;required-after:bdlib@[1.9.4.109,)
即硬依赖只有两个:Forestry ≥ 4.0.0.0 与 bdlib ≥ 1.9.4.109。after:Energy 类依赖决定加载顺序但不强制存在。
相关条目
- 物品推送代理 - 另一组跨模组兼容层
- tuning.cfg - 换算比例与 SinkTier 的配置位置
- client.config - 显示单位