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 中:

  1. 手里物品经 GTCompat.isPumpCover(held) 判定(遍历 pumpCoverRates.keySet() 比对 ItemStack.isItemEqual)
  2. 若 getPumpCoverRate(held) == custom_fluid_rates[side](已装同档)→ 聊天栏显示 translocator.update.display.dupe(“GT Pump Cover is the same”)并直接返回,不消耗
  3. 否则若该面已装过泵盖 → dropItem(GTCompat.getItem(custom_fluid_rates[side])) 把旧泵盖掉回地面 (getItem 是按速率值反查泵盖)
  4. custom_fluid_rates[side] = GTCompat.getPumpCoverRate(held)
  5. 非创造模式扣 1 个
  6. 聊天栏显示 translocator.update.display + 速率 + " mB/t" (英文:GT Pump Cover Installed: Flow Rate)
  7. markUpdate() 同步

持久化与拆除

  • NBT 标签 custom_fluid_rate(每面一个,写在 LiquidAttachment.write/read 中)
  • 网络包也单独同步(packet.writeInt(custom_fluid_rates[side]))
  • 潜行空手右键拆升级件时,stripModifiers 掉回泵盖并把 custom_fluid_rates[side] 归 0
  • 拆除整个侧面 / 方块时同样掉回

相关条目