TileAdvancedCraftingTable
事实基准:
/Users/evlos/a/mirror/BuildCraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | net.minecraft.src.buildcraft.factory.TileAssemblyAdvancedWorkbench |
BuildCraftSilicon.java:148-151 |
| 注册类 | buildcraft.silicon.TileAdvancedCraftingTable |
同上 |
| 所属 modid | BuildCraft|Silicon |
BuildCraftSilicon.java:63 @Mod |
| 关联方块 | Laser 方块 家族中的 BlockLaserTable,meta = 1 |
silicon/BlockLaserTable.java:78-79 |
| 父类 | TileLaserTableBase |
silicon/TileAdvancedCraftingTable.java:50 |
| 实现接口 | IInventory / ILaserTarget / ISidedInventory |
同上 |
| 是否配置门控 | 否(BuildCraftSilicon.java:148 无条件调用) |
同上 |
⚠️ 注册名是 TileAssemblyAdvancedWorkbench,不是 TileAdvancedCraftingTable——
类名与注册名不一致。
槽位数量与布局
silicon/TileAdvancedCraftingTable.java:52:
private static final int[] SLOTS = Utils.createSlotArray(0, 24);
createSlotArray(0, 24) → 半开区间 [0, 24),即 24 个方块槽(0–23),SLOTS 长度为 24。
GUI 侧(silicon/gui/ContainerAdvancedCraftingTable.java:24-55):
| 槽位区 | 数量 | 类型 | 源码 |
|---|---|---|---|
| 合成矩阵 | 9(3×3) | SlotPhantom(幽幻槽,可放样但不放实物) |
:30 |
| 产物(只读预览) | 1 | SlotUntouchable |
:34 |
| 工作台建材 | 15(5×3) | Slot |
:38 |
| 工作台产物 | 9(3×3) | SlotOutput,索引 15 + x + y*3 → 15–23 |
:44 |
| 玩家热键栏 | 9 | Slot |
:50 |
| 玩家主背包 | 27 | Slot |
:55 |
方块侧合计 = 9 + 1 + 15 + 9 = 34 个可视槽位,其中 ISidedInventory 暴露给自动化的是 SLOTS(0–23,24 个)。
⚠️ 槽 0–8 是 SlotPhantom(幽幻槽),只存「模式」不存物品——
这与原版工作台语义不同:放入模板后机器照样合成,物品从建材区取。
能量门槛
silicon/TileAdvancedCraftingTable.java:59:
private static final int REQUIRED_POWER = 5000;
即需要 5000 单位的激光能量(ILaserTarget 契约)才启动一次合成。
这不是 RF,是激光能量(BuildCraft Silicon 的能量单位)。
处理速率 / 耗时
updateEntity()(silicon/TileAdvancedCraftingTable.java:224)。
⚠️ 本类没有「N tick 一次」这样的节拍常量;
耗时由 TileLaserTableBase 基类与激光供能速率决定,不断言具体数值。
GUI / Container 配对
| GUI 类 | Container 类 | 配对处 |
|---|---|---|
buildcraft.silicon.gui.GuiAdvancedCraftingTable |
buildcraft.silicon.gui.ContainerAdvancedCraftingTable |
silicon/SiliconGuiHandler.java:51 |
侧面搜索方向
silicon/TileAdvancedCraftingTable.java:53-58:
private static final EnumSet<ForgeDirection> SEARCH_SIDES = EnumSet.of(
ForgeDirection.DOWN,
ForgeDirection.NORTH,
ForgeDirection.SOUTH,
ForgeDirection.EAST,
ForgeDirection.WEST);
恰好 5 个方向:DOWN + 四面水平(NORTH/SOUTH/EAST/WEST),唯独不含 UP。
即机器只从下方与四侧拉取建材,不从上方抽取(避免与上方机器的输出槽抢物品)。
ISidedInventory 的 getAccessibleSlotsFromSide 契约在 :460 返回 SLOTS(0–23)。
网络封包
走 TileLaserTableBase 基类的 NBT / 封包同步。无独立的 Silicon 专用封包 ID。