TileTank

事实基准:/Users/evlos/a/mirror/BuildCraft(master,minecraftVersion = 1.7.10)逐行读源码。

注册信息

属性 值 来源
TileEntity 注册名 net.minecraft.src.buildcraft.factory.TileTank BuildCraftFactory.java:108
注册类 buildcraft.factory.TileTank 同上
所属 modid BuildCraft|Factory BuildCraftFactory.java:71
关联方块 Tank 方块 BuildCraftFactory.java:108 同块
实现接口 IFluidHandler factory/TileTank.java 类声明
是否配置门控 否(无条件注册) BuildCraftFactory.java:108

槽位数量与布局

没有物品槽位。factory/TileTank.java:31-32:

public final Tank tank = new Tank("tank", FluidContainerRegistry.BUCKET_VOLUME * 16, this);
public final TankManager<Tank> tankManager = new TankManager<>(tank);

1 个流体罐,容量 = 16 × 桶体积(与 TilePump 同为 16 桶,但 Pump 用 SingleUseTank,Tank 用可留存的 Tank)。

⚠ 单罐 16 桶不等于「Tank 一次存 16 桶」—— Tank 支持竖直堆叠:多个 Tank 方块竖直相连时,getBottomTank() / getTankAbove() 逐级串联(factory/TileTank.java 的 updateComparators() / getBottomTank())。 实际容量 = 堆叠高度 × 16 桶。

处理速率 / 耗时

没有「N tick 一次」的加工节拍——Tank 只做流体缓冲与传递,不加工。 两条网络节流(factory/TileTank.java:33-35):

字段 初值 含义
tracker 2 * BuildCraftCore.updateFactor(:35) 常规更新节流,周期取配置项非硬编码
hasNetworkUpdate / hasUpdate false 更新标记位

特殊行为

比较器输出

updateComparators()(factory/TileTank.java:45-53)计算 calculateComparatorInputOverride(), 然后沿 getBottomTank() → getTankAbove(uTank) 向上逐级传递, 给整根 Tank 柱的每一格都写 cachedComparatorOverride。 即一整柱 Tank 共用一个比较器强度。

破基座时洒液

onBlockBreak()(factory/TileTank.java:55-58):

if (!tank.isEmpty()) {
    FluidEvent.fireEvent(new FluidEvent.FluidSpilledEvent(tank.getFluid(), worldObj, xCoord, yCoord, zCoord));
}

⚠️ 只有被破坏的那一格 tank 会洒液——上方的 Tank 方块各有自己的 TileEntity, 各自在 onBlockBreak() 里处理,不存在「一次洒光整柱」的逻辑。

动态光照

updateEntity()(factory/TileTank.java:63)在客户端读 getFluidLightLevel(), 变化时调 worldObj.updateLightByType(EnumSkyBlock.Block, ...)(:70)—— 即罐内流体会发光(岩浆/ghast 泪等),光照等级随流体变化重算。

GUI / Container

没有 GUI,也没有 Container(FactoryGuiHandler 无 Tank 分支)。

网络封包

走 TileEntity 默认 NBT 同步。无独立的 Factory 封包 ID。

相关条目