捆绑皮革
[!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] 被使用。