ItemMachine(机器方块的物品形式)
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | 随宿主方块,无独立注册名 |
| 变种方式 | ItemStack damage = MachinePackage.getMetadata() |
| 数量 | 6 个实例(每个 MachineGroup 一个) |
⚠️ 已订正(原文无注册名,且未说明是同一个类被复用 6 次):原文只说「继承自
ItemBlock」,读者会以为BinnieCore:machine之类存在一个统一物品。实际是ItemMachine随每次MachineGroup构造被new一次:block = new BlockMachine(this, blockName); GameRegistry.registerBlock(block, ItemMachine.class, blockName); // core/machines/MachineGroup.java:46-47
registerBlock(block, ItemClass, name)的第二个参数是物品类,Forge 会实例化ItemClass并把物品注册成与方块同名。所以 6 个ItemMachine实例分别叫:
| 实例 | 注册名 | 创建位置 |
|---|---|---|
| 1 | BinnieCore:storage |
core/machines/storage/ModuleStorage.java:18-21 |
| 2 | Genetics:machine |
genetics/machine/ModuleMachine.java:32 |
| 3 | Genetics:labMachine |
genetics/machine/ModuleMachine.java:35-38 |
| 4 | Genetics:advMachine |
genetics/machine/ModuleMachine.java:42-45 |
| 5 | ExtraTrees:machine |
extratrees/machines/ModuleMachine.java:19-23 |
| 6 | ExtraBees:alveary |
extrabees/apiary/ModuleApiary.java:29 |
源码里也不存在
binnie/item/ItemMachine.java之外的ItemMachine子类;ItemMachine.java是binnie/core/machines/ItemMachine.java下的唯一一个类,被 6 处复用。
功能
ItemMachine(binnie/core/machines/ItemMachine.java:7,extends ItemBlock)构造函数只做三件事(:10-14):
setMaxDamage(0)setHasSubtypes(true)associatedBlock = (IBlockMachine) block
getMetadata(int i) 直接透传(:17-19),即 damage 原样传给方块。getItemStackDisplayName(ItemStack) 返回 associatedBlock.getMachineName(itemstack.getItemDamage())(:22-25),最终落到 BlockMachine.getMachineName(int meta) → group.getPackage(meta).getDisplayName(),查不到包时返回字符串 "Unnamed Machine"(BlockMachine.java:77-80)。
✅ 已复核正确:原文「物品显示名称由
IBlockMachine.getMachineName(metadata)返回」完全正确(IBlockMachine接口方法由BlockMachine实现)。
使用方式
- 放置机器方块,damage 决定具体机器类型
- 创造栏子物品由方块的
getSubBlocks提供(BlockMachine.java:39-45),只列出pack.isActive()的机器
相关条目
- Machine - 宿主方块(含全部 6 个注册名与构造位置)
源码引用
binnie/core/machines/ItemMachine.java- 注册:
binnie/core/machines/MachineGroup.java:47