raahii.meのブログのロゴ画像

ウェブログ

Minecraftで統合版とJava版がクロスプレイできるサーバーを建てる

まさかマイクラの鯖を建てる時がまた来るなんて…という感じでちょっと笑っていますが、高校生ぶり約10年越しにやったので備忘録を残す。

なぜサーバーを建てたいか

久しぶりにマインクラフトやるかとなった時に、スマホ版とPC版の両方のクライアントでクロスプレイしたくなったのがきっかけ。

Minecraftには、スマホやNintendo Switch等からプレイできるいわゆる統合版(Bedrock)とPCでプレイできるJava版がある。

JAVA 版と BEDROCK 版の違い

しかしどうやら、基本的にはエディションが同じでないと一緒にはプレイ出来ないらしい。その理由はおそらくプロトコルの互換性にあって、大きな違いとしてJava版はTCPを使っているのに対し、Bedrock版はUDPを使っているというのがある。

Bedrock Protocol - wiki.vg

調べたところ、自分でサーバーを立てれば解決策があるようだったのでやってみる。

GeyserMC

クロスプレイを可能にするソフトウェアにGeyserMCというものがある。これはBedrock版のパケットをJava版のパケットに変換してくれるプラグインで、統合版のユーザーもJava版向けのサーバーで一緒にプレイできるようになる。

GeyserMC/Geyser: A bridge/proxy allowing you to connect to Minecraft: Java Edition servers with Minecraft: Bedrock Edition.

またこの時、Bedrockのユーザーも最終的にはJava版として接続する形となるので、Java版のMinecraftアカウントを求められるが、これを回避するプラグインとしてFloodgateというのがある。

GeyserMC/Floodgate: Hybrid mode plugin to allow for connections from Geyser to join online mode servers.

SpigotMC

また◯◯MCか、という感じで最初どれが何の役割なのかわからなかったのだけれど、SpigotMCはMinecraft serverの実装の1つで、いわゆるサーバー本体となるJavaアプリケーションのようだ。

詳しくは把握していないが、modやpluginのサポートに違いがあるようで、サーバー実装にはいくつか種類がある。サーバー - Minecraft Japan Wiki

先ほど紹介したGeyserMCおよびFloodgateは、このSpigotMCのプラグインとして動くものになっている。

サーバーを建てていく

よってこんな感じの流れで構築ができる。

  1. 適当にサーバーを見繕う
  2. SpigotMCをインストールしてserverを起動する
  3. GeyserMCをプラグインとしてインストールする
  4. ファイヤーウォール周りを設定する

1. 適当にサーバーを見繕う

今回はConoHaの3core+2GBのVPS (Ubuntu)をさくっと1ヶ月契約した。 サーバースペックは同時接続の人数にもよるが、最低だと2core+2GBくらいあれば良さそう。

サーバー借りるの久しぶりすぎて、FWに弾かれてSSH出来んがってやつをやった。

2. SpigotMCをインストールしてserverを起動する

まずはSpigotMC (server app)を起動していく。下記のdocを見ればOK。

Installation | SpigotMC - High Performance Minecraft

最初にJDKをインストールする。 今回は spigot-1.20.4 を使うのでJava 17でOK。

sudo apt install openjdk-17-jdk -y

次にSpitgotMCのjarを手元でビルドする。ビルド済みのjarも入手できるが、DMCA回避のために必要な手続きらしい。

wget -O BuildTools.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
java -jar BuildTools.jar --rev 1.20.4

そしたら spigot-1.20.4.jar だけよしなに作業ディレクトリに移動して、下記のような起動スクリプトをつくる。Java heapの割当量は適宜調整。

#!/bin/bash
java -Xmx1G -jar ./spigot-1.20.4.jar nogui

起動するとこんな感じで色々とファイルが展開される。

$ tree -L 1
.
├── banned-ips.json
├── banned-players.json
├── ...
├── eula.txt
├── ...
├── plugins
├── server.properties
├── spigot-1.20.4.jar
├── spigot.yml
├── start.sh
├── usercache.json
├── whitelist.json
└── ...

初回は利用規約への同意が求められるので、eura.txt 内を eura=true に変更して再起動すればOK。

3. GeyserMCをプラグインとしてインストールする

次にGeyserMCのインストール。ちょっと驚いたのだけれど、プラグインのインストールはpluginsフォルダにjarを放り込んで再起動するだけで良い。とても簡単。

GeyserMC Wiki: Setup

Floodgateも必要なら導入する。同じような手順なので説明は割愛する。

GeyserMC Wiki: Floodgate Setup

プラグインも初回サーバー起動のタイミングでconfig等もろもろが生成されるようになっている。

plugins/Geyser-Spigot/config.yml を覗いてみると、次のようにbedrok向けには19132 portを、java向けには25565 portをlistenする設定になっていることがわかる。

bedrock:
  # The IP address that will listen for connections.
  # Generally, you should only uncomment and change this if you want to limit what IPs can connect to your server.
  # address: 210.170.166.144
  # The port that will listen for connections
  port: 19132
  ...
remote:
  ...
  # The port of the remote (Java Edition) server
  # For plugin versions, if address has been set to "auto", the port will also follow the server's listening port.
  port: 25565
  # Authentication type. Can be offline, online, or floodgate (see https://github.com/GeyserMC/Geyser/wiki/Floodgate).
  # For plugin versions, it's recommended to keep the `address` field to "auto" so Floodgate support is automatically configured.
  # If Floodgate is installed and `address:` is set to "auto", then "auth-type: floodgate" will automatically be used.
  auth-type: auto
  ...

これらの設定は版に応じたデフォルトポートなので変えなく良いが、仕組みとして把握しておく。また floodgate を導入する場合は下部の remote.auth-typefloodgate に変更すること。

4. ファイヤーウォール周りを設定する

最後に忘れがちなのがこれ。サーバーが問題なく起動すれば、内向けの UDP :19132TCP :25565 の通信を許可する。

今回はConoHaのVPS側のセキュリティポリシーと、OS側のfirewallの設定を追加した。

Happy Minecraft Life!

というわけで、楽しいマイクラライフを!