TileAutoWorkbench

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

注册信息

属性 值 来源
TileEntity 注册名 AutoWorkbench BuildCraftFactory.java:104
注册类 buildcraft.factory.TileAutoWorkbench 同上
所属 modid BuildCraft|Factory BuildCraftFactory.java:71
关联方块 Auto Workbench 方块 BuildCraftFactory.java:104 同块
是否配置门控 否(无条件注册) BuildCraftFactory.java:104

槽位数量与布局

真实结构是三个 SimpleInventory 用 InventoryConcatenator 拼接(factory/TileAutoWorkbench.java:53-71):

段 声明 槽数 内部名 拼接后索引
inputInv :54 9 "Auto Workbench" 0–8(输入 / 燃料)
resultInv :53 1 "Auto Workbench" 9(产物,SLOT_RESULT)
craftMatrix InventoryCrafting 9(3×3) — 10–18

拼接语句 :71:

private final IInventory inv = InventoryConcatenator.make().add(inputInv).add(resultInv).add(craftMatrix);

总槽数 = 9 + 1 + 9 = 19。

⚠️ getSizeInventory() 却只返回 10(:221-222), SLOTS 也只是 createSlotArray(0, 10)(:48,即 0–9)—— 自动化侧(IInventory 契约)只暴露 0–9 共 10 槽,3×3 合成矩阵(10–18)不计入。

SLOT_RESULT = 9(:45)指的就是拼接后索引 9,即 resultInv 那一格。

GUI 侧的槽位绑定(factory/gui/ContainerAutoWorkbench.java:30-55)

顺序 槽 类型 绑定的内部索引
1 客户端结果预览 SlotUntouchable(craftResult, 0, 93, 27) 不占 tile 索引(:35)
2 产物 SlotOutput(tile, SLOT_RESULT, 124, 35) 9(:36)
3 3×3 合成矩阵 SlotWorkbench(tile, 10 + x + y*3, 30 + x*18, 17 + y*18) 10–18(:39)
4 输入 / 燃料 Slot(tile, x, 8 + x*18, 84),循环 x < 9 0–8(:44)
5 玩家热键栏 Slot(inventoryplayer, ...) y=115 —(:49)
6 玩家主背包 Slot(inventoryplayer, ...) y=173 —(:54)

⚠️ GUI 里 3×3 矩阵画在合成矩阵索引(10–18),而 0–8 是输入 / 燃料区—— 把 0–8 说成「合成矩阵的内部槽」即为索引错位。

处理速率 / 耗时(本篇核心常量)

factory/TileAutoWorkbench.java:45-47:

常量 值 换算 含义
CRAFT_TIME 256 256 tick = 12.8 秒 合成一件物品所需时间
UPDATE_TIME 16 16 tick = 0.8 秒 网络更新节流周期

⚠️ CRAFT_TIME 语义:Auto Workbench 是配方驱动的——它按玩家预置的 「物品 → 物品」配方表自动合成,而不是原版的即时 3×3 合成。 所以 256 tick 是按配方逐件执行的节拍。

⚠️ UPDATE_TIME = 16 是网络更新间隔,不是合成时间; 两者量纲相同(tick)但语义完全不同,不要混写。

GUI / Container 配对

GUI 类 Container 类 配对处
buildcraft.factory.gui.GuiAutoCrafting buildcraft.factory.gui.ContainerAutoWorkbench factory/FactoryGuiHandler.java:38 / :74

ContainerAutoWorkbench(factory/gui/ContainerAutoWorkbench.java:30-54)槽位: 不可触碰的客户端合成结果预览(:35)→ 产物槽 9(:36)→ 3×3 矩阵(:39) → 机器缓冲槽 0–8(:44)→ 玩家热键栏 9(:49)→ 玩家主背包 27(:54)。

自动化

SLOTS(0–9,共 10 个)与 getSizeInventory() 返回的 10 一致,可被漏斗 / 管道访问; 3×3 合成矩阵的 9 个槽(10–18)不对自动化开放。

网络封包

SafeTimeTracker(UPDATE_TIME) 控制的周期同步(factory/TileAutoWorkbench.java:47,updateEntity() 在 :297)。 无独立的 Factory 专用封包 ID。

相关条目