TileIntegrationTable
事实基准:
/Users/evlos/a/mirror/BuildCraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | net.minecraft.src.buildcraft.factory.TileIntegrationTable |
BuildCraftSilicon.java:151-154 |
| 注册类 | buildcraft.silicon.TileIntegrationTable |
同上 |
| 所属 modid | BuildCraft|Silicon |
BuildCraftSilicon.java:63 |
| 关联方块 | BlockLaserTable,meta = 2 |
silicon/BlockLaserTable.java:80-81 |
| 父类 | TileLaserTableBase |
silicon/TileIntegrationTable.java:25 |
| 实现接口 | ISidedInventory |
同上 |
| 是否配置门控 | 否(无条件注册) | BuildCraftSilicon.java:152 |
槽位数量与布局
silicon/TileIntegrationTable.java 关键常量:
| 常量 | 值 | 行 | 含义 |
|---|---|---|---|
SLOT_OUTPUT |
9 | :27 |
产物槽索引 |
CYCLE_LENGTH |
16 | :29 |
合成一个周期占用的 tick 数 |
SLOTS |
Utils.createSlotArray(0, 10) → 0–9,共 10 |
:30 |
暴露给 ISidedInventory 的槽集合 |
GUI 侧槽位(silicon/gui/ContainerIntegrationTable.java:22-36)
输入槽 0–8 是 9 个,但布局不是 3×3 网格——源码用两个坐标数组显式排布:
public static final int[] SLOT_X = { 44, 44, 69, 69, 69, 44, 19, 19, 19 };
public static final int[] SLOT_Y = { 49, 24, 24, 49, 74, 74, 74, 49, 24 };
逐槽还原(:32 new SlotValidated(table, i, SLOT_X[i], SLOT_Y[i])):
| 槽位 | X | Y | 位置说明 |
|---|---|---|---|
| 0 | 44 | 49 | 左侧中 |
| 1 | 44 | 24 | 左上 |
| 2 | 69 | 24 | 中上 |
| 3 | 69 | 49 | 中央 |
| 4 | 69 | 74 | 右下 |
| 5 | 44 | 74 | 左下 |
| 6 | 19 | 74 | 更左下 |
| 7 | 19 | 49 | 最左中 |
| 8 | 19 | 24 | 左上角 |
⚠️ 这是围绕中央的一个「环形 / 十字」布局(9 格围成 3×3 的边框加中心), 不是标准 3×3 矩阵。写条目时若画成 3×3 方阵即为编造。
产物槽:SlotOutput(table, 9, 138, 49)(:35)——索引 9,位于右侧。
另有客户端预览槽 SlotUntouchable(table.clientOutputInv, 0, 101, 36)(:36),不计入真实槽位。
处理速率 / 耗时(本篇核心常量)
CYCLE_LENGTH = 16(silicon/TileIntegrationTable.java:29),全仓仅此一处使用(:60):
tick++;
if (tick % CYCLE_LENGTH != 0) {
return; // 未到 16 的整数倍则本 tick 不干活
}
⚠️ 语义:Integration Table 的 updateEntity()(:47)每 tick 递增 tick,
只有 tick 是 16 的整数倍时才继续执行实际合成,
即一次配方合成周期为 16 tick = 0.8 秒。
这是 Silicon 层唯一写死「N tick 一次」节拍的机器。
另注意 :54-57:若 activeRecipe == null || !activeRecipeValid,
先把能量清零(setEnergy(0))再返回,tick 也不递增。
(其它 Silicon 机器的耗时都由 TileLaserTableBase + 激光供能决定,不写死。)
GUI / Container 配对
| GUI 类 | Container 类 | 配对处 |
|---|---|---|
buildcraft.silicon.gui.GuiIntegrationTable |
buildcraft.silicon.gui.ContainerIntegrationTable |
silicon/SiliconGuiHandler.java:58 |
自动化
ISidedInventory.getAccessibleSlotsFromSide 返回 SLOTS(:264),
即 0–9 共 10 个槽全部可被漏斗 / 管道访问(0–8 输入 + 9 输出)。
网络封包
走 TileLaserTableBase 基类同步。无独立的 Silicon 专用封包 ID。