TileProgrammingTable
事实基准:
/Users/evlos/a/mirror/BuildCraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | net.minecraft.src.buildcraft.factory.TileProgrammingTable |
BuildCraftSilicon.java:156-158 |
| 注册类 | buildcraft.silicon.TileProgrammingTable |
同上 |
| 所属 modid | BuildCraft|Silicon |
BuildCraftSilicon.java:63 |
| 关联方块 | BlockLaserTable,meta = 4 |
silicon/BlockLaserTable.java:84-85 |
| 父类 | TileLaserTableBase |
silicon/TileProgrammingTable.java:28 |
| 实现接口 | IInventory / ISidedInventory / ICommandReceiver |
同上 |
| 是否配置门控 | 否(无条件注册) | BuildCraftSilicon.java:157 |
槽位数量与布局
方块侧只有 2 个槽(silicon/gui/ContainerProgrammingTable.java:26-27):
| 槽位 | 类型 | GUI 坐标 | 用途 |
|---|---|---|---|
| 0 | Slot |
(8, 36) |
输入(放入待编程的物品 / 机器) |
| 1 | Slot |
(8, 90) |
输出 / 编程结果 |
注意:这不是 3×3 合成格。 Programming Table 的输入输出是线性的一进一出。
玩家背包:热键栏 9 槽(:31,y = 123)+ 主背包 27 槽(:36,y = 181)。
编程区尺寸(本篇最关键的常量)
silicon/TileProgrammingTable.java:30-31:
public static final int WIDTH = 6;
public static final int HEIGHT = 4;
即 宽 6 × 高 4 = 24 格的「线路编程画布」, 供玩家用「程序方块(programming board)」在画布上画线路,驱动高级工作台等机器。
调用点 :171:options = currentRecipe.getOptions(WIDTH, HEIGHT);
⚠️ WIDTH/HEIGHT 是编程画布的格数,不是物品槽数量——
把这 24 误当成「24 个物品槽」是常见的语义写反。
处理速率 / 耗时
updateEntity() 注释明确写了 WARNING: run only server-side, see canUpdate()(silicon/TileProgrammingTable.java:49)——
即实际更新由 canUpdate() 门控,客户端不跑这段逻辑。
⚠️ 本类没有「N tick 一次」这样的节拍常量,耗时由 TileLaserTableBase 与激光供能决定,不断言数值。
GUI / Container 配对
| GUI 类 | Container 类 | 配对处 |
|---|---|---|
buildcraft.silicon.gui.GuiProgrammingTable |
buildcraft.silicon.gui.ContainerProgrammingTable |
silicon/SiliconGuiHandler.java:72 |
网络封包
实现 ICommandReceiver,走 BuildCraft 的命令封包(NetworkUtils 通道)。
无独立的 Silicon 专用封包 ID。