Minecraftサーバー 作ろう (Minecraft1.18 + Spigot + Geyser + Floodgate)

[昨年の投稿でMinecraftサーバーを立ててみた](https://qiita.com/AnaKutsu/items/499acd26d16cfac02759)のですが、結局あまり使われず(笑)、ほぼ僕がたまにログインして遊ぶくらいのサーバーになってしまっています。

Minecraft 1.18 がリリースされたのでアップデートを行ってみたのですが、JavaやFloodgateのバージョンが少し変わったので、昨年の記事をリライトしてみました。

-----

### 環境

* CPU: 4コア, メモリ: 8GB, HDD: 50GB
* Oracle Linux 8.5
* Spigot
* Geyser
* Floodgate

### Linux の準備

OSのインストール方法はウェブ上にいっぱいあるので割愛

* SSHは鍵認証のみに
* システム最新化
* アップデートの自動化
* ファイアウォールの設定
   * 25565/tcp
   * 19132/udp
   * 19133/udp

あたりをやっておきましょう。

### JDKのインストール

```
# dnf -y install java-17-openjdk-headless
```

```
$ java --version
openjdk 17.0.1 2021-10-19
OpenJDK Runtime Environment 21.9 (build 17.0.1+12)
OpenJDK 64-Bit Server VM 21.9 (build 17.0.1+12, mixed mode, sharing)
```

### Spigotのインストール

あとで必要になるので、先にサーバー実行ユーザーを作成を作成しておきましょう。

```
# mkdir /opt/minecraft
# groupadd minecraft
# useradd --system --shell /bin/bash --home /opt/minecraft -g minecraft minecraft
# chown minecraft:minecraft /opt/minecraft
```

[SpigotのWiki](https://www.spigotmc.org/wiki/buildtools/#running-buildtools)を参考にビルドします。

ビルドに必要なアプリケーションをインストールしておきます。

```
# dnf -y install git wget
```

Spigotをビルド

(Spigotの安定版は1.17のようなので、1.18をビルドしたい場合は --rev パラメータでバージョンを指定します)

```
# su - minecraft
$ mkdir survival
$ cd survival
$ wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
$ java -jar BuildTools.jar --rev 1.18
```

EULAに同意

```
$ java -jar spigot-1.18.jar
$ vi eula.txt
```

eula=false を eula=true へ変更

```eula.txt
:
eula=true
```

メモリ使用量をサーバーのスペックに合わせておきます。

```
# vi /opt/minecraft/survival/server.conf
```
```server.conf
MCMINMEM=512M
MCMAXMEM=7168M
```

これでとりあえず最低限起動する状態になりました。

続いて、[Tutorials/Server startup script](https://minecraft.gamepedia.com/Tutorials/Server_startup_script)を参考に起動スクリプトを作成します。

Spigotを仮想端末内で実行するために screen をインストールします。

```
# dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
# dnf -y install screen
```

systemdスクリプトをダウンロード

```
# wget -O /etc/systemd/system/minecraft@.service https://raw.githubusercontent.com/agowa338/MinecraftSystemdUnit/master/minecraft%40.service
```

RHEL8系は /run/screen のパーミッションを変更しないといけないらしいので、ダウンロードしたスクリプトを修正します。

```
# vi /etc/systemd/system/minecraft@.service
```
```minecraft@.service
  :
# Uncomment this to fix screen on RHEL 8
ExecStartPre=+/bin/sh -c 'chmod 777 /run/screen'
  :
```

自動実行を有効化します。

```
# systemctl enable minecraft@survival
```

ひとまずここまでの動作確認で一度起動してみましょう。

```
# systemctl enable minecraft@survival
# systemctl stop minecraft@survival
```

/opt/minecraft/survival/logs/latest.log を確認してエラーになっていないか確認しましょう。

### Geyser・Floodgateのインストール

[GeyserMCのサイト](https://geysermc.org)のDownloadボタンを選択、リンク先ページの「最新成功ビルドの成果物」から「Geyser-Spigot.jar」をダウンロードします。

```
# su - minecraft
$ cd /opt/minecraft/survival/plugins/
$ wget https://ci.opencollab.dev//job/GeyserMC/job/Geyser/job/master/lastSuccessfulBuild/artifact/bootstrap/spigot/target/Geyser-Spigot.jar
```

[FloodgateのGithub Wiki](https://github.com/GeyserMC/Floodgate/wiki)の「Downloads are available here.」リンクを選択、リンク先ページの「最新成功ビルドの成果物」から「floodgate-spigot.jar」をダウンロードします。

```
# su - minecraft
$ cd /opt/minecraft/survival/plugins/
$ wget https://ci.opencollab.dev/job/GeyserMC/job/Floodgate/job/master/lastSuccessfulBuild/artifact/spigot/target/floodgate-spigot.jar
```

一度サーバーを起動してプラグインのデフォルト設定ファイルを生成させます。

```
# systemctl start minecraft@survival
```

BedrockユーザーがXbox Liveアカウントのみで接続できるように設定します。

```
# vi /opt/minecraft/survival/plugins/Geyser-Spigot/config.yml
```
```config.yml
  :
  auth-type: floodgate
  :
```

Spigotを再起動して準備完了です。

```
# systemctl restart minecraft@survival
```

-----

JavaエディションBedrockエディションから接続できるか試してみましょう。

Floodgateがバージョン2になってから、Bedrockエディションのユーザースキンが表示されるようになったようなのですが、自分が軽く試してみた限りは表示されないようです。設定の問題かもしれませんが、[スキンアップロードで時間がかかる](https://github.com/GeyserMC/Floodgate/wiki/Features#what-is-skin-uploading)というようなことも記載されているので、少し様子見でしょうかね。