原版实体 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上