软依赖与兼容层
基本信息
| 属性 | 值 |
|---|---|
| 加载检测类 | thaumic.tinkerer.common.compat.LoadedMods |
| 兼容类目录 | thaumic.tinkerer.common.compat(15 个 .java + 1 个 .orig 残留) |
| 检测到的模组 | 17 个(LoadedMods 中 17 个 boolean 常量) |
本页只收录软依赖(运行时可选)。硬依赖(dependencies.gradle 的 api)见分类页。
数值:LoadedMods 检测表
LoadedMods 的每个字段都是 public static final boolean = Loader.isModLoaded("<id>")(compat/LoadedMods.java)。注意此处用的是运行时 modid 字符串,与本模组自身 modid 大小写风格不同。
| 字段 | 检测的 modid | 字段 | 检测的 modid |
|---|---|---|---|
AE2Loaded |
appliedenergistics2 |
enderIOLoaded |
EnderIO |
EMTLoaded |
EMT |
enderStorageLoaded |
EnderStorage |
NEILoaded |
NotEnoughItems |
forgeMultipartLoaded |
ForgeMultipart |
TConstructLoaded |
TConstruct |
gt5uNHLoaded |
gregtech_nh |
aspectRecipeIndexLoaded |
aspectrecipeindex |
ic2Loaded |
IC2 |
baublesExpandedLoaded |
Baubles|Expanded |
openComputersLoaded |
OpenComputers |
bloodMagicLoaded |
BloodMagic |
thaumicBootsLoaded |
thaumicboots |
botaniaLoaded |
Botania |
wailaLoaded |
Waila |
computerCraftLoaded |
ComputerCraft |
共 17 个字段(表格分两栏展示)。
功能:各软依赖的实际影响
| 模组 | 兼容类 | 触发的行为 | 源码 |
|---|---|---|---|
| ComputerCraft | PeripheralHandler + 6 个 Peripheral* 类 |
preInit() 中 initCCPeripherals() 注册 17 个方块实体的外设;并 ComputerCraftAPI.registerTurtleUpgrade(new FumeTool()) |
TTCommonProxy.java:135-137、:238-249 |
| ComputerCraft | LoadedMods.computerCraftLoaded |
门控 2 个方块注册:aspectAnalyzer、golemConnector |
BlockAspectAnalyzer.java:143、BlockGolemConnector.java:55 |
| OpenComputers | OCCompat + 6 个 Driver* 类 |
init() 中 initOpenCDrivers() 注册 6 个驱动 |
TTCommonProxy.java:163-165、:252-259 |
| Baubles (Expanded) | 5 个 IBauble 物品 |
饰品槽位行为 | 见 护符与饰品 |
| Tinkers’ Construct | TinkersConstructCompat |
修复器可修 TCon 工具(受 repairTConTools 控制) |
TileRepairer.java:76、:397 |
| Ender Storage | EnderStorageFunctions |
末影箱聚焦的排序键改走兼容层 | ItemFocusEnderChest.java:79-81 |
| Blood Magic | BloodMagic |
反射加载 WayofTime.alchemicalWizardry.common.entity.projectile.EntityParticleBeam 加入弹射黑名单 |
compat/BloodMagic.java:13 |
| Ender IO | EnderIO |
init() 中 InitEnderIO() |
TTCommonProxy.java:167-169 |
| Electro Magic Tools | EMTCompat |
init() 末尾无条件调用 EMTCompat.init() |
TTCommonProxy.java:186 |
| ForgeMultipart | MultipartHandler(反射) |
Class.forName("thaumic.tinkerer.common.multipart.MultipartHandler") 后 newInstance() |
TTCommonProxy.java:173-180 |
| Waila | TTinkererProvider |
preInit() 中通过 IMC register 发送类名 |
ThaumicTinkerer.java:63-68 |
| IC2 | IndustrialcraftUnloadHelper |
4 处引用 | 见下 |
| Botania | BotaniaFunctions |
2 处引用 | 见下 |
| GT5-Unofficial | — | LoadedMods.gt5uNHLoaded |
声明于 LoadedMods,本页未找到其他引用点 |
| Thaumic Boots | — | LoadedMods.thaumicBootsLoaded |
声明于 LoadedMods,本页未找到其他引用点 |
| NEI + AspectRecipeIndex | NEIEventHandler |
两者同时加载才注册:if (LoadedMods.NEILoaded && LoadedMods.aspectRecipeIndexLoaded) |
TTCommonProxy.java:182-184 |
反射加载的两处
- ForgeMultipart:
Class.forName(...)+newInstance(),包在try { … } catch (Throwable e)中,失败时ThaumicTinkerer.log.error("Error registering multiparts", e)(TTCommonProxy.java:174-179)。未加载时走else分支记录info("Skipping TC Multipart integration")(TTCommonProxy.java:180-181)。 - Blood Magic:
Class.forName("WayofTime.alchemicalWizardry.common.entity.projectile.EntityParticleBeam"),catch (ClassNotFoundException e) { e.printStackTrace(); }(compat/BloodMagic.java:11-17)。调用链已核实为活的:TTCommonProxy.postInit()(:194)→ItemFocusDeflect.setupBlackList()(:53)→BloodMagic.setupClass()(:56,受bloodMagicLoaded门控)。该类名已在mirror/BloodMagic仓中核实存在(WayofTime/alchemicalWizardry/common/entity/projectile/EntityParticleBeam.java)。
可选接口(@Optional.Interface / @Optional.Method)
除 LoadedMods 的运行时布尔检测外,本模组还用 FML 的可选注解做编译期集成绑定。两类注解的规模:
| 注解 | 条目数 | 涉及文件数 |
|---|---|---|
@Optional.Interface / InterfaceList(iface = "…",声明所实现的接口) |
29 | 15 |
@Optional.Method(modid = "…",声明仅在对应 mod 存在时保留的方法体) |
113 | 24 |
@Optional.Method 的 modid 分布:ComputerCraft 38、OpenComputers 34、appliedenergistics2 18、IC2 14、CoFHCore 5、thaumicboots 1、gregtech_nh 1、EnderIO 1、Baubles|Expanded 1。
接口声明明细
| 类 | 接口数 | 接口(modid) | 源码 |
|---|---|---|---|
TileTransvectorInterface |
8 | dan200.computercraft.api.peripheral.IPeripheral(ComputerCraft);cofh.api.energy.IEnergyHandler / IEnergyReceiver / IEnergyProvider(CoFHCore);ic2.api.energy.tile.IEnergySink / IEnergyEmitter / IEnergySource / IEnergyConductor(IC2) |
tile/transvector/TileTransvectorInterface.java:46-54 |
TileAspectAnalyzer |
3 | li.cil.oc.api.network.SimpleComponent(OpenComputers)、IPeripheral(ComputerCraft)、appeng.api.movable.IMovableTile(appliedenergistics2) |
tile/TileAspectAnalyzer.java:39-41 |
TileAnimationTablet |
3 | 同上 3 个 | tile/tablet/TileAnimationTablet.java:63-65 |
TileMagnet |
3 | 同上 3 个 | tile/TileMagnet.java:36-38 |
TileGolemConnector |
2 | SimpleComponent(OpenComputers)、IPeripheral(ComputerCraft) |
tile/TileGolemConnector.java:28-29 |
ItemIchorclothArmorAdv |
1 | gregtech.api.hazards.IHazardProtector(gregtech_nh) |
item/kami/armor/ItemIchorclothArmorAdv.java:35 |
ItemGemBoots |
1 | thaumicboots.api.IBoots(thaumicboots) |
item/kami/armor/ItemGemBoots.java:53 |
ItemIchorPouch |
1 | baubles.api.expanded.IBaubleExpanded(Baubles|Expanded) |
item/kami/ItemIchorPouch.java:57 |
FumeTool |
1 | dan200.computercraft.api.turtle.ITurtleUpgrade(ComputerCraft) |
compat/FumeTool.java:28 |
TileEnchanter / TileEntityRelay / TileMobMagnet / TileFunnel / TileRepairer / TileCamo |
各 1 | appeng.api.movable.IMovableTile(appliedenergistics2) |
:45 / :11 / :37 / :40 / :42 / :23 |
ItemGemBoots使用的是导入后缩写写法@Interface(iface = "thaumicboots.api.IBoots", modid = "thaumicboots")(ItemGemBoots.java:31导入cpw.mods.fml.common.Optional.Interface),与其它文件的@Optional.Interface等价。值得注意的三处跨系集成:
ItemIchorclothArmorAdv的IHazardProtector是对 GT5-Unofficial 危险值系统的唯一接口绑定;ItemGemBoots的IBoots是对 Thaumic Boots 的唯一接口绑定;TileTransvectorInterface的 4 个 IC2 + 4 个 CoFH Core 能量接口是位移接口的跨模组能量支持。
对 compat/ 目录逐类做「除自身文件外的引用计数」,有两个类引用数为 0:
| 类 | 状态 | 证据 |
|---|---|---|
OCCompat |
完全空实现且无引用 | 全文只有一个方法 public static void InitOC() {}(compat/OCCompat.java:8),方法体为空;InitOC 在本仓库内无任何调用点 |
FumePeripheral |
实现 IPeripheral 但无引用 |
getType() 返回 "gasRemover"(compat/FumePeripheral.java:13-16),getMethodNames() 返回 new String[] {}(空数组),但该类在 initCCPeripherals() 的 17 个外设类列表中不存在 |
initCCPeripherals() 注册的 17 个类型为:TileAlembic、TileCentrifuge、TileCrucible、TileFunnel、TileInfusionMatrix、TileJarFillable、TileJarNode、TileNode、TileRepairer、TileTubeFilter、TileTransvectorInterface、TileWandPedestal、TileDeconstructionTable、TileJarBrain、TileSensor、TileArcaneBore、IEssentiaTransport(TTCommonProxy.java:241-243)。
按 import 来源拆分(TTCommonProxy.java:44-66):14 个来自 Thaumcraft(13 个 thaumcraft.common.tiles.* 类 + 接口 thaumcraft.api.aspects.IEssentiaTransport),3 个来自本模组(TileFunnel、TileRepairer、TileTransvectorInterface)。
OpenComputers 侧注册 6 个驱动:DriverIAspectContainer、DriverArcaneEar、DriverBrainInAJar、DriverDeconstructor、DriverEssentiaTransport、DriverArcaneBore(TTCommonProxy.java:253-258)。peripheral/OpenComputers/ManagedTileEntityEnvironment.java 是辅助类而非驱动,不计入。
遗留文件
src/main/java/thaumic/tinkerer/common/compat/EnderStorageFunctions.java.orig 是被 git 跟踪的补丁备份文件(git ls-files 可列出)。它与同目录的 EnderStorageFunctions.java 并存,.orig 后缀文件不参与编译。