捆绑皮革

[!INFO] 注册真源:ItemsBackpack.initItems()(de.eydamos.backpack.item.ItemsBackpack:31)

基本信息

属性 值
注册调用 GameRegistry.registerItem(boundLeather, "boundLeather")
实现类 de.eydamos.backpack.item.ItemLeather(与 鞣制皮革 共用同一个类)
最大堆叠 64
创造标签 原版 CreativeTabs.tabMaterials(材料页)
副类型 无 —— ItemLeather 没有 setHasSubtypes(true)
图标 backpack:leatherBound(ItemLeather.registerIcons 的 icons[0])

⚠️ 源码缺陷:注册名与 unlocalizedName 均为驼峰(ItemsBackpack.java:18)

public static final String UNLOCALIZED_NAME_BOUND_LEATHER = "boundLeather";

Forge 的物品名按惯例是全小写或下划线分隔,这里注册名与 unlocalizedName 都写成 boundLeather / tannedLeather(驼峰)。后果:

  • 物品标识符为 Backpack:boundLeather(modid 首字母大写 + 驼峰名), 在命令、NEI 搜索、其他模组代码里必须逐字匹配,写成 bound_leather 会取不到。
  • 语言文件键为 item.boundLeather.name / item.tannedLeather.name, 与同仓其它资源(assets/backpack/)无关,不存在自动转换。

这是 GTNH 1.7.10 模组里少见的命名风格(modid Backpack 本身也是大写开头), 跨模组互通时需要特别注意。

合成与用途

方向 配方
合成 "SSS" / "LSL" / "SSS",S = Items.string,L = Items.leather
冶炼 1 捆绑皮革 → 1 鞣制皮革,经验 0.1f(GameRegistry.addSmelting)

捆绑皮革本身不能直接放进背包:它是升级材料, 用作 工作台背包 与大背包的合成材料。

与 ItemLeather 类的双身份设计

boundLeather 与 tannedLeather 是两个不同的 Item 实例,却都是 ItemLeather。 该类靠实例身份而非 metadata 区分外观与名称:

public String getUnlocalizedName(ItemStack itemStack) {
    if (this == ItemsBackpack.boundLeather) {
        setUnlocalizedName(ItemsBackpack.UNLOCALIZED_NAME_BOUND_LEATHER);
    } else {
        setUnlocalizedName(ItemsBackpack.UNLOCALIZED_NAME_TANNED_LEATHER);
    }
    return super.getUnlocalizedName();
}

registerIcons 分配了 new IIcon[2] 两个图标,但 getIconFromDamage 只按 this == boundLeather 二选一,索引 1 在非本类实例上恒不可达。 icons 数组实际只有 [0] 被使用。

相关条目