液体传送器(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 股。