跨模组集成
基本信息
Draconic Evolution 通过 Loader.isModLoaded(...) 探测 19 个不同的 modid 字符串(对应 18 个模组,其中 gregtech / gregtech_nh / gregapi 是同一生态的三个不同字符串),全部为软依赖——@Mod 注解的 dependencies 只声明了 after: 与 required-after:gtnhlib(DraconicEvolution.java:23-31),没有任何 required-after: 指向下列模组。
依赖探测清单
| 被探测模组 ID | 探测位置 | 用途 |
|---|---|---|
gtnhlib |
ModHelper.java:42 |
硬依赖,由 @Mod(dependencies = ... required-after:gtnhlib@[0.9.47,);) 声明 |
TConstruct |
ModHelper.java:38 |
巨剑(cleaver)检测,影响负面效果屏蔽 |
Avaritia |
ModHelper.java:39 |
无限装备剑检测 |
gregtech_nh |
ModHelper.java:40 |
GregTech 检测(applyModDamageAdjustments) |
appliedenergistics2 |
ModHelper.java:41 |
AE2 浮动物品实体检测 |
hodgepodge |
ModHelper.java:43 |
兼容性补丁 |
backhand |
ModHelper.java:44 |
副手支持 |
Automagy |
DraconicEvolution.java:59 |
合成配方分支 |
EnderIO |
DraconicEvolution.java:60 |
合成配方分支 |
ComputerCraft |
CCOCIntegration.java:24 |
外设(peripheral)支持 |
OpenComputers |
CCOCIntegration.java:25 |
驱动器(driver)支持 |
dreamcraft |
CraftingHandler.java:26、GUITeleporter.java:39 |
配方分支 + 末影珍珠数量 |
ThermalDynamics |
CraftingHandler.java:850 |
配方分支 |
IronChest |
CraftingHandler.java:1001 |
配方分支 |
Baubles |
InventoryUtils.java:30 |
饰品栏支持 |
Thaumcraft |
DraconicArmor.java:240, 338、WyvernArmor.java:208 |
护甲神秘度减免 / 揭示之瞳 |
Forestry |
DraconicArmor.java:343, 359, 367, 376 |
养蜂人 / 自然学徒套装 |
gregtech |
DraconicArmor.java:380、WyvernArmor.java:276 |
危害防护(Hazmat);判定为 gregtech 存在且 gregapi 不存在 |
gregapi |
同上 | 用于排除旧版 GregTech API |
ModHelper.java:40探测的是gregtech_nh(GT5 官方 modid),而护甲类里探测的是gregtech(旧版 modid)并额外排除gregapi;而ModHelper.getHazmatArmorConfigKey()的@Optional.Method又用的是gregtech_nh(ModHelper.java:107)。同一文件内三处判定用了两种不同字符串,引用时不可互相推断。
ComputerCraft / OpenComputers
integration/computers/CCOCIntegration.java 为两类电脑模组提供同一套外设接口 IDEPeripheral:
| 模组 | 注册方式 | 适配器 |
|---|---|---|
| ComputerCraft | ComputerCraftAPI.registerPeripheralProvider(new DEPeripheralProvider())(CCOCIntegration.java:29-31) |
integration/computers/cc/CCAdapter.java |
| OpenComputers | Driver.add(new OCAdapter())(CCOCIntegration.java:33-35) |
integration/computers/oc/DEManagedPeripheral.java |
两者的方法都标注了 @Optional.Method(modid = ...)(CCOCIntegration.java:28, 32),因此对应模组缺失时不会崩溃。
初始化调用点:CommonProxy.java:160 CCOCIntegration.init();
NotEnoughItems
NEI 集成位于 integration/nei/,共 6 个类:
| 类 | 作用 |
|---|---|
DENEIGuiHandler |
DE 机器的 GUI 配方处理器 |
IMCForNEI |
向 NEI 发送 IMC 消息(配方覆盖等) |
NEIDraconicevolutionConfig |
NEI 侧的配置项 |
ReactorNEIHandler |
反应堆合成处理器(本地化键 nei.recipe.reactor) |
CraftingChestOverlayHandler |
龙箱的 NEI 叠加显示 |
CraftingChestStackPositioner |
龙箱物品位置排布 |
NEI 在 @Mod 注解中以 after:NotEnoughItems 声明(DraconicEvolution.java:29),是软依赖;dependencies.gradle 中 NEI 仅为 compileOnly + runtimeOnly。
护甲专属集成
Thaumcraft
加载时护甲 tooltip 会追加神秘度减免百分比(DraconicArmor.java:240-247):
list.add(EnumChatFormatting.DARK_PURPLE + StatCollector.translateToLocal("tc.visdiscount") + ": " + ...);
并为头盔增加 GogglesOfRevealing(揭示之瞳)开关(DraconicArmor.java:338-342)。
Forestry
按护甲槽位分别授予套装加成开关(DraconicArmor.java:343-378):
| 槽位 | 开关 |
|---|---|
头盔(armorType == 0) |
ApiaristArmor + NaturalistArmor |
胸甲(armorType == 1) |
ApiaristArmor |
护腿(armorType == 2) |
ApiaristArmor |
靴子(armorType == 3) |
ApiaristArmor |
NaturalistArmor(自然学徒)只在头盔上可用。对应接口为 forestry.api.apiculture.IArmorApiarist 与 forestry.api.core.IArmorNaturalist(DraconicArmor.java import 段)。
GregTech
按 Hazard.values() 逐项生成危害防护开关(DraconicArmor.java:380-388),键名由 ModHelper.getHazmatArmorConfigKey(Hazard) 提供(ModHelper.java:108-118),共 7 类:
| GregTech 危害枚举 | 配置键 | 本地化键 | 中文名 |
|---|---|---|---|
ELECTRICAL |
HazmatElectrical |
button.de.HazmatElectrical.name |
电气危险防护 |
BIOLOGICAL |
HazmatBiological |
button.de.HazmatBiological.name |
生物危害防护 |
FROST |
HazmatFrost |
button.de.HazmatFrost.name |
霜冻危害防护 |
GAS |
HazmatGas |
button.de.HazmatGas.name |
气体危害防护 |
HEAT |
HazmatHeat |
button.de.HazmatHeat.name |
高温危害防护 |
RADIOLOGICAL |
HazmatRadiological |
button.de.HazmatRadiological.name |
辐射危害防护 |
SPACE |
HazmatSpace |
button.de.HazmatSpace.name |
缺失 |
实现接口为 gregtech.api.hazards.IHazardProtector,方法标注 @Optional.Method(modid = "gregtech_nh")(ModHelper.java:107)。
本地化缺失:
SPACE危害对应的button.de.HazmatSpace.name在zh_CN.lang与en_US.lang中都不存在(已用 Python 逐键核实)。该危害的护甲开关在游戏内会显示为原始键名。
dreamcraft 差异
GUITeleporter.java:39 用 dreamcraft 的存在与否改变末影珍珠槽位数量:
private static final int PEARLS_WITH_SHIFT = Loader.isModLoaded("dreamcraft") ? 64 : 16;
安装 dreamcraft 时每颗末影珍珠可放入的数量从 16 变为 64。这与 ConfigHandler 的 Teleporter Uses PerPearl(默认 1)是两个独立机制。
CraftingHandler.java:26 的 DREAMCRAFT_NOT_PRESENT 还会整块跳过一部分核心配方(CraftingHandler.java:28 的 if (DREAMCRAFT_NOT_PRESENT) { 包裹了龙芯与双足飞龙核心配方)。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 探测到的 modid 字符串数 | 19 | grep -rho 'isModLoaded("[A-Za-z0-9_]*")' src/main/java | sort -u |
| 对应模组数 | 18(gregtech / gregtech_nh / gregapi 属同一生态) |
同上 |
| 硬依赖数 | 1(gtnhlib) |
DraconicEvolution.java:23-31 |
| 电脑模组适配器数 | 2 | integration/computers/ |
| GregTech 危害类型数 | 7 | ModHelper.getHazmatArmorConfigKey() 的 switch 分支数,ModHelper.java:110-117 |
| dreamcraft 珍珠槽位数变化 | 16 → 64 | GUITeleporter.java:39 |