跳到正文
烈焰甘蔗Wiki

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
浏览全部模组