Minecraft多版本Mod开发Rethink
2 min
屏蔽构建脚本:链接
Minecraft Modding 的构建脚本和 Gradle 绑的死死的,不同平台的脚本差异巨大,不如直接黑盒化。Mod 的核心只需要:
- Minecraft 的反混淆后的类路径
- 修改 Minecraft 内容的工具类(包括 Modloader 的 API 和自己写的 Mixins)类路径
- 重混淆过程
平台侧提供以上功能,把 Mod 入口实现为一个 Classloader 从资源文件加载 Mod 核心的 jar, 这样完全不需要考虑 Mod 核心的实现方式、依赖、构建等问题。 Mod 核心可以用任意 JVM 构建工具构建,同时能够访问全部 Minecraft 相关类。
除 Mod 核心外的 jar 包无需依赖核心即可构建,再构建 Mod 核心并重混淆后合并进 Mod jar,即可完美运行。 这个机制也就是「链接」。
大道至简:源码共享
原来的公共部分是以 binary 的形式共享的,因为当时我尝试公共源码时没法调整 Gradle 的构建脚本实现正确的 IDE 支持。 实际上公共源码是最简单的方式,Scala、Kotlin 在处理这种多平台项目时都是这么做的。 现在因为屏蔽了构建脚本,我可以不用 Gradle。直接共享源码。
在公共源码内声明 Trait,在平台特定的源码内创建单例实现 Trait 并 export 之,从而保证类型安全: API, Platform