外部模组集成
基本信息
OpenBlocks 的集成走 OpenModsLib 的 IntegrationModule 机制:Integration.addModule(new ModuleAdapters()) / addModule(new ModuleTurtles())(OpenBlocks.java:704-705),每个模块在自己的构造器里声明加载条件,条件不满足则整模块跳过。
integration/ 包共 11 个类(+1 个 package-info.java):
| 类 | 作用 |
|---|---|
ModuleAdapters |
4 个 OpenPeripheral 外设适配器 |
ModuleTurtles |
1 个 ComputerCraft 海龟升级 |
AdapterCannon |
物品炮外设 |
AdapterDonationStation |
捐赠站外设 |
AdapterProjector |
投影仪外设 |
AdapterVillageHighlighter |
村庄高亮灯外设 |
MagnetTurtleUpgrade |
磁铁海龟升级 |
MagnetControlAdapter |
磁铁升级的外设侧 |
ITickingTurtle / TurtleUtils / TurtleIds |
海龟升级的辅助接口与工具 |
硬依赖(1 个)
| 模组 | 声明方式 | 位置 |
|---|---|---|
OpenModsLib(modid OpenMods) |
api('com.github.GTNewHorizons:OpenModsLib:0.10.14:dev') |
dependencies.gradle:4 |
dependencies = "required-after:OpenMods@[0.10.1,)" |
OpenBlocks.java:230 |
依赖声明里的 modid 是
OpenMods,不是OpenModsLib——OpenModsLib仓库自己的gradle.properties里modId = OpenMods。coremod 同理是openmods.core.OpenModsCorePlugin(该仓库的coreModClass)。
FML 亦隐式要求 Forge:gradle.properties 中 forgeVersion = 10.13.4.1614(未在 @Mod(dependencies) 中重复声明)。
功能性软依赖
这些是真正有代码路径的集成(compileOnly,运行时缺失即跳过):
| 模组 | 条件 | 集成内容 | 位置 |
|---|---|---|---|
| OpenPeripheralCore | modLoaded(Mods.OPENPERIPHERALCORE) |
4 个外设适配器 | ModuleAdapters.java:15-17(条件)、:32-35(注册) |
| ComputerCraft | all(modLoaded(OPENPERIPHERALCORE), modLoaded(COMPUTERCRAFT), classExists("dan200.computercraft.api.turtle.ITurtleUpgrade")) |
海龟升级 | ModuleTurtles.java:19-23 |
| Backhand | Loader.isModLoaded("backhand") |
滑翔翼副手切换 | EntityHangGlider.java:55、:79 |
| Et Futurum Requiem | Loader.isModLoaded("etfuturum") |
滑翔翼接管鞘翅 | EntityHangGlider.java:167、:172 |
| MFR(Mystical Agriculture 系) | 启动时无条件发 IMC | 行李箱加入刷怪笼黑名单 | OpenBlocks.java:720-723 |
| NotEnoughItems | devOnlyNonPublishable |
IConfigureNEI 实现 |
NEIOpenBlocksConfig.java |
| Mobs Info | compileOnly |
见下(引用待核) | dependencies.gradle:8 |
| waila | devOnlyNonPublishable |
见下(引用待核) | dependencies.gradle:20 |
dependencies.gradle:8(Mobs-Info)与 :20(waila)在 OpenBlocks 源码中没有直接 import(对全部 .java grep 无命中)——它们可能只用于运行期兼容或已被弃用。这一点无法从 openblocks 仓库单独核实,因其语义由各自的 API 决定。
NEI 集成的注册方式
NEIOpenBlocksConfig implements IConfigureNEI(NEIOpenBlocksConfig.java:15),但仓库内没有任何 new NEIOpenBlocksConfig()(对全仓库 grep 只有这一处 class 声明本身)。它依赖 NEI 自己对 mod jar 做 ASM 扫描来发现 IConfigureNEI 实现。因此:
- 装了 NEI → 生效(通过 NEI 的类路径扫描)
- 没装 NEI → 类不被加载,NEI 也是
devOnlyNonPublishable,本就不随 mod 分发
它会隐藏 OpenBlocks:canvasglass(NEIOpenBlocksConfig.java:24-25),因为玻璃画布无法合成。
墓碑 / 自动装备类软依赖
common/ModPresence.java 是一个纯 Loader.isModLoaded 开关集合(7 个):
| 字段 | 检测的 modid | 用处 |
|---|---|---|
ADVENTURE_BACKPACK |
adventurebackpack |
墓碑收纳 |
BAUBLES |
Baubles |
墓碑收纳 |
COSMETIC_ARMOR |
cosmeticarmorreworked |
墓碑收纳 |
ET_FUTURUM |
etfuturum |
滑翔翼鞘翅接管 |
GALACTICCraft → GALACTICRAFT |
GalacticCraftCore |
墓碑收纳 |
MC_BACKPACK |
Backpack |
墓碑收纳 |
TCONSTRUCT |
TConstruct |
墓碑收纳 + 快照 |
使用点全部在 GraveAutoEquip.java(:76、:93、:111、:127、:193、:270、:295、:317、:333、:356)与 GraveInventorySnapshot.java(:61、:94、:116、:136、:156、:180)。
这 6 个在 dependencies.gradle 中均为 devOnlyNonPublishable(即不随 jar 分发的开发期依赖):AdventureBackpack2 :11、Baubles-Expanded :12、CosmeticArmorReworked :13、GalacticCraft :14、Minecraft-Backpack-Mod :18、TinkersConstruct :19。
捐赠链接(IMC)
OpenBlocks 用 IMC 接收其它 mod 的捐赠链接:processMessage(FMLInterModComms.IMCEvent) 监听 donateUrl 消息并存入 DonationUrlManager(OpenBlocks.java:787-794、:790-792)。捐赠站方块 OpenBlocks:donationStation 读取这些链接。
注意:
Mods.*常量在 OpenBlocks 源码中出现 35 次,但绝大多数是捐赠 URL 常量,不是功能依赖。真正影响行为的只有上表列出的那些。
数值
| 数值名 | 来源 | 值 |
|---|---|---|
| 集成模块数 | Integration.addModule |
2(OpenBlocks.java:704-705) |
| OpenPeripheral 适配器数 | adapterRegistry.register |
4(ModuleAdapters.java:32-35) |
| 海龟升级数 | registerTurtleUpgrade |
1(ModuleTurtles.java:39) |
| 海龟升级 ID | TurtleIds.MAGNET_TURTLE_ID |
9260(TurtleIds.java:6) |
ModPresence 开关数 |
字段计数 | 7 |
TurtleIds.java:5的注释为// TODO Allocate proper ones on Wiki. This one should be free.——升级 ID 9260 是作者随手取的,尚未在 wiki 上正式分配。这是仓库内明确记录该数字为「临时」的证据。
交互
| 触发 | 行为 |
|---|---|
| OpenPeripheral 加载 | 4 个适配器注册,暴露方块的 Lua 接口 |
| CC + OP 同时加载 | 磁铁海龟升级注册;客户端还把它挂到 Forge 事件总线(ModuleTurtles.java:40) |
| 玩家死亡 | 按 ModPresence 决定是否连带收纳对应模组的装备 |
| 捐赠站右键 | 打开 DonationUrlManager 中任一捐赠链接 |
| 滑翔翼 + Et Futurum | 鞘翅被滑翔翼接管 |
| Backhand 加载 | 滑翔翼支持副手 |
相关条目
- 模组 API 与扩展点 - 其它 mod 如何扩展 OpenBlocks
- 游戏规则与指令 -
openblocks:spawn_graves与墓碑系统 - 实体 / 实体(10 个) - 磁铁实体与海龟升级的产物