TileAssemblyTable

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

注册信息

属性 值 来源
TileEntity 注册名 net.minecraft.src.buildcraft.factory.TileAssemblyTable BuildCraftSilicon.java:146-147
注册类 buildcraft.silicon.TileAssemblyTable 同上
所属 modid BuildCraft|Silicon BuildCraftSilicon.java:63
关联方块 BlockLaserTable,meta = 0 silicon/BlockLaserTable.java:77-78
父类 TileLaserTableBase silicon/TileAssemblyTable.java:37
实现接口 IInventory / IFlexibleCrafter / ICommandReceiver 同上
是否配置门控 否(无条件注册) BuildCraftSilicon.java:147

槽位数量与布局

silicon/TileAssemblyTable.java:111-113:

public int getSizeInventory() {
    return 12;
}

→ 12 个方块槽(索引 0–11)。

⚠️ 但 GUI 只绑定了 12 个槽里的前 12 个,且没有单独的结果槽。 silicon/gui/ContainerAssemblyTable.java:26-30:

for (int l = 0; l < 4; l++) {              // 4 行
    for (int k1 = 0; k1 < 3; k1++) {        // 每行 3 个
        addSlotToContainer(new Slot(table, k1 + l * 3, 8 + k1 * 18, 36 + l * 18));
    }
}

即 4 行 × 3 列 = 12 个输入槽,索引 0–11,全部是普通 Slot(无 SlotOutput、无 SlotUntouchable)。

⚠️ 注意这里是 3 宽 × 4 高(竖向 4×3),不是 4 宽 × 3 高。 循环 l < 4 是行、k1 < 3 是列,索引 k1 + l*3 也印证了「每行 3 个」。

产物不占方块槽——装配台通过 IFlexibleCrafter 直接把成品塞进机器输出缓冲, 不提供 GUI 取件槽。

玩家背包:热键栏 9 槽(:32-36,y=123)+ 主背包 27 槽(:38-40,y=181)。

装配配方体系

装配台消费的是 AssemblyRecipeManager 里的装配配方(core/recipes/AssemblyRecipeManager.java), addRecipe(String id, int energyCost, ItemStack output, Object... input)(:23)—— 即每条配方自带一个 energyCost。

⚠️ 配方输入用 Object... 可变参数混合物品与流体,不是纯物品合成格。

处理速率 / 耗时

updateEntity() 注释写明 WARNING: run only server-side, see canUpdate()(silicon/TileAssemblyTable.java:78)。

⚠️ 本类没有写死「N tick 一次」的节拍常量; 每次装配的能耗由配方的 energyCost 字段决定(每个配方不同),速度受激光供能限制,不断言数字。

GUI / Container 配对

GUI 类 Container 类 配对处
buildcraft.silicon.gui.GuiAssemblyTable buildcraft.silicon.gui.ContainerAssemblyTable silicon/SiliconGuiHandler.java:44

网络封包

实现 ICommandReceiver,走 BuildCraft 命令封包(NetworkUtils 通道)。 无独立的 Silicon 专用封包 ID。

相关条目