WAWLA

[!INFO] Git Commit: 8d6099a | Tag: 1.3.3-GTNH | Updated: 2026-01-01

WAWLA(modid wawla,全称 What Are We Looking At)不是内容 mod,也��是 WAILA 的 fork。它是 Darkhax 写的、依附于 WAILA 运行的插件(addon)包:自己在游戏里不注册任何方块、物品、实体、方块实体、配方、指令或热键,全部功能都是"往 WAILA 的 HUD 上追加信息行",以及一小部分直接挂 Forge 事件的物品悬浮提示。

mcmod.info 的自述是:“Greatly expands upon the functionality of Waila by providing many new forms of information along with bridging support between Waila and many other popular minecraft mods.”

⚠️ 最重要的结论:wawla / waila / wailaplugins / wailaharvestability 的关系

任务简报把 wawla 描述为"WAILA 的 fork、本体还是另一个东西",这三种猜测全部错误。核实结论:

wawla 是一个 WAILA 插件(addon)包,与 wailaplugins、wailaharvestability 属于同一类;它依赖 WAILA 但不是 WAILA。真正的 WAILA 本体是分类 waila。

源码里的四条硬证据:

证据 位置
@Mod(dependencies = "required-after:Waila") —— 单向硬依赖 WAILA Wawla.java:19
全部 9 处 FMLInterModComms.sendMessage("Waila", "register", ...) —— 通过 IMC 把自己的 provider 交给 WAILA Wawla.java:40-78
13 个 addon 类实现的都是 WAILA 的 API 接口 mcp.mobius.waila.api.IWailaDataProvider / IWailaEntityProvider 全部 addon 包
README 把 ProfMobius(WAILA 作者)列为独立致谢对象,并写明 “Required Mods: WAILA” README.md

若 WAWLA 是 WAILA 的 fork,不可能存在这种"分离的署名 + Required Mods"关系,也不可能需要用 IMC 把自己注册进 WAILA。

四个仓库的定位对照:

分类 是什么 与 WAILA 的关系 规模
waila WAILA 本体 —— HUD 框架、配置、渲染、provider 注册表 就是 WAILA 178 文件
wawla(本页) Darkhax 的 WAILA 插件包 —— 一组 provider 实现 required-after:Waila,通过 IMC 注册 18 文件
wailaplugins WAILA 插件(上游社区维护) 同上 —
wailaharvestability WAILA 插件(只做采集判定) 同上 —

⚠️ 命名极易混淆:wawla 目录名看起来像 “WAWLA 版 WAILA”,但它与 waila 是依赖方与被依赖方,不是同族。判断一个目录是不是 WAILA 本体,要看 @Mod 注解的 dependencies 与 IMC 目标,不能看目录名。

基本信息

属性 值
仓库目录 wawla(GTNewHorizons fork,上游 Darkhax-Minecraft/WAWLA)
modid wawla(Constants.java:7,@Mod(modid = Constants.MODID))
显示名 What Are We Looking At(Constants.java:8)
@Mod 类 net.darkhax.wawla.Wawla(Wawla.java:14-20)
根包 net.darkhax.wawla
硬依赖 required-after:Waila(唯一声明的依赖)
acceptableRemoteVersions "*"(不需要服务端也装)
Minecraft 1.7.10 / Forge 10.13.4.1614
源码规模 18 个 .java,共 2388 行
版本 tag 1.3.3-GTNH(Constants.VERSION 是构建期占位符 GRADLETOKEN_VERSION)
事件处理器 2 个(preInit / init),无 postInit
内容维度 setting(4 条)+ addon(10 条),共 14 个条目
配置文件 无自己的 .cfg(55 个开关全部注册进 WAILA 的配置)
依赖库 com.gtnewhorizon.gtnhlib(VillagerNames)、org.apache.commons.lang3、llibrary(更新检查)

⚠️ 本 mod 没有什么(对任务简报的核心修正)

简报预设了"方块/物品/实体注册、config、API 库、handler 机制核心库"等多种可能。源码核实后,除 handler 与 config 外全部为零:

维度 检索命令(在 /Users/evlos/a/mirror/wawla/ 下) 结果
方块注册 grep -rn "registerBlock|new Block(|Block.register" 0 命中
物品注册 grep -rn "registerItem|new Item(|Item.register|new BlockItem" 0 命中
实体注册 grep -rn "registerModEntity|registerEntity|EntityRegistry|extends Entity" 0 命中
TileEntity 注册 grep -rn "registerTileEntity|GameRegistry.register" 0 命中
世界生成 / 维度 / 群系 / 结构 grep -rn "IWorldGenerator|WorldGen|BiomeGen|registerDimension|WorldProvider|addGenerator" 0 命中
多方块 grep -rn "Multiblock|IMultiblock|Controller" 0 命中
附魔注册 grep -rn "Enchantment\b.*=|registerEnchantment|EnchantmentHelper" 0 命中(lang 里的 description.enchantment.* 是文本,不是注册)
Buff / 成就 grep -rn "PotionEffect|registerPotionEffect|Achievement" 0 命中
配方 / 矿词典 grep -rn "addRecipe|ShapedRecipes|ShapelessRecipes|OreDictionary" 0 命中
指令 grep -rn "addChatCommand|ICommand|CommandBase" 0 命中
热键 grep -rn "KeyBinding|registerKeyBinding|keybinding" 0 命中
自身配置 grep -rn "new Configuration|@Config|ForgeConfigSpec" 0 命中(55 个开关走 WAILA 的 addConfig)
AT / mixin / coremod accessTransformersFile、coreModClass、mixins.*.json 不存在
网络 SimpleNetworkWrapper|NetworkRegistry 0 命中(只有 1 条 llibrary 更新检查 IMC)
唯一 @Mod 注解 grep -rn "@Mod(" 仅 1 处:Wawla.java:14

因此 block、item、entity、multiblock、enchantment、dimension、keybinding、potioneffect、biome、structure、achievement、item-effect 共 12 个标准维度一个都不建。

全部 14 个条目

机制与设定(4 个)

条目 内容
架构与 WAILA 接入方式 @Mod 注解的 4 项证据、9 条 IMC 注册全表、13 个 addon 类的注册状态、反射取类机制、双向代理
配置项 7 个分类、55 个注册开关全表、代码/lang/注册三方一致性审计、4 个具体缺陷
工具类 Utilities 的 15 个静态方法逐个说明 + 6 处源码缺陷(含 getInventoryStacks 返 null、round(x,0) 空操作)
随包资源 5 个资源文件、mcmod.info 全文、4 份 lang 的翻译缺陷(zh_CN 有 49 个未翻译英文值)

WAILA addon(10 个)

条目 内容
通用方块 addon AddonGenericTiles —— 注册在 Block.class,采集判定/亮度/硬度/挖掘进度/床状态 5 组 HUD 行
通用实体 addon AddonGenericEntities —— 注册在 Entity.class,装备/护甲/宠物主人/成年期/产仔冷却/待命
原版方块 addon AddonVanillaTiles —— 只有信标/熔炉/玩家头颅 3 个原版方块
原版实体 addon AddonVanillaEntities —— 马/村民/僵尸/女巫/TNT/物品展示框 6 类实体
物品悬浮提示 addon AddonGenericTooltips —— ⚠️ 唯一不走 IMC 的功能,附魔书描述/护甲值/附魔点数
Pixelmon 集成 实体 8 键 + 栗子树 2 键;EnumNature/EnumGrowth 反射转字符串数组
神秘时代集成 精华罐/魔镜/脑缸/基座/法杖基座/解构台,9 个键
Tinkers 集成 晾干架/半砖熔炉/地雷伪装;唯一反射调用 Method,并提供跨 addon 的 canHarvest
JewelryCraft 集成 熔炉/成型台 4 键;⚠️ modid 不一致 + 注册粒度错误双重失效
未接线的 addon developer ×2 + morph 三个类,228 行死代码,零注册零调用

架构速览

@Mod("wawla")  Wawla                       ← dependencies = "required-after:Waila"
  │
  ├─ preInit → ProxyClient.preInit()      ← 仅客户端
  │    ├─ EVENT_BUS.register(AddonGenericTooltips)   ← 绕过 WAILA 的唯一功能
  │    ├─ 反射缓存 PlayerControllerMP.g → Utilities.currentBlockDamage
  │    └─ llibrary update-checker IMC
  │
  └─ init → 向 "Waila" 发 9 条 "register" IMC        ← 全部注册逻辑
       ├─ 无条件 4 条:VanillaEntities / VanillaTiles / GenericEntities / GenericTiles
       └─ 条件 5 条:pixelmon(×2) / Thaumcraft / TConstruct / Jewelrycraft

ProxyCommon 与 ProxyClient 的 init() 都是空的;两者的 postInit() 也都存在但 Wawla 类里没有 postInit 事件处理器,永远不会被调用(死代码)。

55 个配置开关(7 个分类)

分类 键数 控制什么
Wawla-General 10 通用方块 HUD:采集/工具/等级/进度/亮度/硬度/抗性/床
Wawla-Entity 10 实体 HUD:装备/护甲/宠物 ×4/马 ×2/职业/TNT
Wawla-Blocks 8 信标 ×3/熔炉 ×4/玩家头颅
Pixelmon 10 神奇宝贝 ×8 + 栗子树 ×2
Thaumcraft 9 罐 ×3/魔镜 ×2/缸/法杖 ×2/基座/解构
Tinkers' Construct 4 地雷伪装/晾干 ×2/半砖熔炉
Jewelrycraft 4 熔融量/未熔量/熔化时间/冷却

全表见 配置项。默认只有 wawla.info.showHardness 与 wawla.info.showResistance 是 false,其余 53 个为 true。

跨 mod 集成矩阵

目标 mod modid 判定 编译期依赖 GTNH 是否加载 状态
Waila required-after ✅ mcp.mobius.waila.api ✅ 正常
HungerOverhaul isModLoaded ⚠️ 类层面 import IguanaConfig 视整合包 有缺陷(见下)
Thaumcraft isModLoaded("Thaumcraft") ❌ 反射 ✅ 正常,1 个显示缺陷
TConstruct isModLoaded("TConstruct") ❌ 反射 + 2 个 Method ✅ ⚠️ 初始化顺序缺陷
Pixelmon isModLoaded("pixelmon") ❌ 反射 ❌ 整合包不含 未加载
JewelryCraft ⚠️ "Jewelrycraft" / "Jewelrycraft2" 不一致 ❌ 反射 ✅ 装了但不生效 ⚠️ 双重失效
Morph ⚠️ Wawla.java 里完全没有判定 ❌ 反射 — ❌ 代码存在但未接线

⚠️ 源码缺陷与矛盾汇总

以下均为原文现状,未修正。完整的行级说明见各条目。

功能性缺陷(会导致显示错误或崩溃)

# 位置 现象
1 AddonThaumcraftTiles.java:153 地元素充能因整除永远显示 0.0 —— 6 个要素里只有 terra 写成 / 100(整型),其余 5 个是 / 100f
2 AddonTinkersTiles.java:27 isEnabled 在 try 之前置 true —— 反射失败时 isEnabled 仍为真而 Class 字段为 null,canHarvest(:205/:218)NPE;该方法被 AddonGenericTiles.java:59 无条件调用 → TConstruct 版本不匹配会导致通用方块 HUD 大面积崩溃
3 AddonGenericEntities.java:77-78 childDurationMultiplier 被赋成 breedingTimeoutMultiplier —— 装了 HungerOverhaul 时幼年体剩余时间用错倍率
4 Utilities.java:145 + 6 个调用点 getInventoryStacks 无 Items 键时返回 null,而 AddonVanillaTiles.java:79、AddonThaumcraftTiles.java:125/:138、AddonTinkersTiles.java:69/:96/:133 全部直接下标访问 → 空熔炉/空基座/空晾干架/未伪装地雷会 NPE
5 AddonVanillaEntities.java:65 TNT 引信显示 tick 而非秒 —— 未做 / 20,与同文件其它时间显示不一致(熔炉做了 /20)
6 AddonPixelmonEntities.java:66/:80 natureList[tag.getShort(...)] 无边界检查 —— NBT 驱动的数组下标可为负或越界 → AIOOBE
7 AddonVanillaTiles.java:58/:62 Potion.potionTypes[primary] 无边界检查 —— 同类问题
8 AddonPixelmonTiles.java:118 product.substring(9, length - 5) 硬编码魔数切片 —— 注册名不匹配即抛 StringIndexOutOfBoundsException,全 mod 最脆的字符串处理
9 AddonThaumcraftTiles.java:99 DimensionManager.getProvider(dimId) 返回 null 未处理 → NPE
10 AddonJewelrycraftTiles.java:109-112 Item.getItemById 返回 null 未处理 → new ItemStack(null,...) 抛异常;getByte("Count") 为负时也抛
11 AddonPixelmonEntities.java:88-89 loadItemStackFromNBT 返回 null 未处理 → NPE
12 Utilities.java:264 UUID.fromString 对非法 UUID 抛异常,而 AddonGenericEntities.java:64-65 只校验 length() > 0、无 try/catch
13 AddonThaumcraftTiles.java:153 附近 6 个要素都用 (float)(int / 100f) 强转,暴露 float 精度误差(如 0.01f 显示为 0.009999999)

配置与注册缺陷

# 位置 现象
14 AddonTinkersTiles.java:118 vs :180-183 wawla.tinkers.showBurnTime 被 getConfig 读取但从未 addConfig 注册 —— 配置界面里没有这个开关;同行还额外硬编码要求 "wawla.furnace.burntime",双重门控 → 燃烧时间行正常配置下永不显示
15 Wawla.java:75 vs AddonJewelrycraftTiles.java:24 modid 不一致(Jewelrycraft / Jewelrycraft2)—— 两处必须同时为真,故该 addon 在两种 modid 下都不生效
16 AddonJewelrycraftTiles.java:139-142 把 TileEntity 类传给 registerBodyProvider —— WAILA 期望 Block 类,故两个 provider 不会被调用(对比 Thaumcraft/Tinkers 都先 Class.forName 出 Block 类)
17 AddonTinkersTiles.java:184-187 classFurnaceSlab 缺 registerNBTProvider,但 handler 读 getNBTData().getInteger("Fuel")
18 AddonVanillaTiles.java:145-146 BlockSkull 缺 registerNBTProvider,但 handler 读 hasKey("Owner")
19 AddonTinkersTiles.java:122/:135/:141/:147 硬编码复用 AddonVanillaTiles 的 4 个熔炉配置键 —— 隐式耦合,原版 addon 若被移除则静默失效
20 Wawla.java:19 dependencies 只声明 Waila —— 未声明实际需要的 HungerOverhaul(且是类层面 import,isModLoaded 守卫拦不住 NoSuchFieldError)、Thaumcraft、TConstruct、Jewelrycraft

死代码与不一致

# 位置 现象
21 3 个类共 228 行(占全 mod 9.5%) AddonDeveloperEntities / AddonDeveloperTiles / AddonMorphEntities 零注册零调用 —— Wawla.java 的 9 条 IMC 无一指向它们,也无任何 new 实例化点。Morph 集成因此完全不存在
22 Wawla.java:31 isDevMode 的赋值被注释掉 —— Utilities.isDevMode 恒为 false,导致 AddonGenericTooltips.java:75 的调试行也是死代码
23 ProxyCommon.java:13 / ProxyClient.java:31 postInit() 存在但 Wawla 类无对应事件处理器 —— 永不调用
24 Utilities.java:154 越界保护写错对象 —— if (!(i > list.tagCount())) 恒为真(死代码),且就算改成 i < inventory.length 也拦不住真正越界的 Slot 值
25 Utilities.java:105 round(value, 0) 是空操作 —— places > 0 才取整,AddonPixelmonTiles.java:113 正是这样调的,成长百分比会显示 83.333336%
26 AddonThaumcraftTiles.java:76/:80/:136 三处 if (true && ...) 调试残留 —— :76/:80 的 aspect != null 判定也是死代码(getString 永不返回 null)
27 AddonPixelmonEntities.java:149-150 natureList/sizeList 赋值在 registerBodyProvider 之后 —— 顺序倒置
28 AddonThaumcraftTiles.java:229-240 8 个 TileEntity 字段是实例字段、4 个 Block 字段是 static,同批字段两套生命周期
29 AddonGenericEntities.java:18 类层面 import IguanaConfig —— isModLoaded 只保护字段访问不保护类加载
30 AddonGenericTooltips.java:66 instanceof 在 null 检查之前 —— !(x instanceof T) && x != null 逻辑上安全(instanceof 对 null 返回 false)但反模式
31 AddonPixelmonEntities.java:59 等 用 compareByClass(忽略大小写比类名字符串)而非 isInstance —— 不匹配子类;对比 AddonTinkersTiles.canHarvest 用 isInstance 是对的
32 4 份 lang tooltip.wawla.item 在 zh_CN/ru_RU(7,26) 与 es_MX(13,51) 重复定义
33 4 份 lang wawla.pixelmon.useSneak 全部缺失(grep -c useSneak *.lang 4 个文件全为 0)—— 该键已注册且被读取,配置界面显示裸键名
34 es_MX.lang:94 / ru_RU.lang:48 option.wawla.showhead 大小写不匹配(代码用 wawla.showHead)→ 这两种语言拿不到翻译;zh_CN 是对的
35 es_MX.lang:126 option.wawla.villagerZombie 是死键 —— 已被 wawla.showProfession 取代
36 zh_CN.lang:62 option.wawla.showEnchDesc 是死键 —— 既不注册也不引用
37 zh_CN.lang 49 个值完全未翻译 —— 含 JewelryCraft 整段 8 键、Special Mobs 6 键、More Swords Mod 19 键等
38 Constants.java:15 / Utilities.java:239 FACTORY 字段与 getClass(String) 零引用 —— 死代码
39 ProxyClient.java:19-22 更新检查指向上游 Darkhax-Minecraft/WAWLA,不是 GTNewHorizons 的 fork
40 mcmod.info dependencies 只有 mod_MinecraftForge、没有 Waila;"parent": "" 不声明父子关系 —— 判定 WAWLA 身份的唯一依据是 @Mod 注解与 9 条 IMC

未接线的 3 个 addon(228 行死代码)

类 意图 是否注册
AddonDeveloperEntities 潜行显示实体类名 + 按住疾跑键显示完整 NBT ❌
AddonDeveloperTiles 潜行显示方块/TE 类名 + 按住疾跑键显示完整 NBT ❌
AddonMorphEntities registerOverrideEntityProvider —— 让 WAILA 显示变形后的实体 ❌

AddonMorphEntities 是三者中唯一实现了 WAILA 实体覆盖 provider 的类,走 PlayerPersisted/MorphSave/morphData/nextState/entInstanceTag 深层 NBT 路径读取变形目标 id。它看起来是一个完成度很高但从未接线的集成——GTNH 玩家装了 Morph 也得不到任何变形 HUD 支持。详见 未接线的 addon。

相关条目