内置集成

基本信息

属性 值
源码目录 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 同步通道见 网络协议。

相关条目