MinecraftForgeでマインクラフトのプレイ／開発環境を用意する手順

マインクラフトにはJavaで書かれたバージョンがあり、MinecraftForge というプロジェクトを利用して改造することが可能です。
今回は最新ソースの取得からマインクラフトの起動、シングルプレイ、マルチプレイまでの手順をまとめました。

----


# 必要なもの

- PC
    - JDKとGitが使えればWindows, Mac, LinuxOSはどれでも大丈夫です。（Windows10とMacOS Catalinaで動作確認しました）
- JDK11
    - インストールしていない場合は AdoptOpenJDK 11 のインストールをお勧めします。
    - https://adoptopenjdk.net/?variant=openjdk11&jvmVariant=hotspot
    - Amazon Corretto 11やJDK12以上は今の所コンパイルエラーになるようです。
- Git
    - インストールしていない場合は https://git-scm.com/downloads からダウンロードしてインストールしてください。

----

# GitHubからソースを取得

MinecraftForge は Github 上にありますので Git clone コマンドでソースを取得します。
https://github.com/MinecraftForge/MinecraftForge

Windowsならコマンドプロンプト、Macならターミナルを起動して下記コマンドを実行します。
作業フォルダは /dev とします。

```shell
cd /dev
git clone https://github.com/MinecraftForge/MinecraftForge.git
```

----


# Gradlewで実行

ソースには gradlew が含まれているのでJDKさえあればいきなり実行可能です。

```shell
cd MinecraftForge
./gradlew setup forge_client
```

※Windowの場合は ./ は不要です。

----

初回はいろいろダウンロードするのでしばらく時間がかかりますが、待っていると下記画面（クライアント）が起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/bc8500f4-841c-efa1-bc90-45305f354ca3.png)

日本語になっていない場合は、![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/37056845-1177-1af3-052c-53b266a1c6cb.png) から日本語を選べば切り替え可能です。

シングルプレイはそのままプレイ可能です。
マルチプレイは、サーバを起動する必要があります。

----

# サーバを起動する

サーバも下記コマンド1つで起動可能です。
※クライアントを起動したままだとログファイルが競合してエラーとなるので、終了した状態で実行してください。

```shell
./gradlew forge_server
```

クライアントのようにそのまま起動すると期待しましたが、以下のメッセージが出て止まってしまいます。

```
[19:22:06] [main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.


FAILURE: Build failed with an exception.
```

eula.txt を見てください。とあるので、
/dev/MinecraftForge/projects/forge/run/eula.txt を開きます。

```
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#Sun Apr 12 19:19:47 JST 2020
eula=false
```

https://account.mojang.com/documents/minecraft_eula
のMINECRAFT エンド ユーザー ライセンス条項に同意する場合は 3行目の eula=false を eula=true に変更します。

```
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#Sun Apr 12 19:19:47 JST 2020
eula=true
```

ついでに、 server.properties を開き、
27行目あたりにある online-mode=true を online-mode=false に変更します。
開発用のクライアントはログインする仕組みがないのでこれをしないとマルチプレイで接続できないようです。

再度サーバ起動コマンドを実行します。

```shell
./gradlew forge_server
```

しばらく待つと、下記の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/c4a4ef78-1ab9-1498-cc93-c34b76937ba3.png)

これで、LAN内の他のパソコンから マルチプレイで接続すれば同じ世界でプレイすることができます。

----

# LAN内の別パソコンからサーバに入る

## サーバを起動したパソコンのIPアドレスを調べます。

Windowsなら ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/fae31999-64a8-7776-6b19-7dea1e933383.png) 画面右下のネットワークアイコンをクリックしてプロパティを選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/79a4bb3e-9d9f-6a07-8cd2-b0a2287d16e3.png)
下のほうにスクロールすると IPv4アドレスという項目にあるIPアドレスがそのパソコンのIPアドレスになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/3e900eec-28a2-49bf-5a86-3f473e3b2861.png)

Macなら画面左上のアップルマークをクリック、システム環境設定のネットワークを選んで状態：接続済みの近くにIPアドレスが表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/c2c1dcab-0a8e-603a-8835-0005c1292b99.png)

----

接続したいパソコンでクライアントを起動して、マルチプレイ／ダイレクト接続にすすみ、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/984a4d85-98a3-469b-fbfa-ec7d18a01940.png)
にそのIPアドレスを入れて「サーバーに接続」で接続できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/0561f700-7cb9-5879-f4d1-93335df2721f.png)

----

# 複数同時プレイの設定

マルチプレイを普通にしようとするとユーザ名が Dev となり同時に同じサーバにログインできないので、
起動時にユーザ名を指定します。

```
gradlew forge_client --args="--username 任意のユーザ名"
```

----

# バージョン更新

https://github.com/MinecraftForge/MinecraftForge
の下のほうに最新バージョンが表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82535/8c505c05-6b3c-dd41-f736-e2845ac4c7a6.png)

新しいバージョンが出て、更新したい場合は git pull を実行し、gradlew で起動しなおせば更新されます。

```
cd /dev/MinecraftForge
git pull
gradlew forge_client または forge_server
```