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。