GT 泵盖兼容层(GTCompat)
基本信息
| 属性 | 值 |
|---|---|
| 实现类 | codechicken.translocator.GTCompat |
| 启用条件 | Loader.isModLoaded("gregtech_nh"),结果缓存在 Translocator.isGT5uNHLoaded |
| 检测时机 | preInit 里设置标志,init 里 if (isGT5uNHLoaded) GTCompat.init(); |
| 作用对象 | 仅 液体传送器 的侧面 |
| 是否硬依赖 | 否。GregTech 缺席时 GTCompat 完全不初始化,全部逻辑短路 |
| 依赖 API | gregtech.api.enums.ItemList(GT5-Unofficial 的 ItemList 枚举) |
这是整个 mod 唯一的第三方 mod 集成点。它是 GregTech 移除后 mod 仍能独立运行的
(GT5uNH 缺失时所有 if (Translocator.isGT5uNHLoaded) 都不成立)。
功能
把 GregTech 的电动泵(Pump Cover)当作液体传送器侧面上的
“速率升级件”:右键一个面装上泵盖,该面的 custom_fluid_rates[side] 就被设成对应的 mB/t 值,
完全覆盖原本的 100 / 1000 二值判定。
泵盖速率表
GTCompat.pumpCoverRates 把 14 个电压等级的 Electric_Pump_* 映射为流量(mB/t):
| GT 电压等级 | 物品 | 速率(mB/t) |
|---|---|---|
| LV | Electric_Pump_LV |
32 |
| MV | Electric_Pump_MV |
128 |
| HV | Electric_Pump_HV |
512 |
| EV | Electric_Pump_EV |
2048 |
| IV | Electric_Pump_IV |
8192 |
| LuV | Electric_Pump_LuV |
32768 |
| ZPM | Electric_Pump_ZPM |
131072 |
| UV | Electric_Pump_UV |
524288 |
| UHV | Electric_Pump_UHV |
1048576 |
| UEV | Electric_Pump_UEV |
2097152 |
| UIV | Electric_Pump_UIV |
4194304 |
| UMV | Electric_Pump_UMV |
8388608 |
| UXV | Electric_Pump_UXV |
16777216 |
| MAX | Electric_Pump_MAX |
Integer.MAX_VALUE(2147483647) |
每级正好是上一级的 4 倍(32 → 128 → 512 → 2048 …)。源码最后一行注释误写为
// UXV, 实际 key 是Electric_Pump_MAX。
对速率计算的影响
液体传送器 的 getFluidRate:
int base = fast ? 1000 : 100;
if (custom_fluid_rates[i] > 0) return custom_fluid_rates[i];
return base;
装泵盖后 custom_fluid_rates[i] > 0,直接返回泵盖值并忽略 fast 标记。
即装了泵盖就一定是泵盖的速率,跟有没有 Glowstone 粉无关。
动画侧的 capLiquid 同理:fast ? (custom_fluid_rate > 0 ? custom_fluid_rate : 1000) : 100 ——
非高速面即使装了泵盖,动画流体上限仍是 100 mB,但实际抽取量已经是泵盖速率了。
动画排出速度取 max(custom_fluid_rate / 5, fast ? 200 : 20)。
客户端流股数按 rate = custom_fluid_rate == 0 ? (fast ? 1000 : 100) : custom_fluid_rate 计算,
所以高泵盖会让流体带画出更多并行流股(见 液体传送器 渲染表)。
安装流程
LiquidAttachment.activate 中:
- 手里物品经
GTCompat.isPumpCover(held)判定(遍历pumpCoverRates.keySet()比对ItemStack.isItemEqual) - 若
getPumpCoverRate(held) == custom_fluid_rates[side](已装同档)→ 聊天栏显示translocator.update.display.dupe(“GT Pump Cover is the same”)并直接返回,不消耗 - 否则若该面已装过泵盖 →
dropItem(GTCompat.getItem(custom_fluid_rates[side]))把旧泵盖掉回地面 (getItem是按速率值反查泵盖) custom_fluid_rates[side] = GTCompat.getPumpCoverRate(held)- 非创造模式扣 1 个
- 聊天栏显示
translocator.update.display+ 速率 + " mB/t" (英文:GT Pump Cover Installed: Flow Rate) markUpdate()同步
持久化与拆除
- NBT 标签
custom_fluid_rate(每面一个,写在LiquidAttachment.write/read中) - 网络包也单独同步(
packet.writeInt(custom_fluid_rates[side])) - 潜行空手右键拆升级件时,
stripModifiers掉回泵盖并把custom_fluid_rates[side]归 0 - 拆除整个侧面 / 方块时同样掉回