# 本文的想法来源
前些天在 Curseforge 的 Library 区闲逛,发现了一直在前排榜单上的 Architectury API,笔者稍加了解以后决定起笔这篇文章。类似于 Architectury 这种的跨平台思路最近还是挺流行的,比如 flutter,uno 什么的,但是在 Minecraft 开发领域并不多见,查了一下 Curseforge 上依赖 Architectury API 的 Mod,发现还挺多的,可能也算比较流行了。
# 本文的受众对象
- 有跨加载器开发模组的需求 (如果没有这个需求的话就没必要阅读了)
- 对 Minecraft 及其生态链有一个较为进阶的了解
- 有利用 Fabric 或 Forge 开发 Mod 的经验 (本文不会讲解模组开发的基础部分)
- 有独立思维解决问题的能力
# 本文的组织方式
本文不会详细记述如何开发一个完整的 Forge 或 Fabric 模组,只会抽出开发中的几个关键点进行诠释,并加以笔者感兴趣的实例进行补充讲解。
在 Architectury Plugin 部分中,注重于介绍 Architectury 的特性和使用方式。所以,这部分不是思路引领性的,而是知识引领性的。
而 Architectury API 部分中,注重于介绍 Architectury 的实际使用和开发经验。主要以实例的角度,这部分是思路引领性的,熟悉笔者写作习惯的读者应该更乐于去接受这种方式。
对于希望快速上手的读者,可以阅读完前言并搭建完环境后,直接阅读 Architectury API 部分.
# 本文基于
- Minecraft: 1.18.2
- Architectury: 4.1.32
- Fabric Loader: 0.13.3
- Fabric API: 0.48.0+1.18.2
- Forge: 1.18.2-40.0.17
- (Parchment: 1.18.2-2022.03.13)
# 正文开始
Architectury 是一套跨加载器的模组开发工具链,依靠这套工具链,读者可以快速且舒适的一次性开发出模组的 Forge 和 Fabric 版本,而无需构建多套开发环境。
Architectury 分为 Architectury Plugin 和 Architectury API。
Architectury Plugin 是一个 Gradle 插件,意在快速而方便的帮助开发者构建出一个包含 Forge 模块、Fabric 模块和 Common 模块的项目。
在开发过程中,开发者只需把重心放在 Common 模块的实现,而为了适配两个不同加载器的额外代码则需要编写在 forge 和 fabric 模块中,最后构建时 Architectury 会帮助你进行混合。
开发者的编码组织方式类似于下图:
起初开发者们认为这种开发方式的确带来了很大的便利。但因为 Fabric 和 Forge 本身存在较大的差异,开发整仍需花费大量时间在 Forge 模块和 Fabric 模块的开发上,而且开发者们仿佛都在重复地做同一类事情:
- 注册物品: Common 调用注册的方法。Forge 里面实现一遍,Fabric 里面实现一遍
- 监听事件: Common 调用监听事件的方法。Forge 里面实现一遍,Fabric 里面实现一遍
- 网络发包: Common 调用发包的方法。Forge 里面实现一遍,Fabric 里面实现一遍
所以 Architectury API 横空出世。
Architectury API 在 Forge 和 Fabric 上封装了一个抽象层,开发者实际开发中可以跟这些 API 层打交道,组织方式类似于下图:
所以实际上我们的开发实际上主要是围绕 Architectury API 进行的。
在 Architectury 的工具链中,还有一个重要角色就是 Architectury Loom,相信之前尝试过利用 Fabric 开发的读者应该会想到 Fabric Loom, 负责构建开发环境时反编译 Minecraft 源码并且反混淆的工具。
这里 Architectury 创造性的把这套东西搬到了 Forge, 替代了 Forge Gradle,感兴趣的读者可以自行了解。
可以想到的,为了便于管理,在我们的开发环境搭建中也使用 Architectury Loom,构建环境时 Architectury 会自动为我们进行必要的操作,不需要我们手动干涉。
Architectury Loom 也可以作为 Forge Loom 独立使用,如果看不惯 Forge Gradle 的读者也可以尝试独立使用它构建 Forge 环境,但是需要注意的是,这套框架还处于测试阶段,可能出现无法构建或者杂七杂八的问题,具体的信息可以在这里找到: https://github.com/architectury/architectury-loom
相信读者已经基本了解了 Architectury,下面我们开始尝试基于 Architectury 开发模组。请注意,构建过程中需要通畅的网络,请读者自行解决,不过鉴于 forge-cdn 和 fabric 最近的情况,读者应该不必担心。