diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js
index 6c808a0..442976d 100644
--- a/docs/.vuepress/config.js
+++ b/docs/.vuepress/config.js
@@ -24,7 +24,8 @@ module.exports = {
children: [
'/preparing/java',
'/preparing/mdk',
- '/preparing/gradle-ide',
+ '/preparing/ide',
+ '/preparing/gradle',
'/preparing/mcp',
'/preparing/forge',
'/preparing/fg',
diff --git a/docs/preparing/README.md b/docs/preparing/README.md
index d2e7699..3d23791 100644
--- a/docs/preparing/README.md
+++ b/docs/preparing/README.md
@@ -7,7 +7,8 @@
- [Java](./java.html)
- [MDK](./mdk.html)
-- [IDE](./gradle-ide.html)
+- [Gradle](./gradle.html)
+- [IDE](./ide.html)
::: tip
如果你网络不好,你可以在[这里下载](https://jihuayu-my.sharepoint.com/:f:/g/personal/admin_jihuayu_site/EmU2Ep-SW3NOiG4RNjajdDMBLHyvdd3ZHvRde-Eadi0E1w)上述的东西。
diff --git a/docs/preparing/fg.md b/docs/preparing/fg.md
index d253a63..f277971 100644
--- a/docs/preparing/fg.md
+++ b/docs/preparing/fg.md
@@ -1,44 +1,96 @@
# ForgeGradle
-::: danger
-此页面已经过时,需要修改。
-:::
-
-ForgeGradle 是 Forge 开发团队推出的 Gradle 插件,主要用途就是简化基于 MCP+Forge 的 Minecraft Mod 开发的流程。
+ForgeGradle 是 Forge 开发团队推出的 [Gradle](gradle.md) 插件,主要用途就是简化基于 MCP 和 Forge 的 Minecraft Mod 开发的流程。
## 为什么?
-思考一下 Mod 开发和发布的流程。通常的情况下,玩家面对的 Minecraft 使用的是混淆名,但是开发者在开发 Mod 时不太可能硬啃混淆名,而是使用某种形式的反混淆名(比如 MCP)。这样一来,当开发者编译 Mod 时,编译器是基于反混淆后的代码,而非玩家实际上使用的混淆代码进行编译的。如此一来,如果不先把 Mod 所引用的 Minecraft 底层代码混淆回去,Mod 是肯定无法运行的。同样的,为了方便开发 Mod,首先你要对 Minecraft 进行反混淆。
-
-再往后退一步思考:开发 Minecraft 的 Mod 首先需要 Minecraft 它本身。别忘了 Minecraft 是一个商业软件,你不可能直接从 Maven Central、JCenter、Sonatype 之类的地方下载到它。能下载到它的地方只有 Mojang 自己的服务器。
+思考一下 Mod 开发和发布的流程:
-此外,在开发环境运行 Minecraft 还需要下载它所有的 assets,同时还要提供正确的启动参数,基本上等同于写一个 Minecraft 的启动器(除了启动的入口是 IDE 的 Run/Debug 以及两个 Gradle Task,下文会详细说明)。
+ - 首先我们要下载 Minecraft 本体。
+ - 然后我们要下载 Minecraft 的所有依赖项。
+ - 接着我们要反编译并反混淆,这样我们才能读懂 Minecraft 底层。
+ - 这个时候我们才能开始写代码。
+ - 到了发布 Mod 的时候,在编译好 Mod 的基础上我们还要[重混淆](mcp.md#重混淆(re-obfuscation,reobf))。
-显然,这些 Mod 开发必须经过的流程是可以自动化的。
+显然,我们可以并且应该让 Gradle 帮我们搞定这些。ForgeGradle 应运而生。
## ForgeGradle 能干什么?
- - 部署开发环境(下载 Minecraft、反编译及反混淆 Minecraft、下载 assets),有三种:
- - 基本上所有 Mod 开发者在平时开发 Mod 时都会使用的带反编译出的源码的开发环境(`setupDecompWorkspace` task)
- - 持续集成服务器(CI)经常使用的用于自动构建 Mod 的环境(`setupCIWorkspace` task)
- - 不太常用的仅有反混淆后的 Minecraft 的开发环境(`setupDevWorkspace` task)
- - 依赖处理
- - 用于反混淆依赖项目的 scope(`deobfCompile` 和 `deobfProvided`),在开发跨 Mod 兼容或扩展 Mod 时经常用到
+ - 部署开发环境
+ - 下载、反编译及反混淆 Minecraft
+ - 下载 assets(音效和语言文件等)
+ - 反混淆和重混淆
+ - Mod 构建时会自动过一遍重混淆
+ - 对于依赖项目,可用 `fg.deobf`
- IDE 相关
- - 自动生成 IntelliJ IDEA 的 Run/Debug Configuration(`genIntellijRuns` task)
- - 连带当前项目一起运行 Minecraft(不常用):
+ - 自动生成 Run/Debug Configuration,目前支持 Eclipse、IntelliJ IDEA 和 VSCode。
+ - 连带当前项目一起运行 Minecraft:
- 运行服务器(`runServer` task)
- 运行客户端(`runClient` task)
- - 在执行 Gradle Java 插件的 `build` task 时可自动完成对源码的重混淆
+ - 运行数据生成器(`runData` task)
## 面向用户的配置
-ForgeGradle 需要配置的东西并不多,最常用的选项都可以在 `build.gradle` 的 `minecraft` block 中找到:
+ForgeGradle 最常用的选项都可以在 `build.gradle` 的 `minecraft` block 中找到:
```groovy
minecraft {
- mappings channel: 'snapshot', version: '20190719-1.14.3'
+ // 在这里指定映射表版本。
+ // 关于 MCP 版本号的说明可在 MCP 一节中找到。
+ mappings channel: 'snapshot', version: '20200225-1.15.1'
+
+ // 在这里可以修改运行 Minecraft 时的配置。
+ runs {
+ // 客户端配置
+ client {
+ // 指定 Minecraft 根目录(即俗称 .minecraft 的那个目录)的位置
+ workingDirectory project.file('run')
+
+ // 调试日志相关,下同。
+ property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
+ property 'forge.logging.console.level', 'info'
+
+ // 指定 Minecraft 的启动参数。下面这个参数可以用来修改玩家名称
+ args '--username=Foo'
+
+ // 这一串是让游戏识别到你写的代码的,不用管它。下同。
+ mods {
+ examplemod {
+ source sourceSets.main
+ }
+ }
+ }
+
+ // 服务器配置
+ server {
+ // 指定服务器根目录的位置
+ workingDirectory project.file('run')
+
+ property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
+ property 'forge.logging.console.level', 'info'
+
+ mods {
+ examplemod {
+ source sourceSets.main
+ }
+ }
+ }
+
+ // 数据生成器配置
+ data {
+ workingDirectory project.file('run')
+ property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
+ property 'forge.logging.console.level', 'info'
+
+ // 记得把 your_mod_id 换成你的 Mod id。
+ args '--mod', 'your_mod_id', '--all', '--output', file('src/generated/resources/')
+
+ mods {
+ examplemod {
+ source sourceSets.main
+ }
+ }
+ }
+ }
}
```
-
-- `mappings` 代表 MCP 版本号。关于 MCP 版本号的说明[请参阅 MCP 一节](mcp.md#)。
diff --git a/docs/preparing/forge.md b/docs/preparing/forge.md
index 6ed91f6..8dfb284 100644
--- a/docs/preparing/forge.md
+++ b/docs/preparing/forge.md
@@ -1,17 +1,17 @@
# Forge
-有了 MCP 后,开发 Minecraft 的 Mod 就变得简单了许多,因为我们现在知道那些被“加密”(混淆)的底层代码都是什么东西了。但 Forge 是什么?
+Forge 是个 Mod 开发框架,包含了这么几个部分:
-## 历史
+ 1. Forge Mod Loader (FML),用于识别并加载 Mod。
+ 2. Forge,主要有两部分:
+ - 修改原版底层暴露出的 API。
+ - 一些和 Minecraft 底层关系不是特别大的小系统,比如 Capability。
-一个非常常见的说法是“Forge 是个 API”。
-实际上这个说法并不十分严谨。多数时候,API 只包括公开的接口与方法,不包括它们的底层实现。在一个基于 Minecraft 和 Forge 的开发环境中,我们可以随意访问 Minecraft 的底层,如此看来 Forge 似乎不只是纯粹的 API。
+## 为什么我们要用 Forge?
-实际上也的确如此,今天的 Forge 是由两个项目合并而成的,一个叫 MinecraftForge,另一个叫 Forge Mod Loader(简称 FML)。
-先说 FML。顾名思义,FML 是一个“Mod 加载器”。它介入了 Minecraft 的底层,能让你在 Minecraft 中一口气装一大堆 Mod,在你的电脑撑不住前想装多少装多少。
-MinecraftForge 的组成则有些复杂。它实际上包含了两部分:
-
- 1. 对 Minecraft 底层的修改及因此暴露出的公开方法。当有多个 Mod 因为同时修改 Minecraft 的某一个部分而互相冲突时,Forge 可以介入 Minecraft 的底层来提供一套令这些 Mod 不再冲突的解决方案。
- 2. 一些相对来说独立于 Minecraft 之外的系统。这些系统看起来和 Minecraft 之间没有多少耦合,但能极大改善 Mod 之间的兼容性,代表系统有流体、事件总线和矿物词典。这些小系统比其他 Forge 的组成部分更接近真正的 API。
-
-因此,Forge 更像是一套完整的工具包(toolkit),或者说框架(framework)。在它的基础上开发 Mod 可以加快开发速度,同时能自动获得对其他 Mod 的良好兼容。也因此,在 Forge 这个大框架下,Mod 之间已经没有多少真正意义上的兼容性问题了,多数时候我们所说“兼容”问题是指跨 Mod 的交互不符合用户的预期,或者 Mod 在更新版本时引入的二进制不兼容更新。前者需要 Mod 开发者之间的协调,而后者则是软件开发中依赖地狱的一个简化版本。
+ 1. 在 Forge 的基础上开发 Mod 可以加快你的开发速度。
+ 你可以直接使用 Forge 已经造好的轮子,这样你就不用花时间再自己造一遍了。
+ 2. 使用 Forge 可以保证你的 Mod 的和其他人的 Mod 的基本兼容。
+ 很久很久以前的 Minecraft Mod(具体来说是 beta 时代甚至更早)是直接拖进 `minecraft.jar` 本体中安装的。在那时,同时装两个甚至更多 Mod 是件难事。
+ 专门的 Mod 加载器的出现改变了这个现状。Mod 加载器提供了一套标准化的和 Minecraft 打交道的方式,从而允许两个甚至更多 Mod 同时对同一个地方进行修改(比如注册方块)。
+ 在那个时候有各种各样的 Mod 加载器,但最终只有 Forge 和 FML 活了下来,最后这俩还合并了。
diff --git a/docs/preparing/gradle-ide.md b/docs/preparing/gradle-ide.md
deleted file mode 100644
index 6b7a339..0000000
--- a/docs/preparing/gradle-ide.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Gradle & IDE
-
-> Gradle 是一个构建工具。它可以帮你搞定构建 Java 项目中遇到的各种问题。
-> 当然,你也可以再来一个 IDE。
-
-## Gradle
-
-你不需要知道 Gradle 是啥,你只需要知道你需要用到它就行了。
-
-## IDE
-
-你可以使用 {{ide[0]}}、{{ide[1]}} 或 {{ide[2]}} 来开发模组。
-
-::: warning
-虽然 IDE 不是必须,但是我们建议你选择 IntelliJ IDEA 或者 Eclipse 作为你的IDE,它可以帮助你很多。
-:::
-
-
-
diff --git a/docs/preparing/gradle.md b/docs/preparing/gradle.md
new file mode 100644
index 0000000..abb671d
--- /dev/null
+++ b/docs/preparing/gradle.md
@@ -0,0 +1,25 @@
+# Gradle
+
+> Gradle helps teams build, automate and deliver better software, faster.
+> (Gradle 帮助开发团队更快地构建、自动化并发布更好的软件。)
+> \- https://gradle.org
+
+Gradle 是一个构建工具(Build Tool)。它可以帮你搞定构建 Java 项目中遇到的各种问题。
+
+## 我为什么需要 Gradle?
+
+开发一个 Mod 需要做的事情并不只是编译 Java 源码那么简单。你前前后后需要做的事情大概有:
+
+ - 下载所有的依赖项
+ - 编译然后打包,中间需要[重混淆](mcp.md)
+ - 启动游戏进行调试
+ - 签名
+ - 自动上传发布
+ - ……
+
+Gradle 的用途就是让这些工作可以一行命令就能完成,你就不用再手动操作了。
+
+## 从哪下载 Gradle?
+
+Forge 的 [MDK](mdk.md) 中自带了 Gradle Wrapper,它可以自动在第一次运行时下载 Gradle。
+
diff --git a/docs/preparing/ide.md b/docs/preparing/ide.md
new file mode 100644
index 0000000..d293c47
--- /dev/null
+++ b/docs/preparing/ide.md
@@ -0,0 +1,39 @@
+# IDE
+
+集成开发环境(Integrated Development Environment,IDE)是一种特殊的软件,它通常包含了你在开发程序时可能会用到的任何东西,比如:
+
+ - 依赖管理
+ - 代码高亮
+ - 代码补全
+ - 代码生成
+ - 自动排版
+ - 静态分析
+ - 构建
+ - 运行与调试
+ - 对各种工具(Git、Gradle 等)的兼容
+ - ……
+
+简单来说就是一站式服务。
+
+## 我选什么 IDE 好?
+
+你可以使用 {{ide[0]}}、{{ide[1]}} 或 {{ide[2]}} 来开发模组。
+
+::: warning
+虽然 IDE 不是必须,但是我们建议你选择 IntelliJ IDEA 或者 Eclipse 作为你的IDE,它可以帮助你很多。
+:::
+
+
\ No newline at end of file
diff --git a/docs/preparing/mdk.md b/docs/preparing/mdk.md
index 06372e6..f5d0b24 100644
--- a/docs/preparing/mdk.md
+++ b/docs/preparing/mdk.md
@@ -1,11 +1,13 @@
# MDK
-> MDK 是 Mod Development Kit 的简称,它用于搭建 forge mod 的开发环境。
+Mod Development Kit(Mod 开发套件)简称 MDK,你只要用它就可以简单搭建 Forge mod 的开发环境。
## 下载
-打开 [forge 的官网](https://files.minecraftforge.net/),选择你需要的版本,点击下载 MDK。
-
+ 1. 打开 [Forge 的下载页](https://files.minecraftforge.net/)
+ 2. 此时你应该能看到“Downloads for Minecraft Forge”。
+ 3. 你有两个选择:左边的 Latest 和右边的 Recommended。
+ 4. 选一个你想用的版本,然后点 Mdk 按钮即可。你可能需要等五秒跳过广告。
::: tip
Recommended:推荐版。