在插件中使用 MCP

警告

这些文档是为 SpongeAPI 7 编写的,可能已经过时。 如果你觉得你可以帮助更新它们,请提交一个 PR!

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 中使用),然后复制弹窗中形如 YOUR_MAPPINGS_VERSION 的内容并覆盖你的 Gradle 构建脚本(build.gradle)中的对应内容(具体位置见下):

原版工作环境

buildscript {
    repositories {
        maven {
            name = 'forge'
            url = 'https://files.minecraftforge.net/maven'
        }
    }

    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
    }
}

plugins {
    id 'org.spongepowered.plugin' version '0.9.0'
    id 'net.minecrell.vanillagradle.server' version '2.2-6'
}

dependencies {
    compile 'org.spongepowered:spongeapi:7.1.0'
}

minecraft {
    version = '1.12.2'
    // TODO: Replace with your mappings version, e.g. stable_39 or snapshot_20180814
    mappings = 'YOUR_MAPPINGS_VERSION'
}

Forge工作环境

buildscript {
    repositories {
        maven {
            name = 'forge'
            url = 'https://files.minecraftforge.net/maven'
        }
    }

    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
    }
}

plugins {
    id 'org.spongepowered.plugin' version '0.9.0'
}

dependencies {
    compile 'org.spongepowered:spongeapi:7.1.0'
}

apply plugin: 'net.minecraftforge.gradle.forge'

minecraft {
    // TODO: Configure Forge build here
    forgeVersion = '2705'
    // TODO: Replace with your mappings version, e.g. stable_39 or snapshot_20180814
    mappings = 'YOUR_MAPPINGS_VERSION'
}

建议使用和你使用的 SpongeForge 一致的 Forge 版本。

备注

确保你使用对应的 Minecraft 版本。使用错误的版本可能会在准备开发环境或开发中遇到莫名其妙的错误。参见 获取实现的Minecraft版本

部署工作环境

每次更新 Minecraft 版本后,抑或更新映射表版本后,又或你只是需要重新在 IDE 中导入项目时,你都需要用 Gradle 重新配置一遍开发环境。不过这配置十分简单:在导入前让 Gradle 执行 setupDecompWorkspace 这个任务即可。

gradle setupDecompWorkspace

然后你就可以按 设置 Gradle 中说的那样导入项目了。如果你已经导入项目了,记得在 IDE 中刷新项目,以确保其识别到的是最新的 Minecraft 及其依赖库。

构建插件

ForgeGradle 会在编译时自动将你的插件重混淆至 Searge 名,这样你的插件就可以在生产环境中使用了。有一点要牢记:要用 build 任务才有效果,直接用 jar 任务是没有效果的。

gradle clean build