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 个不可获得的图标物品算成内容缺口。

相关条目