TilePackager
事实基准:
/Users/evlos/a/mirror/BuildCraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | buildcraft.TilePackager |
BuildCraftSilicon.java:159 |
| 注册类 | buildcraft.silicon.TilePackager |
同上 |
| 所属 modid | BuildCraft|Silicon |
BuildCraftSilicon.java:63 |
| 关联方块 | Packager 方块,方块类 BlockPackager,注册名 packagerBlock |
BuildCraftSilicon.java:77 声明、:108-110 注册 |
| 父类 | TileBuildCraft(不是 TileLaserTableBase) |
silicon/TilePackager.java:27 |
| 实现接口 | ISidedInventory |
同上 |
| 是否配置门控 | 否(无条件注册) | BuildCraftSilicon.java:159 |
⚠️ 注册名 buildcraft.TilePackager 是不带包名的历史短名(其余 Silicon 机器都带
net.minecraft.src.buildcraft.factory. 前缀)。
槽位数量与布局(两个独立 SimpleInventory)
silicon/TilePackager.java:72-73:
public SimpleInventory inventoryPublic = new SimpleInventory(12, "Packager", 64);
public SimpleInventory inventoryPattern = new SimpleInventory(9, "Packager", 64);
| 字段 | 槽数 | 单槽上限 | 用途 |
|---|---|---|---|
inventoryPublic |
12 | 64 | 真实物品(输入 0–8、燃料/包装 9、输出 11) |
inventoryPattern |
9 | 64 | 打包模板(3×3 的「包装样式」) |
槽位逐个说明(GUI 侧 silicon/gui/ContainerPackager.java:23-55)
| 槽位 | GUI 坐标 | 类型 | 用途 |
|---|---|---|---|
| 9 | (124, 7) |
SlotValidated |
燃料 / 能量输入(最靠上,单独一排) |
| 0–8 | 8 + x*18, 84 |
Slot |
9 格输入区(3×3 一行排开) |
| — | 30 + x*18, 17 + y*18 |
SlotPackager |
9 个模板槽,操作的是 inventoryPattern(独立于上面 12 槽) |
| 11 | (123, 59) |
SlotOutput |
输出 |
| 玩家热键栏 | 8 + x*18, 115 + y*18 |
Slot |
9 槽 |
| 玩家主背包 | 8 + x*18, 173 |
Slot |
27 槽 |
源码缺陷:槽 10 的注册被注释掉了
silicon/gui/ContainerPackager.java:42 原文是注释:
// addSlotToContainer(new Slot(tile, 10, 108, 31));
⚠️ 槽 10 存在于 inventoryPublic(12 槽的索引 10),但从未被加进 Container。
后果:inventoryPublic 的 12 个槽里,槽 10 在 GUI 中不可见、不可点、Shift+点击排序也覆盖不到
(容器实际只绑了 0–9 与 11,共 11 个方块槽)。
对照 silicon/TilePackager.java:70:
private static final int[] SLOTS = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11 };
SLOTS 数组恰好 11 个元素,且不含 10 —— 这与上面被注释的槽 10 相互印证:
自动化侧(ISidedInventory)也跳过槽 10(:492 返回 SLOTS)。
⚠ 「把注释掉的代码当注册」是这套 wiki 的已知幻觉模式。 若按
new SimpleInventory(12, ...)直接断言「12 个可见槽位」即为错误; 实际可见并参与自动化的方块槽是 11 个(0–9、11),槽 10 是一个内部保留槽。
处理速率 / 耗时
updateEntity()(silicon/TilePackager.java:92)。
⚠️ 本类没有写死「N tick 一次」的节拍常量;
包装速度取决于投入的燃料与 Requirement 匹配逻辑(内部类 Requirement,silicon/TilePackager.java:29,
带 getStack() / decrStackSize(int amount))。
具体速率不写死数字。
GUI / Container 配对
| GUI 类 | Container 类 | 配对处 |
|---|---|---|
buildcraft.silicon.gui.GuiPackager |
buildcraft.silicon.gui.ContainerPackager |
silicon/SiliconGuiHandler.java:86 |
网络封包
走 TileBuildCraft 基类的 NBT 同步(两个 SimpleInventory 都随 NBT 落盘)。
无独立的 Silicon 专用封包 ID。