Hidden Icon Items
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | ae2wct:infinityBoosterIcon、ae2wct:boosterBG |
| 源码类 | ItemInfinityBooster(第二次实例化)、ItemBoosterBGIcon |
| 注册位置 | items/ItemEnum.java:9、:12 |
| lang 名称 | 无 —— en_US.lang 中没有这两项的名称键 |
ItemEnum 共 5 个常量,CommonProxy.registerItems() 对全部 5 个调用 registerItem。其中只有 3 个是玩家可见物品;本条目记录另外 2 个内部图标物品。
ae2wct:infinityBoosterIcon
BOOSTER_ICON("infinityBoosterIcon", new ItemInfinityBooster().hasEffect(true)),
与 Infinity Booster Card 共用 ItemInfinityBooster 类,但是独立的第二个实例,注册名不同(infinityBoosterIcon)。
⚠️ 缺陷:从未调用 setUnlocalizedName
对比同一枚举中的另外两项:
| 枚举常量 | 构造调用 | 是否设 unlocalized name |
|---|---|---|
BOOSTER_CARD |
new ItemInfinityBooster().setUnlocalizedName("infinityBoosterCard") |
是 |
BOOSTER_ICON |
new ItemInfinityBooster().hasEffect(true) |
否 |
MAGNET_CARD |
new ItemMagnet().setUnlocalizedName("magnetCard") |
是 |
ItemInfinityBooster 构造器(:25-28)只设了 setTextureName 与 setMaxStackSize(1),没有设 unlocalized name。Forge 1.7.10 的 Item#getUnlocalizedName() 在未显式设置时会退化为 "item." + getTextureName(),即得到形如 item.ae2wct:infinityBoosterCard 的未翻译原始键,而非正常显示名。
后果被掩盖:该物品被显式加入 NEI 隐藏列表(ConfigHandler.java:136-137),玩家在正常游戏流程中看不到它——但这掩盖了命名缺陷,不代表命名正确。
ae2wct:boosterBG
WCT_BOOSTER_BG_ICON("boosterBG", new ItemBoosterBGIcon());
ItemBoosterBGIcon(items/ItemBoosterBGIcon.java)是纯 GUI 背景图标物品:
| 特征 | 值 | 行号 |
|---|---|---|
setUnlocalizedName |
"boosterBG" |
:16 |
setTextureName |
ae2wct:boosterBG |
:17 |
| 最大堆叠 | setMaxStackSize(0) |
:18 |
| 图标存储 | public static IIcon[] boosterIcon(长度 1) |
:13、:19 |
setMaxStackSize(0) 是 Forge 1.7.10 中标记物品不可堆叠/不可获取的惯用法,故该物品无法被正常合成或捡取。
它被登记进 GUI 物品描述表(implementation/WCTItems.java:11):
this.WCTBoosterBGIcon = new WCTItemDescription(ItemEnum.WCT_BOOSTER_BG_ICON.getStack());
并在 ClientProxy 中被 NEI 隐藏(ClientProxy.java:22):
codechicken.nei.api.API.hideItem(new ItemStack(ItemEnum.WCT_BOOSTER_BG_ICON.getItem(), 1));
⚠️ getIcon() 的 @Override 被注释掉
ItemBoosterBGIcon.java:24-28:
@SideOnly(Side.CLIENT)
// @Override
public static IIcon getIcon() {
return boosterIcon[0];
}
@Override 被注释。该方法声明为 static,与 Item 的实例方法 getIconFromDamage(int) 签名不同,本就无法构成覆写。注释掉 @Override 只是让代码能编译,没有修复任何东西——这属于死代码痕迹,不是功能缺陷。
覆盖统计
| 项目 | 数量 |
|---|---|
registerItem 调用 |
5 |
| 玩家可见物品 | 3 |
| 内部图标物品 | 2 |
| 有 lang 显示名 | 3 |
若按「注册调用数 = 5」统计物品覆盖,会把 2 个不可获得的图标物品算成内容缺口。
相关条目
- Infinity Booster Card - 与
infinityBoosterIcon同类 - Wireless Crafting Terminal
- Magnet Card