兼容门控
[!INFO] 源码:
ProjectBlue.java:71,87-89、ProjectBlueClient.java:32、MFRIntegration.java
Project Blue 通过 BaseMod.integrateWith(modId, className) 做软依赖。它检查 Loader.isModLoaded(modId),存在才实例化对应 BaseIntegration 并跑生命周期;不存在则整个类不加载。
门控总表
| 依赖 modid | 门控类型 | 集成类 | 存在时启用 | 缺失时行为 |
|---|---|---|---|---|
MineFactoryReloaded |
服务端 preInit | gcewing.projectblue.mfr.MFRIntegration |
注册 Rednet Adaptor 方块、GUI、合成 | 方块不存在(不是"不可用",是根本没有) |
NotEnoughItems |
客户端构造时 | gcewing.projectblue.nei.NEIIntegration |
注册配方/用途处理器 | 正常游戏,只是 NEI 里看不到自定义配方 |
MFR 的 integrate 调用在 preInit(ProjectBlue.java:71);NEI 的调用在 ProjectBlueClient 构造函数(ProjectBlueClient.java:32),即只在客户端尝试。
硬依赖(缺失会直接崩溃)
这三项在 postInit 里用 findItem 解析,找不到就抛 RuntimeException:
| 查找 modid | 物品名 | 用途 |
|---|---|---|
ProjRed|Illumination |
projectred.illumination.fixture |
itemPartFixture — 制作 miniatureLamp 的原料 |
ForgeMicroblock |
microblock |
itemMicroPart — 制作 miniatureCover / 面板的原料 |
ForgeMicroblock |
sawStone |
itemStoneSaw — 全部自定义合成配方的锯 |
ProjectBlue.findItem 在 item 为 null 时直接 throw new RuntimeException("Can't find item ...")。所以 Project Red 是事实上的硬依赖 —— 缺失时 postInit 抛异常,mod 无法加载。
编译期依赖
dependencies.gradle:
api "com.github.GTNewHorizons:ProjectRed:4.12.37-GTNH:dev"
compileOnly "com.github.GTNewHorizons:NotEnoughItems:2.8.97-GTNH:dev"
compileOnly 'curse.maven:minefactory-reloaded-66672:2366150'
只有 ProjectRed 是 api(传递给下游),NEI 与 MFR 是 compileOnly。
源码级跨 mod 依赖
即使没有 integrate 调用,以下 import 也是编译期硬依赖:
| 包 | 来源 |
|---|---|
mrtjp.projectred.api.*、mrtjp.projectred.core.*、mrtjp.projectred.transmission.*、mrtjp.projectred.illumination.* |
Project Red |
codechicken.microblock.* |
ForgeMicroblock(Project Red 依赖) |
codechicken.multipart.*、codechicken.lib.* |
CodeChickenLib |
powercrystals.minefactoryreloaded.api.rednet.* |
MFR(软依赖,但已直接 import) |
codechicken.nei.api.API |
NotEnoughItems(软依赖,但已直接 import) |
⚠️ 后两条值得注意:MFR 与 NEI 虽然是软门控,但它们的 API 类被直接 import在主源码里。由于 MFRIntegration / NEIIntegration 只在对应 mod 存在时才被 Class.forName 加载,运行时不会触发 NoClassDefFoundError;但这意味着整合类无法在缺少依赖的环境下被单独加载。
无 coreMod / 无 mixin / 无 AT
gradle.properties 中相关字段全部为空或 false:
| 字段 | 值 |
|---|---|
accessTransformersFile |
(空) |
usesMixins |
false |
mixinPlugin |
(空) |
coreModClass |
(空) |
containsMixinsAndOrCoreModOnly |
false |
本 mod 不做任何字节码变换。