原版方块 addon(AddonVanillaTiles)

基本信息

属性 值
文件 src/main/java/net/darkhax/wawla/addons/vanillamc/AddonVanillaTiles.java(157 行)
实现接口 mcp.mobius.waila.api.IWailaDataProvider
注册方式 Wawla.java:44-45 无条件 IMC
目标 只有 3 个原版方块:BlockBeacon、BlockFurnace、BlockSkull
配置分类 Wawla-Blocks(8 个键)

它与 通用方块 addon 的区别是:后者注册在 Block.class 上做通用判定(采集/亮度/硬度),本类只针对 3 个原版方块做专用解析,且判据是 TileEntity 类型而非方块类型。

注册明细

目标类 Body NBT
BlockBeacon.class ✅ ✅
BlockFurnace.class ✅ ✅
BlockSkull.class ✅ ❌ 只注册了 body

⚠️ BlockSkull 缺 registerNBTProvider(:145-146 只有两行 body),但 getWailaBody 里读 data.getNBTData().hasKey("Owner")(:103)。若 WAILA 未从别处补上头颅的 NBT,owner 行会静默永不显示——这是三个目标里唯一一个 NBT 注册缺失的。

三种 TileEntity 的 HUD 行

判据全部用 data.getTileEntity() instanceof X,且都是 else if 链(信标 → 熔炉),但玩家头颅是独立的 if(:102),因此头颅可以和前两者同时出现(实际上不会)。

1. 信标(TileEntityBeacon)

从 NBT 读 Levels / Primary / Secondary(均为 int):

门控键 输出 附加条件
wawla.beacon.showLevels 信标等级: <Levels> —
wawla.beacon.showPrimary 主增益效果: <效果名> Primary > 0
wawla.beacon.showSecondary 副增益效果: <效果名> Secondary > 0

效果名走 StatCollector.translateToLocal(Potion.potionTypes[primary].getName())。

⚠️ Potion.potionTypes[primary] 是无边界检查的数组下标(:58 / :62)。Primary 来自 TileEntity 的 NBT,正常范围 0-27;若存档被破坏或被别的 mod 写入越界值,会抛 ArrayIndexOutOfBoundsException。

2. 熔炉(TileEntityFurnace)

门控键 输出 附加条件
wawla.furnace.burntime 燃烧时间: <N> 秒 BurnTime / 20 > 0
wawla.furnace.input 烧制物品: <名> X <数量> 潜行 且 Items[0] != null
wawla.furnace.fuel 燃料: <名> X <数量> 潜行 且 Items[1] != null
wawla.furnace.output 成品: <名> X <数量> 潜行 且 Items[2] != null

槽位下标 0/1/2 = 输入/燃料/成品,与原版 TileEntityFurnace 的内部顺序一致。

3. 玩家头颅(TileEntitySkull)

wawla.showHead 开启且 NBT 有 Owner 复合标签时,输出 主人: <名字>,名字经 NBTUtil.func_152459_a(tag.getCompoundTag("Owner")).getName() 解出(这是 1.7.10 里从 GameProfile 存储取名的标准做法)。

⚠️ 源码缺陷

缺陷 1:BlockSkull 缺 NBT provider(见上)

AddonVanillaTiles.java:145-146 只调用 registerBodyProvider。对比同文件 :134-135(信标)、:141-142(熔炉)都是 body + NBT 成对。

缺陷 2:Potion.potionTypes[] 无边界检查

AddonVanillaTiles.java:58 与 :62。与 Pixelmon 的 natureList[tag.getShort(...)] 是同一类问题。

缺陷 3:熔炉内容物读取可能 NPE

:79 的 Utilities.getInventoryStacks(data.getNBTData(), 3) 在 NBT 无 Items 键时返回 null,随后 furnaceStacks[0] 立即 NPE。空熔炉是常见状态。详见 工具类 的缺陷 2。

缺陷 4:熔炉槽位语义与通用方块 addon 重复但键名硬编码

通用方块 与本类都用 wawla.furnace.* 这 4 个键;Tinkers 里同样用到了这 4 个键但是硬编码字符串。三个 addon 共享同一套开关,耦合是隐式的。

相关条目