兼容门控

[!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 不做任何字节码变换。