内置集成
基本信息
| 属性 | 值 |
|---|---|
| 源码目录 | src/main/java/mcp/mobius/waila/addons/ |
| 模块目录数 | 21 |
| 实际注册模块数 | 20 |
| 注册入口 | ProxyServer.registerMods()(ProxyServer.java:40-109) |
| 加载标志 | mcp.mobius.waila.utils.LoadedMods(LoadedMods.java) |
Waila 在服务端与客户端共用的 ProxyServer.registerMods() 中注册全部内置集成(ProxyServer.java:40,由 Waila.postInit → proxy.registerHandlers() 触发前后的 loadComplete 调用,见 Waila.java:76-86)。每个模块的 register() 内部自行判断宿主 mod 是否加载。
功能
22 个已注册模块
前 2 个是原版方块 handler(位于 addons/vanillamc/),第 3–22 个是 20 个 addon 模块。
| 顺序 | 模块 | 注册行 | 附带的 handler |
|---|---|---|---|
| 1 | HUDHandlerVanilla(VanillaMC) |
ProxyServer.java:42 |
— |
| 2 | HUDHandlerFurnace(VanillaMC) |
ProxyServer.java:43 |
— |
| 3 | BCModule(BuildCraft) |
ProxyServer.java:46 |
TankFluidHandler |
| 4 | IC2Module(IndustrialCraft 2) |
ProxyServer.java:49 |
HUDHandlerTEGenerator |
| 5 | ThaumcraftModule |
ProxyServer.java:52 |
HUDHandlerIAspectContainer |
| 6 | GadomancyModule(Thaumcraft 附属) |
ProxyServer.java:55 |
— |
| 7 | EnderStorageModule |
ProxyServer.java:58 |
HUDHandlerStorage |
| 8 | GravestoneModule |
ProxyServer.java:61 |
HUDHandlerGravestone |
| 9 | TwilightForestModule |
ProxyServer.java:64 |
TwilightForestGenericOverride |
| 10 | ThermalExpansionModule |
ProxyServer.java:67 |
8 个 handler |
| 11 | ThermalDynamicsModule |
ProxyServer.java:70 |
FluiductFluidHandler |
| 12 | ETBModule(Engineer’s Toolbox) |
ProxyServer.java:73 |
HUDHandlerSocket |
| 13 | ProjectRedModule |
ProxyServer.java:76 |
3 个 handler |
| 14 | ExtraUtilitiesModule |
ProxyServer.java:79 |
DrumFluidHandler |
| 15 | OpenBlocksModule |
ProxyServer.java:82 |
TankFluidHandler |
| 16 | RailcraftModule |
ProxyServer.java:85 |
TankFluidHandler |
| 17 | StevesCartsModule |
ProxyServer.java:88 |
4 个 handler |
| 18 | CarpentersModule(Carpenter’s Blocks) |
ProxyServer.java:91 |
HUDCarpentersBlocksTE |
| 19 | HarvestcraftModule(Pam’s HarvestCraft) |
ProxyServer.java:94 |
HUDHandlerPamCrop |
| 20 | MagicalCropsModule |
ProxyServer.java:97 |
HUDHandlerMagicalCrops |
| 21 | StatuesModule |
ProxyServer.java:100 |
HUDHandlerStatues |
| 22 | AgricultureModule |
ProxyServer.java:103 |
HUDHandlerCrop |
未接线的 1 个(dead code)
SecretRoomsModule 目录(addons/secretrooms/,含 SecretRoomsModule.java 与 HUDTileEntityCamo.java)不在 ProxyServer.registerMods() 的调用列表中,ProxyServer.java:6-32 的 import 列表也没有 SecretRoomsModule。
证据:grep -rn "SecretRoomsModule.register()" src/ → 0 匹配。同法校验其余 20 个模块均为 1 匹配。故该目录在本分支中为未接线的死代码,不构成对外集成能力。
ForgeMultipart(FMP)
条件注册(ProxyServer.java:105-108):
if (LoadedMods.FORGE_MULTIPART) {
HUDHandlerFMP.register();
DecoratorFMP.register();
}
判定式 Loader.isModLoaded("ForgeMultipart")(LoadedMods.java:7)。FMP 通路使用 IWailaFMPProvider / IWailaFMPDecorator 与 IWailaFMPAccessor 这套独立接口,其字段见 数据访问器。
NEI 分支
客户端 registerHandlers() 中,NEI 存在时注册 NEIHandler,否则注册原版 VanillaTooltipHandler(ProxyClient.java:40-44):
if (LoadedMods.NEI) { NEIHandler.register(); }
else { MinecraftForge.EVENT_BUS.register(new VanillaTooltipHandler()); }
判定式 Loader.isModLoaded("NotEnoughItems")(LoadedMods.java:8)。NEI 同时是 @Mod 声明的唯一硬依赖:dependencies = "after:NotEnoughItems@[1.0.4.0,)"(Waila.java:42),且在 dependencies.gradle:4 中为 implementation 依赖。
WAILAPlugins 探测
LoadedMods.WAILA_PLUGINS = Loader.isModLoaded("wailaplugins")(LoadedMods.java:10)—— 注意此处 modid 为全小写,与 Waila 自身的 Waila(大写 W)不同。对应的 Gradle 依赖为 runtimeOnlyNonPublishable,并排除 waila 模块本身(dependencies.gradle:10-12),即 WAILAPlugins 复用本仓库提供的核心库而非各自捆绑一份。
核心 provider 注册
Waila 自身为所有方块注册 HUDHandlerBlocks 的 Head 与 Tail,为所有实体注册 HUDHandlerEntities 的 Head / Body / Tail(ProxyClient.java:46-51)。addon 只需在此基础上追加。
数值
| 项 | 值 | 来源 |
|---|---|---|
addons/ 子目录数 |
21 | 目录清点 |
| 已注册 addon 模块数 | 20 | ProxyServer.java:42-103 |
| 未注册 addon 模块数 | 1(SecretRooms) | grep 0 匹配 |
| 条件注册集成数 | 1(FMP,2 个 handler) | ProxyServer.java:105-108 |
| 客户端二选一集成 | NEI / 原版 tooltip | ProxyClient.java:40-44 |
LoadedMods 标志数 |
4 | LoadedMods.java:7-10 |
交互
各集成声明的配置开关见 模块配置项,对应 HUD 绘制见 HUD 渲染管线。NBT 同步通道见 网络协议。
相关条目
- 模块配置项 - 13 个分区 36 个配置 key
- 网络协议 - TileEntity / 实体的 NBT 同步封包
- IWailaDataProvider - addon 实现集成的模板
- IMC 注册入口 -
wailaplugins等外部 addon 的接入通道