Eclipse+Forgeでマイクラのmod開発～デバッグ環境構築まで

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/76185035-c1f4-8ddd-69d5-745f08fe7256.png)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/c2a6ec22-0a57-d7b2-56ff-253c05aa5383.png" width="200"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/93067900-2961-d8bc-53b1-8748ad7f9c8c.png" width="237">
デバッグができるところまでできたのでいったんまとめ。今後も何かあれば追記予定。あ、ちなみに決まり文句ですが、modの導入その他ここに書かれていることは<font color="red">自己責任</font>でお願いしますね。

## 環境

* OS: Windows10
* Jdk: openjdk version "15.0.2" 2021-01-19<br>
※16.xでもいいかもだけどgradleやらなにやら色々変わってしまって心配だったので今回は15で。
* IDE: Eclipse IDE for Java Developers (Version 4.19.0)
* Buildship(Eclipseのgradleプラグイン): 3.0
* Minecraft: Java版 1.16.5
* Forge: 1.16.5

※Java,Eclipseやプラグイン関連のセットアップはこの記事の対象外なので別途調べてくださいませ

## ダウンロードからEclipseへのインポートまで

#### Minecraftのダウンロード

公式サイトからJava版を購入してくださいませ。
https://www.minecraft.net/ja-jp/
<font color="red">必ずJava版を購入してください。それ以外ではmodは使えないので。。間違えて買うと後悔します。</font>

#### forgeのインストール

こちらも公式サイトから。

https://files.minecraftforge.net/net/minecraftforge/forge/
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/aca75d15-9857-35b7-1550-b4b16575c9e6.png" width="300">
バージョンを選んで「Installer」を選んでダウンロード。今回は1.16.5。「Latest」を選ぶこともできるけど、Mdkは「Latest」を選んだことで色々エラーを吐きまくって困ったので「Recommended」を選ぶのが無難。変なサイトが開くけどこれは広告で、しばらく待つと矢印のところに「Skip」というボタンが現れるのでそこからダウンロードできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/eb882ec2-cbc9-c061-5436-60427d6dc85c.png)


マイクラを起動して「起動構成」を開く。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/49824f40-780a-afde-7528-8e3f82f3eddf.png" width="300">

「forge」を選んで「プレイ」。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/2d4aa43c-f7fd-cacf-55a9-e79ab7821808.png" width="500">
「Mods」トップ画面に表示されていればOK。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/33ee51be-ef6c-ae83-cf28-97b02b888707.png" width="400">


#### Mdk(Mode Development Kit)のダウンロード

先ほどと同じforgeの公式サイトから、同じバージョンのMdkをダウンロードする。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/32ee6b8a-bd26-c42e-8ee9-d655400bab6c.png" width="250">
ダウンロードされたzipファイルを解凍すると、build.gradleやLICENSE.txtといったファイルが出入っているのがわかるはず。

#### MdkのEclipseへのインポート

回答されたMdkのフォルダをどこか適当なところにコピりる。コピった場所がmodの開発フォルダになるので、まぁ、Eclipseのワークスペースとして使っているフォルダ配下が無難だろうね。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/4d4f4820-b277-c9dd-1c2f-629ebdff194e.png" width="400">
好きなフォルダ名に変える。これがのちにEclipse上のプロジェクト名になります

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/957e6b37-41c2-15b8-c64a-7a72fe15959b.png" width="400">
コピったフォルダにコマンドプロンプトで移動して、以下のコマンドでEclipse用の環境ファイルを吐き出させる。これが結構時間がかかった。。。（私の環境で初回だと10分ぐらい。。）

```
C:\eclipse-workspace\munecraftmod>gradlew genEclipseRuns
```

`BUILD SUCCESSFUL in xxxxx`が表示されればインポート準備完了。Eclipseにインポートします。メニューのImportから「Existing Gradle Project」でインポート。Buildshipが入っていないとこのメニューは出ないっす。（私の環境は日本語化していないのでこの記事もメニューの説明は英語。。）

forge1.16.5はgradleが6.8.1より新しくないとビルドできません。ただ、gradle 7.0はJDK自体も16にしないとダメだったりするので、6.8.1とJDk15が無難かなぁ、と思ってその組み合わせにしました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/127f0960-ae87-b041-1d4b-cadf2b90b0cb.png" width="400">

念のためRefresh Gradle Projectをしてインポートは完了。お疲れ様です。

#### 環境整備

ここから、modのビルドやデバッグができるように環境を整備していきます。まずはサンプルのmodをそのままビルドしてマイクラに登録できるか確認してみよう。
まずはインポートしたプロジェクトのGradle Tasksからbuildを実行。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/fbe54cbb-7e20-3b8c-484e-2f034c3fe1d2.png" width="350">


こちらも`BUILD SUCCESSFUL in xxxxx`が出れば成功。`build\libs\modid-1.0.jar`が生成されました。<font color="gray">buildフォルダはデフォルトのフィルタで表示されなくなっているのでフィルタの設定を変えるかExplorer等で確認してね。</font>
一度マイクラを起動します。gradleの`runClient`タスクをたたくことで起動できます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/296e8d18-c19c-5a25-b2e1-ce8d56baa966.png" width="300">

トップ画面で「Mods」を選んで表示された画面の左下の「Open mods folder」ボタンを押すとExplorerが起動。ここがbuildしたmodファイルを置く場所。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/03f67275-17d7-9d9e-4799-a5fd2e16c320.png" width="300">

開いたExplorerの場所にbuildの下にできてた`build\libs\modid-1.0.jar`をコピー。マイクラを一度終了してもっかい`runClient`をするとmodを読み込んでマイクラが起動。EclipseのConsoleにログが出ますが、その中にサンプルのmodが出力したログを見つけられればおめでとうございます。無事にビルドしたサンプルのmodが読み込まれました。
下の例だと20:46:08に`HELLO FROM PREINIT`のログが出力されてます。これって今回ビルドしたmodが出力してるものなので無事にロードされた模様。おめでとう！

ここまで確認したらコピーした`modid-1.0.jar`は削除しておいてください。そのままでも特に問題は出ないはずだけど、後々何等か競合とか悪さをする可能性があるのと、後の手順を踏むことで毎回自分でコピーする必要はなくなるので。


```
（省略）
[20:46:08] [Thread-0/DEBUG] [ne.mi.co.ForgeConfig/FORGEMOD]: Forge config just got changed on the file system!
[20:46:08] [Thread-0/DEBUG] [ne.mi.fm.co.ConfigFileTypeHandler/CONFIG]: Config file forge-common.toml changed, sending notifies
[20:46:08] [Thread-0/DEBUG] [ne.mi.co.ForgeConfig/FORGEMOD]: Forge config just got changed on the file system!
[20:46:08] [Worker-Main-5/INFO] [co.ex.ex.ExampleMod/]: HELLO FROM PREINIT</font>
[20:46:08] [Worker-Main-5/INFO] [co.ex.ex.ExampleMod/]: DIRT BLOCK >> minecraft:dirt
[20:46:08] [Forge Version Check/INFO] [ne.mi.fm.VersionChecker/]: [forge] Starting version check at https://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json
[20:46:11] [Forge Version Check/DEBUG] [ne.mi.fm.VersionChecker/]: [forge] Received version check data:
（省略）
```

## デバッグ環境を整える

デバッグ環境を整えるために、gradleのタスク経由ではなくEclipseのRunからマイクラを起動できるようにする。FileメニューのImportを選び「Run/Debug」>「Launch Configurations」を選ぶ。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/755b0a30-bbc3-a20d-1d33-3a28af5c9f1e.png" width="400">

「Browse...」で作ったプロジェクトのルートフォルダを選択。出てきたリストにすべてチェックを入れてFinish。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/81629259-94e9-3132-a335-4cd832c1872b.png" width="350">

Runメニューにある「Run Configurations...」を選ぶ。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/63c0be11-6aca-9e76-51f3-aaacddb09218.png" width="400">
Java Applicationのところに「runClient」ができているのでそれを選択してRun。無事にマイクラが起動すればOK。コンソールはまたログが出ているはず。ここまでやると自分でmodのjarファイルをコピーしなくてもEclipseのrunが自動的に開発中のmodのバイナリをMinecraftに読み込ませてくれるようになります。ちなみにEclipseから起動したMinecraftが読み込むバイナリは`[project_home]/bin`配下です。今後何かトラブったらここに期待通りのファイルができているかなど確認するとよいでしょう。

では、いざデバッグを。サンプルのmodにBreak Pointをつけて、上で作ったRun Configurationをデバッグモードで起動。ワクワク。。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191672/b53c075c-9374-f5a0-908d-27fd573bbf1c.png" width="400">

っしゃあああぁぁああぁぁぁぁ。ちゃんとBreak Pointで止まったね。これでデバッグの準備も完了！！！（ここまでたどり着くのに相当苦労した。。。）


## リンク集

## 必要ソフトウェア
modの導入、開発にほぼ必須となるForgeの公式サイト

https://files.minecraftforge.net/net/minecraftforge/forge/

## リファレンス
Mod開発のイロハをよくまとめてくださっているサイト。かなり参考にさせてもらってます。

https://www.tntmodders.com/tutorial/

こちらも少し古いですがmod開発関連の記事を掲載されていて参考にしています。

https://www.gopichandmod.com/

Forgeの導入方法やデバッグ方法が書いてあるのでいずれ参照。情報がだいぶ古そうなので、
今の環境での内容を整理していずれ記事にしたい。。

https://mcmodding.jp/modding/index.php/MinecraftForge%E5%B0%8E%E5%85%A5%E6%89%8B%E9%A0%86

英語だけど環境構築の方法が書かれているブログ。最初からこれが見つけられれば早かったかも。。
英語で読める人はこちらもどうぞ。

https://techwiseacademy.com/minecraft-modding-setting-up-your-environment-in-windows-10-minecraft-16-4/