TileFloodGate

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

注册信息

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

槽位数量与布局

没有物品槽位。TileFloodGate 不实现 IInventory:

factory/TileFloodGate.java:38 与 :42:

public static final int MAX_LIQUID = FluidContainerRegistry.BUCKET_VOLUME * 2;
...
private final Tank tank = new Tank("tank", MAX_LIQUID, this);

1 个流体罐,容量 = 2 × 桶体积,罐名 "tank"。 注意类型是 Tank(普通罐,内容可留存),而 Pump / Refinery 用的是 SingleUseTank(一次性)。

处理速率 / 耗时(本篇核心常量:8 档延迟数组)

factory/TileFloodGate.java:37 + :48-56 静态初始化块:

public static final int[] REBUILD_DELAY = new int[8];
...
static {
    REBUILD_DELAY[0] = 128;
    REBUILD_DELAY[1] = 256;
    REBUILD_DELAY[2] = 512;
    REBUILD_DELAY[3] = 1024;
    REBUILD_DELAY[4] = 2048;
    REBUILD_DELAY[5] = 4096;
    REBUILD_DELAY[6] = 8192;
    REBUILD_DELAY[7] = 16384;
}

REBUILD_DELAY 是长度 8 的 int 数组(new int[8],:37), 数值是 2 的幂,从 128 到 16384:

索引 值 换算 索引 值 换算
0 128 6.4 s 4 2048 102.4 s
1 256 12.8 s 5 4096 204.8 s
2 512 25.6 s 6 8192 409.6 s
3 1024 51.2 s 7 16384 819.2 s

⚠️ 这是「按流量档位选的重建延迟」——流量越大,重算越慢。 8 档 = 流量分级,不是 8 个方块、也不是 8 个阶段。 把 16384 说成「最长支持 16384 格」是量纲写反。

对比 TilePump 的单个 REBUID_DELAY = 512——Pump 只有一档。

流体搜索

维护两套数据结构(factory/TileFloodGate.java:39-46):

字段 类型 用途
pumpLayerQueues TreeMap<Integer, Deque<BlockIndex>> 按 Y 层排队的待抽流体块
visitedBlocks Set<BlockIndex> 已访问集合,防重复扩散
fluidsFound Deque<BlockIndex> 找到的流体块队列
blockedSides boolean[6] 6 个方向的面阻挡标记(对应 ForgeDirection 六个面)

⚠️ blockedSides 长度 6,对应 ForgeDirection 的 6 个方向(上下前后)。 写条目时不能写成 3(只算水平)或 4。

rebuildDelay 字段(:43)持有当前选中的那档延迟值。

updateEntity()(:62)在客户端直接返回(:65-67),随后 if (powered) { return; }(:69-70) ——被红石充能时完全不动。

GUI / Container

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

网络封包

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

相关条目