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。