原版实体 addon(AddonVanillaEntities)

基本信息

属性 值
文件 src/main/java/net/darkhax/wawla/addons/vanillamc/AddonVanillaEntities.java(153 行)
实现接口 mcp.mobius.waila.api.IWailaEntityProvider
注册方式 Wawla.java:40-43 无条件 IMC
目标 6 个原版实体类
配置分类 Wawla-Entity(4 个键)

6 个目标实体

实体 Body NBT HUD 行
EntityHorse ✅ ✅ 跳跃力、速度
EntityVillager ✅ ✅ 职业
EntityZombie ✅ ✅ 职业(僵尸村民时)
EntityWitch ✅ ✅ 职业(女巫)
EntityTNTPrimed ✅ ✅ 爆炸时间
EntityItemFrame ✅ ✅ 物品

⚠️ EntityZombie 与 EntityVillager 的 body provider 都注册了,但 EntityVillager 的职业行只在客户端计算(FMLCommonHandler.instance().getSide() == Side.CLIENT),因为村民名要走 com.gtnewhorizon.gtnhlib.client.VillagerNames.getVillagerName(profession)。服务端算不出名字。

HUD 行

马

门控键 输出 取值
wawla.horse.showJump 跳跃力: <4 位小数> horse.getHorseJumpStrength()
wawla.horse.showSpeed 速度: <4 位小数> horse.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue()

⚠️ 两行在 if 块内,是 else if 链的第一环(:48):当实体是马时,后面的 TNT 与物品展示框分支不会执行(合理,马不是那些类型)。但职业判断(:77)是独立的 if,所以马不会被判成有职业——正确。

TNT(EntityTNTPrimed)

wawla.tnt.fuse 开启时输出 爆炸时间: <Fuse>,读 data.getNBTData().getByte("Fuse")。

⚠️ 单位是 tick,不是秒——EntityTNTPrimed 的 Fuse NBT 是 1.7.10 里的 byte 型 tick 计数(默认 80),而 lang 的键名是 tooltip.wawla.tnt.fuse=爆炸时间(无"秒"字)。对比:同样的处理在 原版方块 的熔炉里做了 / 20 换算,这里没有。玩家看到的数字与真实剩余秒数相差 20 倍。

物品展示框(EntityItemFrame)

有展示物品时输出 物品: <显示名>,读 frame.getDisplayedItem().getDisplayName()。无条件显示,没有对应配置键(registerAddon 的 4 个 addConfig 里没有它)。

职业

门控 wawla.showProfession,三个分支:

实体 职业名
EntityVillager(客户端) description.villager.profession.<VillagerNames.getVillagerName(profession)>
EntityZombie 且 isVillager() description.villager.profession.zombie
EntityWitch description.villager.profession.witch

⚠️ 村民职业依赖 com.gtnewhorizon.gtnhlib.client.VillagerNames(GTNHLib),不是原版 API——这是 GTNH fork 相对上游 Darkhax 版本的改动。

⚠️ 三个分支是三个平行的 if 而非 else if(:81 / :88 / :96)。逻辑上互斥(女巫不是僵尸村民),所以无实际影响,但写法与本方法上半部分的 else if 链不一致。

⚠️ EntityZombie 的职业判断在服务端也会执行(没有 isClientOnly 守卫),但村民那支有——同一个 if 块内三种侧行为。

⚠️ 源码缺陷

缺陷 1:TNT 引信显示 tick 而非秒

AddonVanillaEntities.java:65 直接 getByte("Fuse"),未做 / 20。见上。

缺陷 2:data.getNBTData().getByte("Fuse") 无存在性检查

若 NBT 里没有 Fuse 键(NBTTagCompound.getByte 对不存在的键返回 0,不抛异常),会显示 爆炸时间: 0 而不是隐藏该行。

缺陷 3:职业分支的侧行为不一致(见上)

缺陷 4:物品展示框行无配置开关

tooltip.wawla.item=物品 这一行无法关闭,而同一个 if/else if 链里的马和 TNT 都有开关。

相关条目

  • 配置项 — Wawla-Entity 分类的 10 个键
  • 通用实体 addon — 同一分类下的兄弟实现,同样注册在 Entity.class 上