Minecraftサーバーの構築

# はじめに
Minecraftのサーバーが意外と簡単に作成できることを知ったので、備忘録として記録しておきます。Minecraftは複数人で同じサーバーに接続することによって、マルチプレイを楽しむことが出来るようです。

# サーバーの用意

Minecraftのクライアントがインターネットから接続する場合はパブリックIPを持ったサーバーが必要になります。今回はGoogle Cloud上のCompute Engineを利用しました。

## VMインスタンスを起動

下記のようなVMを利用

| 設定項目 | 内容 |
|:-|:-|
| OS | Debian GNU/Linux 12 (bookworm) |
| グローバルIP | あり |
| ファイアウォール | インバウンド tcp:25565 許可|

## 必要なパッケージとMinecraftサーバーのインストール

最新のMinecraftサーバーを下記からダウンロードしてセットアップを行います。

https://www.minecraft.net/ja-jp/download/server

```bash:必要なパッケージのインストール
#!/bin/bash
sudo apt-get update
sudo apt-get install -y default-jre-headless
sudo apt-get install wget
sudo apt-get install -y screen
```


```bash:Minecraftのダウンロードと初期化
sudo mkdir -p /home/minecraft
cd /home/minecraft
sudo wget https://piston-data.mojang.com/v1/objects/8dd1a28015f51b1803213892b50b7b4fc76e594d/server.jar
sudo java -Xmx1024M -Xms1024M -jar server.jar nogui
```

初期化すると下記のようなEULAへの承諾が必要な下記のメッセージが表示されるので
```
[ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
```

下記のeula.txtファイルを開いて```eula=true```と記載します。
```text:/home/minecraft/eula.txt 
#By changing the setting below to TRUE you are indicating your agreement to our EULA (http
s://aka.ms/MinecraftEULA).
#Sun Feb 11 03:00:57 UTC 2024
eula=true
```

その後にサーバーの起動コマンドを実行します。

```bash:サーバーの起動
sudo screen -S mcs java -Xmx1024M -Xms1024M -jar server.jar nogui
```

うまく実行できたら```Ctrl+A```を押して```Ctrl+D```を押すことでscreenから離脱します。

```bash:再接続する場合
sudo screen -S mcs
```

```bash:停止する場合
sudo screen -r -X stuff '/stop\n'
```

## Serverステータス確認

このサイトからMinecraft Serverとして動作しているかどうかを確認できます。

https://mcsrvstat.us/

## Minecraftクライアントからの接続

Minecraft Launcherの起動構成から起動するクライアントのバージョンを変更できます。

マルチプレイを選んで
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/6185d0ca-67fd-2aec-cb07-4baa4d257ef6.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/8486cbc4-7ce1-f608-5c72-eb28e2244f4e.png)

ダイレクト接続を選んで
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/9375c87e-f167-18be-e92a-f532558e1946.png)

サーバーのグローバルIP（外部IP）を打ち込むと接続できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/508cc944-122d-bb99-2c1f-8d925e74af7f.png)

# おわりに

試しにパソコンのMinecraftクライアントから接続してみたら、うまく接続することができました。ただ複数人実際にアクセスするとどうなるのか、そのあたりはよく分かりません。サーバーを再起動した場合でも、接続しなおすと同じところから再開できるようです。

## コストについて
ちなみに今回Google Cloudのe2-mediumというマシンタイプで試しましたが、東京リージョンでは1時間$0.04というお値段でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/6a2c3d42-075e-2d96-14c3-b84636f8abc8.png)

[市販のサービス](https://www.conoha.jp/game/function/minecraft/)を利用すると月1,000円くらい取るようなのでプレイする時だけ立ち上げておけば、そんなにお高くも無いように思いました。

## 課題
コンソールから進めた場合はこの手順でうまくいったのですが、下記の起動スクリプトだと最後の立ち上げコマンドを実行した場合、eulaの書き換えまではできるのですが最後の立ち上げがうまく実行されない模様。今後の課題です。
```bash:一気に実行する場合の起動スクリプト
#!/bin/bash
sudo apt-get update
sudo apt-get install -y default-jre-headless
sudo apt-get install wget
sudo apt-get install -y screen
sudo mkdir -p /home/minecraft
cd /home/minecraft
sudo wget https://piston-data.mojang.com/v1/objects/8dd1a28015f51b1803213892b50b7b4fc76e594d/server.jar
sudo screen -S mcs java -Xmx1024M -Xms1024M -jar server.jar nogui
sudo sh -c "echo eula=true > eula.txt"
# sudo screen -S mcs java -Xmx1024M -Xms1024M -jar server.jar nogui
```