mod 元信息与打包数据

[!INFO] Git Commit: 93da3e1 | Updated: 2026-10-01

基本信息

属性 值
modid structurecompat
mod 名称 StructureCompat
@Mod 类 net.glease.structurecompat.StructureCompat
实现接口 com.gtnewhorizon.structurelib.IStructureCompat
依赖 required-after:structurelib
接受版本 [1.7.10]
源码文件总数 18 个 .java
自有方块 / 物品 / 实体 / 指令 0 / 0 / 0 / 0
配置文件 无(本 mod 不创建任何配置文件)

本 mod 不注册任何方块、物品、实体或指令,也不向游戏内添加内容。它是一个纯逻辑插件,唯一作用是在 postInit 阶段向 StructureLib 的服务注册表登记外部 mod 的适配实现。

modid 的来源

modid 在两处硬编码,且刻意绕开了 Gradle 占位符:

  • Tags.java:8 — public static final String MODID = "structurecompat";
  • gradle.properties — modId = structurecompat

Tags.java 中另外三个常量仍然是构建期占位符,由 gtnhconvention 在编译时替换:

常量 源码字面量 替换来源
Tags.MODNAME "GRADLETOKEN_MODNAME" gradle.properties 的 modName
Tags.VERSION "GRADLETOKEN_VERSION" git tag
Tags.GROUPNAME "GRADLETOKEN_GROUPNAME" gradle.properties 的 modGroup

gradle.properties 里同时保留着已废弃的 gradleTokenModId = GRADLETOKEN_MODID,但 generateGradleTokenClass 为空、replaceGradleTokenInFile = Tags.java,且 Tags.MODID 写的是字面量 而非占位符——GRADLETOKEN_MODID 在本 mod 中并未被使用。运行时可用的 modid 只有 structurecompat 这一个来源。

与 StructureLib 的依赖关系

README 只有一行:Compatibility module for StructureLib.。依赖在四处同时声明:

  • gradle.properties / dependencies.gradle — api("com.github.GTNewHorizons:StructureLib:1.4.18:dev")
  • @Mod(dependencies = "required-after:structurelib")(StructureCompat.java:26)
  • mcmod.info — "requiredMods": ["structurelib"]
  • 实现 StructureLib 的服务接口 IStructureCompat

注意 dependencies.gradle 中 StructureLib 用的是 api 而非 implementation:这意味着 IStructureCompat、InventoryUtility、IMultiblockInfoContainer 等类型出现在本 mod 的 public API 上,下游 mod 依赖本 mod 时也会一并拿到 StructureLib。

mcmod.info

"description": "Setup StructureLib with compat for other mods.",
"authorList": ["glee8e"],
"requiredMods": ["structurelib"]

资源目录下仅有 2 个文件:assets/structurecompat/lang/en_US.lang 与 mcmod.info,没有 mixin 配置、 没有 access transformer、没有 META-INF 目录,也没有 mixin 插件(usesMixins = false)。 本 mod 完全依赖 FML 的 ASMDataTable 做类扫描,机制见 compat 派发机制。

侧代理

@SidedProxy 指向 CommonProxy / ClientProxy(StructureCompat.java:32-35)。公共侧两个方法 (preInit、markTextureUsed)都是空实现;客户端侧的重写用于 Hodgepodge 贴图补丁通知,详见 客户端贴图钩子。

运行期日志

preInit 与 postInit 各输出一条汇总日志(StructureCompat.java:51、70):

  • Identified N compat(s) to load.
  • Successfully activated N compat(s).

两条数字可以不相等:preInit 统计的是通过 modid 门控的类,postInit 统计的是反射构造成功的类。 若某个 compat 的构造函数抛异常(InvocationTargetException),会记 ERROR 并被跳过。