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,仅开发环境使用。