第三方面模组集成

基本信息

属性 值
依赖方式 全部软依赖,运行时反射检测
检测 API Loader.isModLoaded / Loader.instance().isModLoaded
活跃集成数 3(ComputerCraft、MineFactory Reloaded、Thaumcraft)
死代码集成 2(NEI、Morph)
公共接口 1(IMC setSolutionColor)

功能

本 mod 的跨模组集成以反射 + 软依赖方式实现,检测入口只有 2 处(grep -rn 'Loader.isModLoaded' src/):

位置 检测的 mod
Handler/PeripheralProvider.java:22 ComputerCraft
Entity/ModEntitys.java:25 MineFactoryReloaded

Thaumcraft 与其他 mod 的检测使用 MixinBuilder.addRequiredMod(Mixins.java:39),不走 Loader。

活跃集成

ComputerCraft(1.7.10)

反射注册外设 Provider(Handler/PeripheralProvider.java:21-30):

if (Loader.isModLoaded("ComputerCraft")) {
    Class clazz = Class.forName("dan200.computercraft.api.ComputerCraftAPI");
    Method m = clazz.getDeclaredMethod("registerPeripheralProvider",
            Class.forName("dan200.computercraft.api.peripheral.IPeripheralProvider"));
    m.invoke(null, new PeripheralProvider());
}

类上标注 @Optional.Interface(iface = "dan200.computercraft.api.peripheral.IPeripheralProvider", modid = "ComputerCraft")(:20),确保软依赖安全。

3 个外设方块(PeripheralProvider.getPeripheral,:33-38):

TileEntity 方块
TileEntityCreativePlayerInterface 创造模式玩家接口
TileEntityOnlineDetector 在线侦测器
TileEntityNotificationInterface 通知接口

getPeripheral 上的 @Optional.Method(modid = "ComputerCraft")(:31)保证无 CC 时方法体不被加载。

反射失败时 RandomThings.postInit 捕获异常并打 WARN 日志(RandomThings.java:139-144),不会崩溃。

MineFactory Reloaded

4 个实体加入 Safari Net 黑名单(Entity/ModEntitys.java:25-30):

实体
EntitySpirit
EntitySoul
EntityReviveCircle
EntityHealingOrb

EntityBloodmoonCircle 不在黑名单中。

注册同样走反射(Handler/ModCompability/MFR/MFRRegistry.java:9-18):

Class<?> registry = Class.forName("powercrystals.minefactoryreloaded.MFRRegistry");
Method reg = registry.getMethod("registerSafariNetBlacklist", Class.class);
reg.invoke(registry, blacklistedEntity);

Thaumcraft

通过 Mixin 加速**神秘树叶(Magical Leaves)**的衰减(Mixins.java:37-41):

THAUMCRAFT_FAST_LEAVE_DECAY(new MixinBuilder()
        .addCommonMixins("MixinBlockMagicalLeaves")
        .addRequiredMod(TargetedMod.THAUMCRAFT)
        .setPhase(Phase.LATE)
        .setApplyIf(() -> VanillaChanges.FASTER_LEAVEDECAY));

三重条件:需要 Thaumcraft + VanillaChanges.FasterLeaveDecay 开启 + 在 LATE 阶段应用。

矿物辞典协同(非特定 mod)

ModCompHandler.postInit 把其他 mod 注册的 obsidianRod 全部并入本 mod 的 stickObsidian(Handler/ModCompHandler.java:10-17):

ArrayList<ItemStack> rods = OreDictionary.getOres("obsidianRod");
for (ItemStack is : rods) {
    OreDictionary.registerOre("stickObsidian", is);
}

这使本 mod 的黑曜石棒配方(物品收集器、生物群系画刷、灵魂之剑)能吃到异构模组的黑曜石棒。

死代码集成

NEI —— 处理器存在但从未注册

Handler/ModCompability/NEI/ 目录下有两个类:

类 内容
NEIRandomThingsConfig implements IConfigureNEI(NEIRandomThingsConfig.java:6)
ImbuingStationRecipeHandler extends TemplateRecipeHandler(ImbuingStationRecipeHandler.java:22)

NEIRandomThingsConfig 在构造函数中实例化 handler(:10),但该类本身从未被实例化 —— 全仓搜索(不限文件类型)只命中它自己的声明行:

grep -rn 'NEIRandomThingsConfig' . --exclude-dir=.git
# → ./src/.../NEIRandomThingsConfig.java:6:public class NEIRandomThingsConfig implements IConfigureNEI {

同时全仓 grep -rn '@NEIPlugin' 结果为 0。结论:NEI 集成在当前版本不可用,激素药水酿造台的配方不会在 NEI 中显示。

Morph —— 空类

Handler/ModCompability/Morph/DemorpherHandler.java 全文只有 3 行:

package lumien.randomthings.Handler.ModCompability.Morph;

public class DemorpherHandler {
}

全仓 grep -rn 'DemorpherHandler' 只命中这一处声明。结论:Morph 集成完全未实现。

公共接口

IMC setSolutionColor

RandomThings.imcMessages 处理唯一的 IMC 动作(RandomThings.java:183-198):

if (action.equals("setSolutionColor")) {
    NBTTagCompound nbt = m.getNBTValue();
    int biomeID = nbt.getInteger("biomeID");
    int color = nbt.getInteger("color");
    ItemBiomeCapsule.biomeColors.put(biomeID, color);
}

其他 mod 可通过发送 setSolutionColor IMC 修改生物群系胶囊的群系颜色表。NBT 键为 biomeID 与 color。

Mixin 列表

本 mod 使用 14 个 Mixin,由 GTNH 的 gtnhmixins 库加载(com.gtnewhorizon.gtnhmixins.builders.IMixins,Mixins.java:5-6)。清单定义在枚举 Mixins 中(Mixins.java:16-50):

组 阶段 Mixin 应用条件
MINECRAFT(客户端) EARLY MixinEntityRenderer、GuiAccessor、MixinItem、MixinRenderGlobal 无条件
MINECRAFT(通用) EARLY EntityAccessor、EntityLivingAccessor、PotionAccessor、MixinSpawnerAnimals、WorldServerAccessor、WorldAccessor 无条件
BLOCK_LEAVES_BASE EARLY MixinBlockLeavesBase VanillaChanges.FASTER_LEAVEDECAY
THAUMCRAFT_FAST_LEAVE_DECAY LATE MixinBlockMagicalLeaves Thaumcraft + FASTER_LEAVEDECAY
GUIVIDEOSETTINGS EARLY MixinGuiVideoSettings VanillaChanges.LOCKED_GAMMA
WORLD EARLY MixinWorld ConfigBlocks.wirelessLever(恒 false)

合计 14 个,与 Mixins/early/(13 个文件)+ Mixins/late/(1 个文件)一致。

Mixin 清单 JSON 位于 src/main/resources/mixins.RandomThings{,.early,.late}.json,minVersion 为 0.8.5-GTNH,target 为 @env(DEFAULT)。这三个 JSON 只声明包名,不含 mixin 数组 —— 实际清单由上面的 Java 枚举提供。

Mixins.java:11-15 的注释明确警告:该文件加载极早,不得引用任何其他 mod 的类,Reference.java 除外(且仅限字符串用途)。

数值

数值名 值
活跃集成 3(CC / MFR / Thaumcraft)
死代码集成 2(NEI / Morph)
CC 外设方块 3
MFR 黑名单实体 4(另有 1 个未加入)
Mixin 总数 14
条件 Mixin 4(含 1 个恒 false)
IMC 动作 1
Loader.isModLoaded 调用点 2

相关条目