WDMla 门控与依赖策略

基本信息

属性 值
modid(宿主) wdmla(WDMla.java:43)
FML 声明依赖 after:Waila; required-after:gtnhlib;(WDMla.java:28)
声明的第二 modid Waila(同一 jar 内的第二个 @Mod,Waila.java:37)
coremod(容器 modid) 无——gradle.properties 的 coreModClass = 为空
Mixin 未启用——usesMixins = false,仓库内无任何 mixins.*.json
插件门控机制 @WDMlaPlugin(dependencies = …) + Mods 枚举

功能

WDMla 有一套双重依赖模型,理解它是正确使用本 mod 的前提。

一、硬/软依赖(@Mod 层)

WDMla.java:28 的声明字符串为 " after:Waila;" + " required-after:gtnhlib;",展开后是:

依赖 级别 modid 说明
Waila 软(after) Waila 同一 jar 内自带,装在同一 jar 天然满足
GTNHLib 硬(required-after) gtnhlib 提供 @Config 配置框架与 GTNHClientCommand

gtnhlib 对应 Maven 坐标 com.github.GTNewHorizons:GTNHLib:0.9.54:dev,在 dependencies.gradle 中以 api(...) 声明,即发布依赖。

二、插件门控(@WDMlaPlugin 层)

7 个集成插件通过 dependencies 声明所需 modid,由 PluginScanner 在 preInit 用 Loader.isModLoaded 检查,未满足则整个插件跳过(PluginScanner.java:36-40、65-75):

插件 声明的 modid
建筑师工艺 ArchitectureCraft
林业 Forestry
潘马斯农场 harvestcraft
饥饿机制调整 HungerOverhaul
铁箱子 ironchest
自然 Natura
储物抽屉 StorageDrawers

其余 5 个插件(core、universal、vanilla、harvestability、debug)无依赖,恒定加载。

三、版本/存在性门控(Mods 枚举)

与前两者不同,Mods 枚举(api/Mods.java)用于类级的版本条件控制,且只在采集判定路径上使用:

枚举常量 modid 额外判据
CREATIVEBLOCKS CreativeBlocks 无
GREGTECH gregtech !Loader.isModLoaded("gregapi")
IGUANATWEAKS IguanaTweaksTConstruct 无
TCONSTRUCT TConstruct 无
NOTENOUGHITEMS NotEnoughItems 版本 ≥ 2.7.29-GTNH
FORGEMULTIPARTS ForgeMultipart 无

三条判据值得注意:

  • GREGTECH 的谓词是否定式:检测到 gregapi 就判定为不加载(Mods.java:21)。这是为了在装有 GregAPI 的整合包里避开 GregTech 采集兼容类。
  • NOTENOUGHITEMS 用 new DefaultArtifactVersion("2.7.29-GTNH").compareTo(version) <= 0 比较 getProcessedVersion()(Mods.java:24)。
  • 注释解释了设计意图:不加载旧版本 mod 可以避免类名问题,对 GTNH 之外的移植尤其有帮助(Mods.java:33-36)。

Mods.isLoaded() 的结果被缓存在 loaded 字段,只算一次(Mods.java:48-72)。判据不满足时会打一条 info 日志:Skipped loading %s Compatibility classes due to incompatibility. Loaded version: %s(Mods.java:57-63)——该日志只打印版本号,不打印被判据拒绝的原因,排查时需自行对照上表。

数值

Mods 枚举的消费点只有一处逻辑分支——采集能力插件 的 registerClient,据此条件注册 TinkersHarvestHandler / IguanaHarvestHandler / GregTechHarvestHandler(HarvestabilityPlugin.registerClient),以及 ClientProxy.postInit 中对应的 ProxyTinkersConstruct.init() / ProxyIguanaTweaks.init() / ProxyGregTech.init()(ClientProxy.java:63-71)。

CREATIVEBLOCKS、NOTENOUGHITEMS、FORGEMULTIPARTS 三个常量在本仓的 @WDMlaPlugin 与 registerClient 中没有对应的条件注册分支;它们的读取点集中在 impl/ 与 overlay/ 内部。

编译期依赖 ≠ 运行时依赖

dependencies.gradle 中的 compileOnly 项(Hunger Overhaul、harvestcraft、TinkersConstruct、Natura、ironchest、StorageDrawers、ForestryMC、ArchitectureCraft)只是编译时用来解析被引用的类,运行时是否存在由上面的 dependencies / Mods 判据决定。NotEnoughItems 声明为 devOnlyNonPublishable,仅开发环境使用。

相关条目