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

渲染列表

集成列表

  • 内置集成 - 21 个 addon 目录中 20 个已注册模块清单,1 个为死代码
  • 网络协议 - 5 个封包的判别器分配与请求-应答配对

指令列表

已知死代码

以下类存在于源码目录但在仓库内 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 移除。