そうだ Minecraftサーバー 作ろう (Oracle Linux + Spigot + Geyser)

[前回の投稿でBedrock Serverを立ててみた](https://qiita.com/AnaKutsu/items/cab478fa876e1e08ffe5)のですが、よく考えたらMacの人が参加できないなぁと思ったのでJava版サーバーに切り替えて、GeyserでBedrock版をカバーすることにしました。

遊びで気軽に考えていたのになんだか壮大になってしまった...

-----

### 環境

* 会社のESXi上に仮想マシン作成
* CPU: 4コア, メモリ: 8GB, HDD: 50GB
* Oracle Linux 8.3  
  (慣れたRHEL系で。CentOS 8 が先行き不透明なため)
* Spigot 1.16
* Geyser + Floodgate

### Linux の準備

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

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

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

### JDKのインストール

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

```
$ java --version
openjdk 11.0.9.1 2020-11-04 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.9.1+1-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.9.1+1-LTS, 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をビルド

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

EULAに同意

```
$ java -jar spigot-1.16.4.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
```

### 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
```

[GeyserのFloodgate wiki](https://github.com/GeyserMC/Geyser/wiki/Floodgate)のDownloadリンクを選択、リンク先ページの「最新成功ビルドの成果物」から「floodgate-bukkit.jar」をダウンロード

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

Spigotを再起動

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

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

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

Bedrockユーザーの名前のプレフィックスを変更
([*だと一部のプラグインでうまく処理できないよう](https://novablog.work/minecraft-crossplay/)なのでASCII文字に変更)

```
# vi /opt/minecraft/survival/plugins/floodgate-bukkit/config.yml
```
```config.yml
  :
username-prefix: "BE_"

  :
```

Spigotを再起動

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

-----

まだJava版の動作確認ができていないけど、こんな感じで動くんじゃなかろうか!?