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。