🛤️

👦「友達とマイクラやりたい」に備えるためのMinecraftマルチプレイサーバー構築

2024/12/21に公開

この記事はpyspa Advent Calendar 2024の12/21の記事です。昨日は@katzchangのMy New Gear...でした。今日はJavaの話です。

背景

子供達はMinecraft(以下マイクラ)が大好きです。特に友人と一緒に遊べるマルチプレイを楽しみにしてます。しかし6〜9歳の子供達だけでマルチプレイ環境を整えるのは困難で、大人が出しゃばる必要があるのが現実です。本稿ではマイクラマルチプレイ環境を整える手順を紹介します。もしあなたが覚悟を決めた人ならここに書いてあることは完全に理解しなければならず、何故ならあなたがお子さんのクラスメイトの保護者(ITに疎いかもしれない)に同じ内容を説明する必要が生じるからです。

前提

  • マイクラには統合版(Bedrock版)とJava版がある
  • 子供達はNintendo SwitchやiOS端末でプレイしていることが多くこれらは統合版である
  • サーバーもJava版と統合版があり、カスタマイズの自由度が高いのはJava版である
  • 子供達は習いごとや塾で忙しく、限られた時間を使ってオンラインで友人と遊んでいる

Nintendo Switch版でマルチプレイをする場合の選択肢

  1. Nintendo Switch同士で接続し片方がホストとなる (2人まで)
  2. 公式マルチプレイサーバーRealmsを利用する。10人まで入れるworldであれば月額900円程度[1]
  3. 統合版のサーバーを立てる
  4. Java版のプラグインサーバーを立ててcross-play用のプラグインを導入する

以降はJava版のプラグインサーバーを立ててJava版でも統合版でも遊べるworldを作成する手順です。何故ならMacユーザーの私はJava版クライアントしか選択肢が無いので子供達を接待するにはこの方法しかありませんでした。プラグインサーバーのメリットはカスタマイズの自由度の高さです。子供達が普段見ているYouTubeのゲーム配信者達のMODモリモリのワールドに近づけます。

事前準備

  • Microsoftアカウントのセットアップ
    • 子供用のMicrosoftアカウントの取得
    • 子供用アカウントのゲーマータグ(プレイヤー識別子)設定
      • 手順1:xbox.comに作成した子供アカウントでログインする
      • 手順2:ゲーマータグを初期値から好きなものに変更する
    • 子供用アカウントのマルチプレイ許可
      • 手順1:親のMicrosoftアカウントでxbox.comにログインする
      • 手順2:Xboxの設定画面で子供用アカウントを選択(ゲーマータグで判別)
      • 手順3:「Xbox 360 オンラインの安心設定」→ 「オンライン ゲーム …… マルチプレイヤー ゲームを遊べるかどうかを設定します」を許可する。他の項目は任意で。
  • ルーターの設定 (マイクラ統合版の通信はUDPなので)
    • ゲーム端末のIPアドレスを固定
    • ポート変換ルールで UDP 1-65535 を通すかDMZに端末を入れる
    • Nintendo Switchの端末上でNAT TypeがAになっていることを確認する
  • Nintendo Switch版でプレイする場合
    • Nintendo Switch Onlineへ加入する
    • Nintendo Switch本体のインターネット接続設定
      • DNSの設定 (接続先サーバーの制約を突破するため)
        • 接続中のWifiアクセスポイントの設定画面に入る
        • 「DNS設定」を「自動」から「手動」に変更する
        • 「優先DNS」に「104.238.130.180」を入力する
        • 「代替DNS」に「8.8.8.8」を入力する
        • 決定後 008.008.008.008 と表示されるがOK
    • マイクラを起動してニンテンドーアカウントとmicrosoftアカウントのログインを済ませる

サーバーの初期設定

プラグインサーバーは公式で配布されているサーバー(Vanilla)とは別の「有志が開発したプラグインの導入が可能」なサーバーです。cross-play用サーバープラグインはマイクラ統合版クライアントとの通信を可能にするもの。

  • Java版プラグインサーバー
  • 必須プラグインの導入 (/plugins にJARファイルを配置)
    • GeyserMC
      • 統合版のクライアントを接続可能にする
      • PaperMC用はGeyser-Spigot [2]
    • floodgate
      • 統合版のマイクラアカウントでプラグインサーバーに接続可能にする
    • ViaVersion
      • サーバークライアント間のマイクラバージョン不一致による接続不可問題を緩和する
      • 例:v1.21.3のサーバー ⇔ v1.21.4のクライアントを接続可能にする

サーバーマシンはJavaが動けばUbuntuでもMacでも問題ありません。

初回起動

java -jar paper.jar

運用時にはヒープサイズ等の各種パラメータを指定しよう

ログイン設定

初回起動後 plugins/Geyser-Spigot/config.yml というファイルが生成されているので auth-type:floodgateに変更

# 初期状態ではonlineになっている
auth-type: online

動作確認

Nintendo Switch版マイクラで任意の外部サーバーに接続するとサーバー選択UIが表示される

  • IPアドレス:起動したサーバーの公開IPアドレス
  • Port: 19132

を入力する

プラグインの導入

お好みで。見た目が派手で動きがあるものが最初はウケると思う。我が家は拠点間の移動に使えるワープやトロッコ改造系のpluginから入れた。以下にいくつか紹介。

乗り物系

拠点から拠点への移動を無駄に派手にできる。

  • TrainCarts
    • トロッコを連結可能にしたり駅を設置したり。
  • VerticalRails
    • 垂直の面や天井を逆さまにトロッコが走れる、垂直面は梯子がレールになりトロッコがローラーコースター化。
  • TCHangRail
    • モノレールの様に宙吊りのコースが作れる
  • LiftReloaded
    • エレベーターが作れる。巨大建築のお供に。

https://www.youtube.com/watch?v=XfCjDgMWogU

ワープ系

地図系

  • Dynmap
    • Google MapのようなWebUIが生える
    • 迷子の捜索に

GeyserMCの定期更新 (Optional)

GeyserMCはクライアントのアップデートへの追随が必要なもの。つまりクライアント側だけ新しくなるとサーバーに接続できずサービス不能状態に陥るケースがあります。かつNintendo Switch版やiOS版クライアントは不定期にアップデートが適用される上にバージョンを戻せないのでサーバー側に自動更新の仕組みがあると安心。

download.geysermc.org API

GeyserMCの最新版の情報はAPI経由で取得できます。
https://geysermc.org/wiki/api/downloads

# GeyserMCの最新ビルドバージョンを取得
`--> curl -X GET -Ls https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest | jq
{
  "project_id": "geyser",
  "project_name": "Geyser",
  "version": "2.6.0",
  "build": 734,
  "time": "2024-12-16T03:03:53.694Z",
  "channel": "default",
  "promoted": false,
  "changes": [
    {
      "commit": "64c7adcacfb1ad39c7035ab0c9ccf81468e75485",
      "summary": "Fix: Geyser-Spigot not loading on 1.16.5, remove unused code",
      "message": "Fix: Geyser-Spigot not loading on 1.16.5, remove unused code"
    }
  ],
  "downloads": {
    "bungeecord": {
      "name": "Geyser-BungeeCord.jar",
      "sha256": "de75dea6ae6de7f7d0ace14b8b36ad2f2e269059117e8650cfcafb73a0fb47c8"
    },
    "fabric": {
      "name": "Geyser-Fabric.jar",
      "sha256": "09d184423ca7af7ec77f0fcca91494015bc71f4faf2d955633e7d3173fbd2dcf"
    },
    "neoforge": {
      "name": "Geyser-NeoForge.jar",
      "sha256": "0e0628b97aa641e3342ba91630e8cce68ce91eb6132386d3cb9705ffdea94e2b"
    },
    "spigot": {
      "name": "Geyser-Spigot.jar",
      "sha256": "24eca1aaffb91280bebc502eba0db8d88c87acb0606ff5623e7301044e8bc7c7"
    },
    "standalone": {
      "name": "Geyser-Standalone.jar",
      "sha256": "3c1406ae05e29279b5b884ec7317a90a1f08fb9981e3334a733d947095ea5da1"
    },
    "velocity": {
      "name": "Geyser-Velocity.jar",
      "sha256": "82554fb96cc51334f408d465481b030bc15641658aa1ede09505659ada68fb65"
    },
    "viaproxy": {
      "name": "Geyser-ViaProxy.jar",
      "sha256": "3f322084fa2abb48cc0633cea808cd9308f71aa3cb89aa298df4aceda02ac391"
    }
  }
}

これらのAPIを利用してプラグインの定期更新が簡単に実現できます

# geysermc最新バージョン情報の取得
https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest
# geysermc最新ビルドのダウンロード (Geyser-Spigot.jar)
https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot
# floodgate最新バージョン情報の取得
https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest
# floodgate最新ビルドのダウンロード (floodgate-spigot.jar)
https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot

まとめ

はやく成長して自分でやってほしいです。

脚注
  1. 金額は若干変動する ↩︎

  2. PaperMCはプラグインサーバーであるSpigotMCを軽量化したものなのでSpigotMC向けのビルドを使う ↩︎

Discussion