Table of Contents

使用 Minotaur 在 Modrinth 上发布模组

Minotaur 是一个和 CurseGradle 很相似的 Gradle 插件。 这个页面只是简单的介绍一下 Minotaur 的基础用法,然后你需要在它的文档中学习更加深入的知识

基础

在此之前,添加 minotaur 插件到你的 build.gradle 文件的插件列表当中,像是以下这样:

plugins {
    id "com.modrinth.minotaur" version "2.+"
}

现在你可以创建一个新的 Gradle 任务去发布你的模组到 Modrinth 了。

这里有一个基础的示例。

import com.modrinth.minotaur.TaskModrinthUpload
 
modrinth {
    token = 'mySecretToken' // 这里请使用环境变量!默认为 `$MODRINTH_TOKEN`。
    projectId = 'AABBCCDD' // 你的 Modrinth 项目的 ID。Slug 不行。
    versionNumber = '1.0.0' // 模组版本,最好要符合 SemVer。如果未指定,则会使用 `version` 声明
    versionName = 'My awesome release' // 版本标题。如果未指定,则使用 versionNumber
    uploadFile = remapJar // 告诉 Minotaur 使用重映射的 jar 文件
    gameVersions = ['1.18', '1.18.1', '1.18.2'] // 版本支持的游戏版本的数组
    loaders = ['fabric'] // Self-explanatory.
    dependencies = [
            new ModDependency('P7dR8mSH', 'required') // 创建一个必需的 Fabric API 依赖
    ]
}

这里获得你的 Modrinth 令牌。您可以使用此令牌与 Minotaur 一起访问 Modrinth API。

现在,当你运行 gradle modrinth 时,你应该看到你的模组已经被编译并上传到 Modrinth ,像是这样:

但是,这可能会受到限制,有时会重复上传,因为每次要发布版本时都需要编辑这些值。 这便是 Java stoutstin 的用武之地了。

让我们更加深入一些!

所以,你有一个基本的实现。让我们让这个实现更加动态,以允许您在运行任务时通过命令行输入值。通常情况下,Gradle 任务不会这样做,环境变量或类似的静态源可用于这些值,但本教程留作有需要的人使用:

首先,我们需要创建一个 BufferedReader。为什么是 BufferedReader 而不是 System.out.readLine()?因为 System.out.readLine() 仅适用于命令终端,不适用于普通 IDE 的终端,例如 Eclipse、IntelliJ Idea 和 Visual Studio Code。由于 Gradle 任务最常在 IDE 中运行,因此最好使用 BufferedReader,因为它支持 IDE 的终端。

在你的 Modrinth 任务的顶部添加一个新的 BufferedReader ,它为 System.in 产生一个缓冲区。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

现在你可以通过简单的调用 br.readLine() 方法来收集用户的输入了。

现在把这个添加到我们的任务中,并向里面添加更多的数据,比如 Markdown changelog ,并使版本名称与语义版本号不同。

modrinth {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("输入 Modrinth 令牌:");
    token = br.readLine(); // 输入你从此教程的“基础”部分获取到的令牌。
    projectId = "" // 在这里输入你的 Modrinth 项目 ID。
    System.out.println("输入 version number:");
    versionNumber = br.readLine();
    System.out.println("输入 version name:");
    versionName = br.readLine();
    uploadFile = remapJar
    System.out.println("输入游戏版本(有效的游戏版本参见 minotaur docs):");
    gameVersions = [br.readLine()];
    System.out.println("Enter changelog:");
    changelog = br.readLine();
    loaders = ["fabric"]
}

现在,当运行 gradle modrinth 时,它会要求你提供一些贴心的用户输入。你甚至可以使用 Swing 或 JavaFX 来制作 GUI。真是炫酷无比!

Minotaur 与 CurseGradle 一起使用是很常见的现象。你可以将这两个任务合并在一起。在 Modrinth 完成后调用 CurseGradle 任务:

task publishToModSites {
    publishToModSites.dependsOn modrinth
    publishToModSites.dependsOn curseforge
}

将 Minotaur 由 1.x 更新到 2.x

Minotaur 2.x 加入了一些大改,改变了你的构建脚本的格式。 首先,Minotaur 不是注册自己的 publishModrinth 任务,而是自动创建 modrinth 任务。你可以将 task publishModrinth(type: TaskModrinthUpload) { 这一行直接替换成 modrinth {

要指明支持的 Minecraft 版本和模组加载器,必须使用 gameVersionsloaders 数组。这些的语法都非常清楚。

不再使用 releaseType,而应该使用 vevrsionType。这个在 v1.2.0 中自动改变了,但是很少的构建脚本从 v1.1.0 进行了迁移。

最后,依赖也是数组,其需要 ModDependencyVersionDependency(可能需要从 com.modrinth.minotaur.dependencies 包)中导入。第一个参数是项目或者版本的 ID(字符串),第二个参数是依赖的类型:requiredoptionalunsupported