【Minecraft】CurseGradleを使ってCurseForgeへ自動アップロードする方法

# 【Minecraft】CurseForgeへ自動アップロードする方法

# はじめに
大手Mod配布プラットフォームであるCurseForgeに自作ModをCurseGradleを使ってGradleでアップロードできます。
build.gradle を変更するだけでアップロードできるので、一度設定してしまえば楽にアップロードできます。

毎度ウェブ開いてModをリリースするのって面倒ですからこういうの使って効率化していくこともできます。

## この記事の前提
- Windows 11での操作を前提としていますので、そうではない場合は適宜読み替えてください
- CurseForgeのアカウントを持っていること
- 既にCurseForgeにプロジェクトを作成していること
- 自作Modを作成していること
- Gradleでビルドできること

以上のことを前提として話を進めていきます。

# API Token の作成
まずはAPI Tokenを作成します。

(1) 右上のアイコンをクリックして、**Settings**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015774/4efdfa72-b72f-5d08-7a9d-bf5053471cb7.png)

(2) **General Settings**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015774/2b6c751e-f9d4-60be-b8f3-7b5cabffa9b9.png)

(3) **My API Tokens**をクリックします。

(4) トークン名を入力して、**Generate Token**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015774/862a8c4d-ade7-5ae7-5b68-3c5965daaf82.png)

トークン名はなんでもいいのですが、私はとりあえずupload_tokenにしました。

(5) トークンが生成されるので、コピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015774/2fc8ffb5-c53d-3157-ee01-d68b260a42b8.png)

# 環境変数でAPI Tokenを設定 (任意)
:::note info
Windows 11での操作を前提としていますので、そうではない場合は適宜読み替えてください (二度目)
:::

Gitのリモート先を設定している場合、トークンを間違えてコミットしてしまうと問題なので環境変数を使いましょう。
それにこうすることで他のプロジェクトでも使い回せますし

開く方法はいくつかありますが、ここではタスクバーの検索を使って開く方法を紹介します。

(1) 検索バーに「環境変数」と入力して、**環境変数を編集**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015774/1d66828e-b538-a0b6-76ae-74f1300c9577.png)

(2) ユーザー環境変数側(上)の**新規**をクリックします。(システム環境変数側でもいいですが、その場合はシステム環境変数の編集を開く必要があります)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015774/5f4f67f8-d7d9-c1c2-56a9-d0bc64757202.png)

(3) 変数名に`CURSEFORGE_TOKEN`、変数値に先ほどコピーしたトークンを入力して、**OK**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015774/3adc37db-227a-fec5-f51f-09d619568302.png)

トークンがコピーできていなければ再度General SettingsのMy API Tokensからコピーしてください。

# build.gradle の設定

(1) pluginsのところに
- `id 'com.matthewprenger.cursegradle' version '1.+'`

を追加します。plugins {} がなければpluginsブロックを作成してください。

```build.gradle
plugins {
    [...]
    id 'com.matthewprenger.cursegradle' version '1.+'
}
```

(2) curseforgeブロックを追加します。

```build.gradle
// CURSEFORGE_TOKEN環境変数が設定されている場合、curseforgeブロックを追加
if (System.getenv("CURSEFORGE_TOKEN") != null) {
    curseforge {
        apiKey = System.getenv("CURSEFORGE_TOKEN")
        project {
            id = '123456' // Project ID
            releaseType = 'release' // release, beta, alpha
            changelog = '' // 変更点
            
            addGameVersion '1.12' // ゲームバージョン
            addGameVersion '1.12.1'
            addGameVersion '1.12.2'
            
            // 依存関係
            relations {
                requiredDependency 'fabric-api' // 前提ModのProject IDもしくはSlug (SlugはURLの最後の部分)
                optionalDependency 'modmenu' // 前提Mod (任意)
            }
            
            mainArtifact(remapJar)
        }
        options {
            // forgeGradleIntegration = false
        }
    }
}
```

Project IDは以下のようにCurseForgeのプロジェクトのページの右のサイドバーにあるAbout ProjectのProject IDに記載されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015774/a68654b8-b7ca-d32c-396b-7a0a6cee79d0.png)



Architectury LoomやらGradleでサブプロジェクトがある場合は、
```build.gradle
subprojects {
    apply plugin: "com.matthewprenger.cursegradle"
    [...]
    
    curseforge {...}
    
    [...]
}
```
上記のように`apply plugin: ...`で適用してください。

# アップロード
あとはGradleタスクを実行するだけです。
```sh
gradlew curseforge
```

IntelliJ IDEAの場合は右のGradleタブからでもタスクを実行できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1015774/4ce77841-7872-1b75-c58b-f04d474b9488.png)

アップロードが成功すると、CurseForgeのプロジェクトの管理画面のFilesタブにアップロードされたファイルが表示されます。

# 最後に
これでワンクリック、タイプ一つでアップロードできるようになりました。
余談ですが、ModrinthではMinotaurというのもあります。