软依赖与兼容层

基本信息

属性 值
加载检测类 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 后缀文件不参与编译。

相关条目