BlockLaserTable:一个方块、六个 meta、六个 TileEntity

事实基准:/Users/evlos/a/mirror/BuildCraft(master,minecraftVersion = 1.7.10)逐行读源码。 本篇是 Silicon 六个 TileEntity 的共同母方块,放在 tile/ 维度是因为它决定了 「哪个 TileEntity 出现在哪个 meta 上」——这是 Silicon 层最易搞错的一张映射表。

注册信息

属性 值 来源
注册变量 assemblyTableBlock BuildCraftSilicon.java:77
方块类 buildcraft.silicon.BlockLaserTable BuildCraftSilicon.java:104
所属 modid BuildCraft|Silicon BuildCraftSilicon.java:63 @Mod
注册方式 BCRegistry.INSTANCE.registerBlock(assemblyTableBlock, ItemLaserTable.class, false) BuildCraftSilicon.java:106

⚠️ 注册变量叫 assemblyTableBlock,但它一个方块承载 6 种机器。 按变量名以为「装配台专用」是错的。

meta → TileEntity 映射(silicon/BlockLaserTable.java:75-90,集合运算:恰好 6 个分支)

public TileEntity createTileEntity(World world, int metadata) {
    switch (metadata) {
        case 0: return new TileAssemblyTable();
        case 1: return new TileAdvancedCraftingTable();
        case 2: return new TileIntegrationTable();
        case 3: return new TileChargingTable();
        case 4: return new TileProgrammingTable();
        case 5: return new TileStampingTable();
    }
    return null;
}
meta 机器 TileEntity 类 是否有 GUI
0 Assembly Table(装配台) TileAssemblyTable 有
1 Advanced Crafting Table(高级工作台) TileAdvancedCraftingTable 有
2 Integration Table(集成台) TileIntegrationTable 有
3 Charging Table(充能台) TileChargingTable 有
4 Programming Table(编程台) TileProgrammingTable 有
5 Stamping Table(冲压台) TileStampingTable 有
其它 — return null(:90) —

⚠️ meta 为 6 及以上直接 return null——createTileEntity 返回 null 会让方块退化为无 TileEntity。

createNewTileEntity(:94-96)则恒返回 null,即本方块不支持「重新生成 TileEntity」。

GUI ID 复用

silicon/BlockLaserTable.java:67-69:

if (!world.isRemote) {
    int meta = world.getBlockMetadata(i, j, k);
    entityplayer.openGui(BuildCraftSilicon.instance, meta, world, i, j, k);
}

GUI ID 直接等于 meta 值(0–5),SiliconGuiHandler 再按这 6 个 ID 分派到 6 个 GUI/Container。 所以 Silicon 的 GUI ID 不是自增的,而是与方块 meta 一一对应。

⚠️ entityplayer.isSneaking() 时直接返回 false(:63-65), 即潜行右键不会开 GUI(潜行用于放置而不开界面)。

掉落与朝向

  • damageDropped(int par1) 恒返回入参本身(:99-101)→ 掉落物保留 meta,捡回来还是同一种机器。
  • 该方块不旋转:meta 是机器型号,不是朝向。

    ⚠ 「多方块几×几×几 / 控制器 / 可否旋转」是这套 wiki 头号易编造字段。 BlockLaserTable 不是多方块,是单方块 + meta 变体**;meta 表示型号而非朝向, 源码中没有任何结构尺寸常量,也没有旋转逻辑。

相关条目