在插件中使用 MCP
ForgeGradle 是个集成了 MCP 工作流的 Gradle 插件,有了它就可以让 Gradle 来自动搞定工作环境的部署以及编译期重混淆等工作。
注解
既然说到 ForgeGradle 是个 Gradle 插件,那么我们在这篇文章中也自然就假定你使用 Gradle 作为你的插件构建系统。如有疑问,请参阅 设置 Gradle 。
配置 ForgeGradle
你现在可以部署下列两种环境中的任意一种:
原版环境:同时支持 SpongeVanilla 和 SpongeForge 下的插件开发。
Forge环境:仅支持 SpongeForge 环境下的开发,不支持 SpongeVanilla 。
注解
原版工作环境可以覆盖绝大多数情况。但有鉴于 MinecraftForge 还修改了 Minecraft 的底层,所以这里不能排除 SpongeVanilla 和 SpongeForge 有不同行为的可能。所以,在使用 MCP 调用内部实现时,务必在两个平台上都测试一遍。
选择 MCP 映射表版本
配置 MCP 工作环境时需要指定 MCP 映射表的版本,以供反混淆之需。当前可用版本可在 MCPBot 导出的页面 中找到。
映射表分两种版本:一种是稳定版 (stable version) ,每隔一段时间发布一次,名称相对固定;另一种是每日快照 (daily snapshots) ,正如其名,它每天发布一次,其中包含最新的映射变动,也因此不太稳定。如果你并不是很需要这些新确定的反混淆名,请使用稳定版的映射。
找到合适的版本后,点击版本号对应的按钮,在弹出的下拉菜单中选择“Use in ForgeGradle” (在 ForgeGradle 中使用),然后复制弹窗中形如 mappings = xxxx
的内容并覆盖你的 Gradle 构建脚本(build.gradle
)中的对应内容(具体位置见下):
原版工作环境
buildscript {
repositories {
maven {
name = 'forge'
url = 'http://files.minecraftforge.net/maven'
}
}
dependencies {
classpath 'net.minecraftforge.gradle:ForgeGradle:2.2-SNAPSHOT'
}
}
plugins {
id 'org.spongepowered.plugin' version '0.8.1'
id 'net.minecrell.vanillagradle.server' version '2.2-3'
}
minecraft {
version = '1.10.2'
// TODO: Replace with your mappings version, e.g. snapshot_20170120
mappings = 'YOUR_MAPPINGS_VERSION'
}
Forge工作环境
buildscript {
repositories {
maven {
name = 'forge'
url = 'http://files.minecraftforge.net/maven'
}
}
dependencies {
classpath 'net.minecraftforge.gradle:ForgeGradle:2.2-SNAPSHOT'
}
}
plugins {
id 'org.spongepowered.plugin' version '0.8.1'
}
apply plugin: 'net.minecraftforge.gradle.forge'
minecraft {
forgeVersion = '1944' // TODO: Configure Forge build here
// TODO: Replace with your mappings version, e.g. snapshot_20170120
mappings = 'YOUR_MAPPINGS_VERSION'
}
部署工作环境
每次更新 Minecraft 版本后,抑或更新映射表版本后,又或你只是需要重新在 IDE 中导入项目时,你都需要用 Gradle 重新配置一遍开发环境。不过这配置十分简单:在导入前让 Gradle 执行 setupDecompWorkspace
这个任务即可。
gradle setupDecompWorkspace
然后你就可以按 设置 Gradle 中说的那样导入项目了。如果你已经导入项目了,记得在 IDE 中刷新项目,以确保其识别到的是最新的 Minecraft 及其依赖库。
构建插件
ForgeGradle 会在编译时自动将你的插件重混淆至 Searge 名,这样你的插件就可以在生产环境中使用了。有一点要牢记:要用 build
任务才有效果,直接用 jar
任务是没有效果的。
gradle clean build