液体传送器(Liquid Translocator)

基本信息

属性 值
注册名 Translocator:translocator(与物品变体同一个方块,靠 metadata 区分)
metadata 1(createTileEntity 中 metadata 1 返回本 TileEntity)
方块类 codechicken.translocator.BlockTranslocator(与物品变体共用)
物品类 codechicken.translocator.ItemTranslocator(getUnlocalizedName 拼 `"
TileEntity codechicken.translocator.TileLiquidTranslocator(实现 IFluidHandler)
本地化键 tile.translocator|1.name=Liquid Translocator
硬度 / 爆炸抗性 1.5 / 10.0(与物品变体共用 BlockTranslocator)
材质 Material.iron
创造标签 CreativeTabs.tabRedstone

这是 侧面模式系统 的液体变体,也是整个 mod 里唯一 "每个侧面速率可自定义"的东西——靠装 GregTech 泵盖实现,见 GT 泵盖兼容层。

功能

把相邻罐体(IFluidHandler)里的流体按面均分到其他相邻罐体。没有任何过滤功能: 装什么流体就搬什么流体,多个注入面之间随机均分(不挑容器容量之外的东西)。 不消耗能量。

摆放要求

  • 右键贴在一个实现 IFluidHandler 的方块表面(func_150936_a 判 instanceof IFluidHandler)
  • 相邻方块不再实现 IFluidHandler 时邻接更新自动回收该面
  • 每面一个罐体,侧面对着目标(side ^ 1)

数值

数值名 值 来源
每 tick 抽出量(普通) 100 mB getFluidRate:int base = fast ? 1000 : 100;
每 tick 抽出量(高速,fast) 1000 mB 同上
每 tick 抽出量(装了 GT 泵盖) 泵盖对应值,覆盖高速判定 getFluidRate 先查 custom_fluid_rates[i] > 0,为真直接返回,不再看 fast
单股动画流体上限(普通) 100 mB capLiquid:min(liquid.amount, fast ? (custom>0?custom:1000) : 100)
单股动画流体上限(高速) 1000 mB 或自定义值 同上
动画流体排出速度 max(custom/5, fast ? 200 : 20) mB/tick MovingLiquid.update
传输动画路径长度 approachLinear(a_start, 1, 0.2) → 5 tick 走完流体段,再走 a_end 尾段 MovingLiquid.update
每 tick 抽取的目标面 全部 !a_eject 的面(先非红石面后红石面两轮) sortOutputs + spreadOutput

拆分公式 fit = min(fill空位, move.amount / spread + rand.nextInt(move.amount % spread + 1)), spread = outputs.length - k 随循环递减,所以前面的面先多拿一点。

与物品变体的核心差异

维度 物品变体(metadata 0) 液体变体(metadata 1)
过滤 9 格过滤器,物品级 NBT 匹配 无,纯按流体类型自动分配
速率单位 个/tick(1 或整叠) mB/tick(100 或 1000)
速率可调 只能二值(普通/高速) 二值 + GT 泵盖 14 档自定义(32 ~ 2147483647 mB/t)
每 tick 处理量 1 格(取数量最多的槽) 一次性 drain 整个速率值并拆分到所有面
GUI 有(GuiTranslocator 9 格) 无(Attachment.openGui 是空实现)
红石供电 有,强度 15 无(strongPowerLevel 仍返回 0)
额外升级件 钻石粒、铁锭 GT 泵盖
客户端表现 物品实体沿路径漂浮 螺旋流体带,速率 ≥ 1000 时加画并行流股
IFluidHandler 不实现 实现,但 fill/drain 全返回 0/null——自身不存流体,只是给 WAILA 报告 6 个 0 容量罐体

交互

触发 行为
右键·空手·外圈 无 GUI(openGui 空实现),仅吃掉事件
右键·空手·中心按钮 翻转红石取反逻辑
右键·持红石粉 装红石模式(扣 1 个)
右键·持萤石粉 装高速模式,100 → 1000 mB/t(扣 1 个)
右键·持 GT 泵盖 把该面速率设为泵盖对应值,原泵盖掉回地面,聊天栏提示流量(见 GT 泵盖兼容层)
右键·空手·潜行 拆掉本面全部升级件(红石粉/萤石粉/GT 泵盖)
左键 拆掉本面

掉落

掉落 1 个 metadata 1 的液体传送器 + 1 个红石粉(若装)+ 1 个萤石粉(若装)+ 1 个当前安装的 GT 泵盖(LiquidAttachment.stripModifiers / getDrops 路径, dropItem(GTCompat.getItem(custom_fluid_rates[side])))。

合成配方

仅在 DreamCraft 未加载时注册,产出 ×2:

     R  Y  R          R = 红石粉
     I  P  I          Y = 末影珍珠
     R  L  R          I = 铁锭
(×2)                L = 青金石染料(dye metadata 4)
                      P = 活塞

客户端渲染

TileTranslocatorRenderer.drawLiquidSpiral 用 RenderUtils.prepareFluidRender 取流体贴图, 沿路径画螺旋管(步长 tess = 0.05)。速率可视化:

速率 额外流股数
≥ 1000 mB/t +1
≥ 10000 mB/t +2
≥ 100000 mB/t +3
≥ 1000000 mB/t +4
≥ 10000000 mB/t +5

股数来自 levels = {10000000, 1000000, 100000, 10000, 1000} / counts = {5, 4, 3, 2, 1},取第一个命中的档位就 break(不是累加)。 所以 1 万 mB/t 和 100 万 mB/t 画出来的股数一样,都是 2 股。

相关条目