Waila
[!INFO] Git Commit:
f998f9e| Updated: 2026-10-02
Waila(What Are We Looking At)是 GTNH 上 WAILA 的分叉版,也是整条 WAILA 家族的核心库。它不注册任何方块、物品、实体或配方 —— 全部功能是一个纯客户端 HUD 渲染框架加上一套供其他 mod 调用的注册 API。WAILAPlugins、WAILAHarvestability 等插件型附属都把本仓库提供的 waila 模块作为编译期依赖复用(dependencies.gradle:10-12 明确 exclude ... module: 'waila')。
已核实:本仓库共 178 个 .java 文件,其中 GameRegistry、registerBlock、registerItem、extends Block、extends Item、addRecipe、CreativeTabs 的匹配数全部为 0。因此方块 0 个 / 物品 0 个 / 实体 0 个 / 配方 0 个是可复现的结论,而非遗漏。
modid 为 Waila(大写 W,读自 @Mod(modid = "Waila"),src/main/java/mcp/mobius/waila/Waila.java:39,与 gradle.properties:10 的 modId = Waila 一致)。资源目录却是小写 assets/waila/。注意 Waila 检测 WAILAPlugins 时用的是全小写 wailaplugins(utils/LoadedMods.java:10),两者大小写规则不同。
运行机制
Waila 把 HUD 拆成 Head(物品名)/ Body(信息)/ Tail(mod 名) 三区(api/IWailaBlock.java:17-20)。客户端每个 tick 做射线检测取得目标方块或实体,再把上下文填进 accessor 交给一串 provider,provider 逐个改写 tip 行,最后用 OverlayRenderer 绘制。涉及 TileEntity / 实体私有数据的行需经由 5 个封包的自定义通道在服务端生成 NBT 再同步回客户端。
第三方 mod 通过 FML 的 IMC 通道发一条 register 消息即可接入:Waila 在 FMLLoadCompleteEvent 后用反射调用 addon 的静态方法,并把 IWailaRegistrar 实例作为唯一参数传入(server/ProxyServer.java:111-134)。无需 compile-time 依赖 Waila 即可注册。
附属关系
| 维度 | 说明 |
|---|---|
| 硬依赖 | NotEnoughItems [1.0.4.0,)(Waila.java:42;dependencies.gradle:4) |
| 可选集成 | 20 个内置 addon 模块(BuildCraft、IC2、Thaumcraft、Railcraft、Thermal 系等) |
| 依赖它的 | WAILAPlugins(modid 小写 wailaplugins)、WAILAHarvestability |
| 客户端版本门禁 | 低于 1.7.3 的客户端被 @NetworkCheckHandler 拒绝加入(Waila.java:55、Waila.java:130-137) |
API 列表
- IWailaRegistrar - 唯一注册入口接口,24 个方法,覆盖 provider / decorator / 配置项 / 渲染器
- IMC 注册入口 - 第三方 addon 接入 Waila 的实际通道,含回调方法签名约束与失败降级
- IWailaDataProvider - 方块 / TileEntity 文本回调契约,5 个抽象 + 2 个 default(高级 Body)
- IWailaEntityProvider - 实体侧对偶接口,5 个抽象方法,无 default
- 数据访问器 - 4 个只读上下文接口(Data / Entity / Common / FMP)字段对照
- Tooltip 渲染器 API - 往 HUD 插入图形内容的扩展点契约
- 方块装饰器 - 世界内 3D 装饰(高亮框等)的方块侧与 FMP 侧接口
- 配置 API -
getConfig读取优先级与服务端server_forcing强制机制 - Tooltip 控制符 -
¤/¥/¦扩展字符集、8 个解析 Pattern 与TipList标签列表
配置列表
- 通用配置项 -
general分区 17 个键,含posx/posy/scale与 5 个颜色项默认值 - 模块配置项 - 13 个分区 36 个配置 key(22 个服务端可远程强制)
- 键位设置 - 6 个 Waila 键位,默认小键盘 0–4 与左 Shift
渲染列表
- HUD 渲染管线 - 2 个 tick 事件驱动的渲染流程、可见性判定、GL 状态管理
- 内置 Tooltip 渲染器 - 10 个
TTRender*类,其中 7 个已注册、3 个未接线
集成列表
指令列表
- /dumphandlers 指令 - 服务端排障指令,把已注册 provider 打到控制台,8 个段
已知死代码
以下类存在于源码目录但在仓库内 0 处实例化 / 0 处调用,不构成对外能力,本 wiki 不将其计为可用功能:
| 类 | 证据 |
|---|---|
SecretRoomsModule(addons/secretrooms/) |
grep -rn "SecretRoomsModule.register()" src/ → 0 匹配;ProxyServer.java:6-32 无其 import |
TTRenderIcon |
grep -rn "new TTRenderIcon()" src/main/java → 0 匹配 |
TTRenderString |
grep -rn "new TTRenderString()" src/main/java → 0 匹配 |
TTRenderTrueTyper |
grep -rn "new TTRenderTrueTyper()" src/main/java → 0 匹配 |
另有两处已声明但未接线的常量:Constants.BIND_SCREEN_ENCH(utils/Constants.java:5)在 KeyEvent.java 中无对应 KeyBinding;IWailaRegistrar.registerSyncedNBTKey(api/IWailaRegistrar.java:85-86)带 @Deprecated,注释声明将在 MC 1.8 移除。