Minecraft: 統合版クライアントともクロスプレイできるJava版サーバの構築方法など

Minecraft: 統合版クライアントともクロスプレイできるJava版サーバの構築方法など
Page content

プレイ環境を問わずに遊びたい

Minecraftのサーバを某所LAN内に立ててみている (関連記事: Minecraft: マイクラサーバを多拠点利用するためのUDPポートフォワーディング [2022-11-04])。こどもが扱うNintendo Switchから接続するためにサーバの種類としては当初「Bedrock版」を選択したものの、自分のLinuxやmacOS環境から接続して遊べないことが致命的で悲しい。

良い解決方法はないのかと調べてみると、「Java版」サーバならば、パソコン (Linux, Mac, Windows) のJava版クライアントに加えて、Switchなどの統合版クライアントの両方から接続できるように実は拡張できるらしい。そこでごにょごにょやってみた。

今回行ったサーバ構築作業などを自分が後日思い出せるように、内容を簡単にメモしておきます。説明も簡素ですが、「こういうソフトウェアを使えばできるんだ」程度の情報として参考にはなるかと思います。

種別名称役割
サーバの本体PaperMCMinecraft Java版サーバの一種
サーバのpluginGeyserプロトコル変換を行ってJava版サーバへ統合版クライアントを接続可能にする
サーバのpluginFloodgateJava版サーバへJava版アカウント無しで接続可能にする

Step-1. クロスプレイなサーバの構築

Minecraftサーバとしてここでは「PaperMC」を選択する。PaperMCの次のドキュメントの手順に沿って、Java版・統合版を跨ぐクロスプレイを可能にするサーバの構築作業を進める。

作業の見通しを良くするために、導入時に展開される全てのファイルではなく、以降の説明で操作対象になるファイルのみの階層構造を先に抜き出して書いておくと次の通り。

~/PaperMC/
	+-- eula.txt
	+-- paper.jar
	+-- plugins/
		+-- Geyser-Spigot.jar
		+-- floodgate-spigot.jar
	+-- server.properties
	+-- world/
		+-- datapacks/
			+-- coordinates hud v1.2.3.zip (後述)
  1. Minecraft Java版サーバ用に適当なサーバ環境を用意し、OpenJDKなどが使えるようにする (例: Ubuntu Server 22.04, OpenJDK 18)
  2. https://papermc.io/downloads から最新のJARファイルをダウンロードする (例: paper-1.19.2-270.jar)
  3. ダウンロードしたJARファイルをpaper.jarに改名し、サーバ内の適当な新規ディレクトリに入れる (例: ~/PaperMC/)
  4. 設定ファイル等を生成させるために、1度目の「Running The Server」を実施する
    $ cd ~/PaperMC/
    $ java -Xms2G -Xmx2G -jar paper.jar --nogui
    (snip)
    You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
    
  5. ディレクトリ内に自動生成されたファイルeula.txtの内容を確認した後に、ファイルを編集して「eula=false」を「eula=true」へ変更する
  6. 2度目の「Running The Server」を実施し、「> 」のプロンプトが表示されるまで数十秒待つ
    $ java -Xms2G -Xmx2G -jar paper.jar --nogui
    (snip)
    [XX:XX:XX INFO]: Done (11.157s)! For help, type "help"
    [XX:XX:XX INFO]: Timings Reset
    > 
    
  7. 「> 」のプロンプトに「stop」を入力して、一度サーバを終了させる
    > stop
    [XX:XX:XX INFO]: Stopping the server
    (snip)
    [XX:XX:XX INFO]: Closing Server
    $ 
    
  8. ディレクトリ内にファイルserver.propertiesやディレクトリpluginsなどが自動生成されている
  9. 次の2つのJARファイルをダウンロードして、ディレクトリplugins内に保存する (SpigotはPaperMCと互換性があるマイクラサーバの一種)
    • Geyser-Spigot.jar: https://geysermc.org/ > 右上の「Download」 > 「Geyser-Spigot.jar」のリンク先
    • floodgate-spigot.jar: https://geysermc.org/ > 右上の「Floodgate」 > README.md本文中の「Download」 > 「floodgate-spigot.jar」のリンク先
  10. ファイルserver.propertiesを編集して「enforce-secure-profile=true」を「enforce-secure-profile=false」へ変更する
  11. 3度目の「Running The Server」を実施し、PaperMCとGeyserとFloodgateがすべて起動できることを確認する
    $ java -Xms2G -Xmx2G -jar paper.jar --nogui
    (snip)
    [XX:XX:XX INFO]: Starting Minecraft server on *:25565
    (snip)
    [XX:XX:XX INFO]: [floodgate] Loading floodgate v2.2.0-SNAPSHOT (b73-4f36112)
    [XX:XX:XX INFO]: [floodgate] Floodgateの起動に 357ms かかりました。
    (snip)
    [XX:XX:XX INFO]: [Geyser-Spigot] Geyser を 0.0.0.0 で開始しました: 19132
    (snip)
    > 
    

Step-2. サーバ接続の確認

この段階まで進めば、PaperMCで構築した今回のMinecraftサーバへ、次の2種類の接続が可能になっているはず。Java版・統合版のそれぞれのクライアントから、「マルチプレイ」でのサーバ接続が行えるかを確認してみよう。

サーバ側のポート説明
Java版サーバとしてのポート「25565/tcp」パソコン (Linux, Mac, Windows) のJava版クライアントがサーバ接続に使用
Bedrock版サーバとしてのポート「19132/udp」Nintendo Switchなどの統合版クライアントがサーバ接続に使用

なお、下記の写真のように、プレイヤー画面に現れる「チャットメッセージの安全性の確認ができません / このサーバーで送信されたメッセージは変更される場合があり、元のメッセージを反映していない可能性があります。」という警告表示は、PaperMCのサーバ設定を「enforce-secure-profile=false」と変更したことによるものだ。

プレイヤー画面での現在位置座標表示

種別名称役割
サーバのdatapackCoordinates HUDJava版ワールドで座標等を常時表示する

Redrock版サーバではプレイヤー画面に現在位置の座標を簡素なフォーマットで表示できていたが (コマンド: /gamerule showcoordinates true)、Java版サーバにおいては標準状態では表示できないらしい。そこで「Coordinates HUD」というdatapackを導入する。手順は次の通り。

  1. 次のファイルを手元にダウンロードする
  2. ダウンロードしたZIPファイルを展開して、中身のZIPファイル (例: coordinates hud v1.2.3.zip) をPaperMCサーバの~/PaperMC/world/datapacks/に置く
  3. PaperMCを再起動する (ZIPファイル設置後の初回の起動時には次のログが現れた)
    [XX:XX:XX INFO]: Found new data pack file/coordinates hud v1.2.3.zip, loading it automatically
    
  4. ワールドに接続してプレイヤー画面のコマンドで/trigger ch_toggleを入力する
  5. プレイヤー画面の下部にXYZ座標・方角・時計が表示されるようになる

余談: プレイヤーの存在を実世界で把握

IoT絡みの一種のお遊びとして、某氏と共作して、某所LAN内のMinecraftサーバにログイン中のプレイヤーが1名以上になっている間は、某所にある上記写真の「ON AIR」ランプが点灯するようにした。

どのような仕組みを使っているかというと、下記1のツール「itzg/mc-monitor」にてオンラインのプレイヤー数をMinecraftサーバから定期的に読み取り、その数値変化に応じて、改造した「ON AIR」ランプの中に仕込まれた下記2の「M5Stack ATOM Lite」をクラウド経由で制御し、ランプを点灯・消灯する流れとなっている。ATOM Liteを仕込む改造の部分は自分はまだよく把握しておらず、今後の研究課題だ。

  1. itzg/mc-monitor: Monitor the status of Minecraft servers and provides Prometheus exporter and Influx line protocol output
  2. ATOM Lite — スイッチサイエンス
ALFOTO フロムシード(fromseed) LED アルフォト オンエアー ライト ネオンライト アメリカン 雑貨 インテリア ネオンサイン おしゃれ

ALFOTO フロムシード(fromseed) LED アルフォト オンエアー ライト ネオンライト アメリカン 雑貨 インテリア ネオンサイン おしゃれ

フロムシード(fromseed)

参考リンク