ForgeGradle 开发之「砖」

FledgeXu


注意本教程关注的点是 ForgeGradle 项目,而不是 MinecraftForge
本教程假的你有对Gradle有所了解了,不了解的可以看这个Gradle教程

前言

这个教程本来是一个系列,但是我发现一个要做一个系列非常的困难,只能将篇幅缩短,作为「抛砖引玉」的「砖」了。

什么是 Forge Gradle

ForgeGradle(之后用fg代替)是一个Gradle插件,它被创造出来用来构建Minecraft的mod和插件。它负责了你在开发配置环境中的下载资源,反编译,重编译,生成运行脚本,打包mod等工作。
对于Minecraft mod开发者来说,你们一定会在 build.gradle 中看见过:

apply plugin: net.minecraftforge.gradle

这里加载的插件就是 FG。

为什么要了解 Forge Gradle

因为中国大陆的网络,FG的下载过程会非常漫长甚至无法进行,这导致了中国大陆的开发在配置Forge开发环境中时常失败,绝大部分的新人在配置环境这一步就放弃了。
但是因为版权和Lex本人的态度,FG本身不让添加使用镜像功能,所以我们有可能需要对FG进行一些改动,来方便中国的开发者。

如何配置 Forge Gradle 的开发环境。

  1. 你需要下载一个mdk,并正常的解压。
  2. 确认FG的版本,举例来说下面是 1.15.2 版本的 build.gradle 文件节选:
buildscript {
    repositories {
        maven { url = 'https://files.minecraftforge.net/maven' }
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
    }
}

version: '3.+' 可以看出这里的FG的版本是FG3,所以当你获取的FG版本应该也要是FG3。

  1. 获取 Forge Gradle

进入你的 MDK 根目录,使用如下命令获取Minecraft Forge(这里用了Git)。

git clone https://github.com/MinecraftForge/ForgeGradle.git buildSrc

运行这条命令以后最新版的FG就存放在 buildSrc 文件夹中了(请注意这个文件夹的名字是不能修改的),如果需要旧版的FG请切换分支。
完成后文件树如下:

.
├── CREDITS.txt
├── LICENSE.txt
├── README.txt
├── build
│   ├── classes
│   ├── createMcpToSrg
│   ├── downloadMCMeta
│   ├── downloadMcpConfig
│   ├── extractSrg
│   ├── natives
│   ├── resources
│   └── tmp
├── build.gradle
├── buildSrc
│   ├── HEADER
│   ├── Jenkinsfile
│   ├── LICENSE
│   ├── README.md
│   ├── build
│   ├── build.gradle
│   ├── gradle
│   ├── gradle.settings
│   ├── gradlew
│   ├── gradlew.bat
│   ├── settings.gradle
│   └── src
├── changelog.txt
├── forge-1.15.2-31.1.0-mdk.zip
├── gradle
│   └── wrapper
├── gradle.properties
├── gradlew
├── gradlew.bat
├── run
│   ├── config
│   ├── defaultconfigs
│   ├── logs
│   └── mods
└── src
    └── main

22 directories, 18 files
  1. 使用本地FG

在默认情况下,mdk使用的是已经打包好的FG,所以我们得修改成自己本地的FG。
1.15.2 为例,修改mdk根目录下的 build.gradle 文件。
首先删除或者注释如下语句

dependencies {
    classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
}

然后将

apply plugin: net.minecraftforge.gradle

修改为

apply plugin: net.minecraftforge.gradle.userdev.UserDevPlugin

其中 net.minecraftforge.gradle.userdev. UserDevPlugin 是与 buildSrc/src/userdev/resources/META-INF/gradle-plugins/net.minecraftforge.gradle.properties 值相同。

  1. 导入项目

这里的导入方式没有什么区别,按照正常的导入mdk的方式导入就行。

  1. 调试配置

在你导入项目之后,你得在进行一些配置才能调试FG,这里以IntelliJ举例。

其中 Gradle project 选择你的mdk根目录的名字。
Name 的内容可以自己填写。

点击 OK 即可保存配置,然后你就可以在FG内肆意的下断点,然后在Debug面板里选择运行 FG Runclient ,即可触发你的端点。
另外对于FG3.0来说,FG的入口函数是 buildSrc/src/userdev/java/net/minecraftforge/gradle/userdev/UserDevPluginapply

继续开发

因为ForgeGradle本身是一个非常庞大的项目。这里我只能做简单的介绍。
首先ForgeGradle基本上可以分成两个部分(Lex语):

  1. pathcer 部分,pathecer 里面的任务和配置是用来给Forge开发使用的
  2. userdev 部分,userdev 这里面的任务是用来给Forge Mod开发者使用的。

除此之外ForgeGradle还有mcp这个包,里面主要是一些放混淆重命名的东西,因为userdevpathcer都用的到所以就独立出来了。
最后一个剩下的是common部分,这个部分里的代码主要是一些「工具类」的代码,比如下载函数之类的,都放在这个子包中。

给ForgeGralde贡献代码的一些经验

  1. 不要希望会很快得到反馈
  2. Lex本人对版权问题非常的认真,如果有涉及到对FG内处理Minecraft原版内容的代码,请务必小心,只能使用正版相关东西(包括但不限于正版启动器,正版的地址)
  3. 请多在Forge的discord里活跃,混个脸熟对你的PR有帮助。
  4. 我个人认为,Lex还是很希望有人能帮忙改进ForgeGradle的。
  5. 如果你是Linux或者macOS的用户,可以多帮忙测试别人的PR或者尝试解答issue里的问题

附录

Gradle 4.9 用户手册

Gradle 4.9 Java Docs