一切的开始
最后更新于
最后更新于
类似于fabric, architectury plugin也提供了相对应的example-mod来方便我们搭建环境。
首先来到Architectury-Templates的Releases页面,选择合适的版本
目前Architectury仅支持1.16+的版本
Architectury提供下面这几种Templates可供选择
1.18.2-forge.zip: 1.18.2 的基于Forge-Loom的Forge开发环境
1.18.2-architectury.zip: 1.18.2 跨加载器的开发环境
1.18.2-architectury-mixin.zip: 1.18.2 使用Mixin的跨加载器开发环境
相信阅读过初识Architectury章节的读者已经明白自己需要下载的版本了
这里我们不着重介绍Mixin, 感兴趣的读者可以阅读笔者先前的文章
本文基于Minecraft 1.18.2版本,并且我们不需要Mixin, 所以我们下载1.18.2-architectury.zip
将下载到的文件进行解压,直接使用Intellij IDEA来导入文件夹中的build.gradle文件
类似于Fabric和Forge的环境构建,这里Gradle会帮助我们下载必要的文件, 并且自动使用Loom进行反混淆,读者需要稍加等待
build.gradle中的一些常量现在移动到了gradle.properties中
构建完成后, Gradle会自动为我们生成针对两个平台的运行配置
在Architectury项目创建完成后, 请尽量避免移动项目的位置或者给项目的目录改名. 可能会产生找不到architectury-transformer-agent.jar的问题
如果产生了这个问题, 可以自行修改启动配置中-javaagent的路径
恭喜你, 你已经构建好了一个完整的开发环境
重新审视我们构建好的开发环境, 我们的目录结构类似这样
common
src/main/java/net.examplemod
ExampleMod.java
ExampleExpectPlatform.java
forge
src/main/java/net.examplemod.forge
ExampleModForge.java
ExampleExpectPlatformImpl.java
fabric
src/main/java/net.examplemod.fabric
ExampleModFabric.java
ExampleExpectPlatformImpl.java
经过简单的观察, 我们发现
实例代码在主类ExampleMod中进行了物品的注册和一些基本操作
ExampleModForge中添加了@Mod注解, 并调用ExampleMod中的init
ExampleModFabric类实现了ModInitializer方法, 并调用ExampleMod中的init
实例代码在ExampleExpectPlatform中写了一个"没有方法体"的方法 getConfigDirectory
common模块中的某些代码调用了getConfigDirectory
forge模块中的ExampleExpectPlatformImpl用forge独有的方式补全了方法体
fabric模块中的ExampleExpectPlatformImpl用fabric独有的方式补全了方法体
可以发现, 我们模组的共性部分在common模块中, 而非共性部分则分别在forge和fabric包中展现.
针对一个需要考虑兼容性的方法, 我们往往先定义"接口", 然后为接口写不同的实现(Impl), 这是Architechtury以及大部分跨平台程序设计中所共有的思想
实际上ExampleExpectPlatform在这里类似于接口.
实例代码已经为我们提供了一个清晰的思路, 现在我们已经可以删除掉他们, 开始我们自己的旅途了.
在common, forge, fabric三个模块中分别建立trou.arch(.forge/.fabric)包, 并创建对应的Arch, ArchForge, ArchFabric类.
根据读者以往开发Forge或Fabric的经验修改必要的文件名和参数变量, 分别启动游戏, 应该可以看到Hello Architectury!消息输出在控制台中
因为涉及到很多transform和黑科技, 对规范性的要求比较高, 读者可能会出现一些疏忽, 下面是一些可能出现的常见问题 (笔者搭建环境的时候出现的问题)
检查是否有遗漏的examplemod没有修改, 请主要检查
fabric.mod.json
gradle.properties
mods.toml
(accesswidener)
(mixins.json)
请检查自己是否修改了fabric.mod.json, 其中定义了Mod主类入口
打开fabric模块中的resources/fabric.mod.json, 修改entrypoints
请检查自己的Forge主类是否放在了forge模块的对应forge包下
我们项目的ArchForge应位于forge\src\main\java\trou\arch\forge\ArchForge.java
此项内容读者可以选择性阅读. Architectury并未主动支持Parchment. 以下内容均出自笔者尝试, 不能保证是否出现问题, 如果读者想要使用, 出现了编译类问题, 请首先尝试移除Parchment
众所周知, 现在Forge和Fabric默认使用Mojang官方混淆表, 但官方混淆表并没有放出参数的混淆信息, 这导致高版本默认反编译的参数表是很难阅读的, Parchment解决了这一问题, Parchment提供了参数表的反混淆方式. 这里笔者不过多赘述Parchment本身, 国内也有相关的介绍和使用教程, 读者可以自行翻阅查看.
这里我们尝试在Architectury中引入Parchment
首先打开项目根目录的build.gradle, 在subprojects中按需添加如下内容
之后刷新Gradle项目, 等待Parchment下载并自动部署后, 再次查看参数表, 已经反混淆过了.