【Minecraft Server】検証 : GeyserMCでの統合版ユーザのホワイトリスト登録
コマナズです。記事を書くのが随分お久しぶりとなってしまいました。今回はいつもと違って、Minecraftサーバの運用者をターゲットにしたお話をします。
背景
近頃はMinecraftの統合版(スマホ、Switch1/2、PS4/5 ) のユーザが急激に増ています。一方で、利便性の面やMOD等のカスタマイズ性から、Java版のプレイヤーも十分な数存在します。そこで、GeyserMC を使って Java版 と 統合版 のプレイヤーを同じサーバで一緒にプレイさせたいケースも増えてきています。
その中で今回のテーマは、GeyserMC を使ったホワイトリストの登録における課題点と解決方法を記載します。
※本記事では GeyserMC の導入方法については割愛しています。導入方法は調べてね。
参考資料
- GeyserMCの公式サイト : https://geysermc.org/
- GeyserMCの公式FAQ : https://geysermc.org/wiki/geyser/faq
課題 : 統合版プレイヤーでたまにホワイトリストに登録できないプレイヤーがいる
今回の課題は、統合版プレイヤーでホワイトリストに登録できる人とできない人がいる ことです。
Java版のユーザであれば、ホワイトリストの登録はさほど苦労しません。whitelistコマンドでユーザを登録するだけです。しかし、統合版は本来Java版のサーバに入ることができません。そこで、GeyserMCによる統合版ユーザが入れるようにする仕組みが使われれています。
そのため、どうすれば確実にホワイトリストに登録することができるか、登録方法を調べる必要がありました。
前提 : XBOXゲーマータグがわかること
いずれの方法でも、プレイヤーが Microsoftアカウントでサインインしており、XBOXゲーマータグがわかること が前提です。オフラインの状態では参加できません。サインインしていれば、Minecraftのタイトル画面でプレイヤー名としてXBOXゲーマータグが表示されます。下記の画像の赤枠の部分です。また、Switch のプレイヤーであれば Nintendo Switch Online に、PSのプレイヤーであれば PlayStation Network のサービスに加入していることも前提となります。

登録方法
結論としては、手段2:ホワイトリストを解除して、その間に一度サーバに入っていただくことが一番手っ取り早い解決法ではありました。ただし、どうしてもホワイトリストを解除したくない方向けの手順も調べたく、本記事で紹介することとしました。
統合版ユーザをホワイトリストに登録するには、主に3つの手段があります。
- fwhitelistでホワイトリストに登録する (すでにGeyserMCのJava/統合版クロスサーバに入ったことがある人向け)
- ホワイトリストを一時的に解除した状態でプレイヤーにサーバ入っていただき、ホワイトリストを設定する
- XUIDを事前に調べておき、whitelist.json に登録する
手段1 : fwhitelistでホワイトリストに登録する
GeyserMCで運用する任意のJava/統合版クロスサーバに一度でも入ったことがあるプレイヤーであれば、以下のFloodgateのコマンドでホワイトリストに登録することができます(一度でも入ると、GeyserMC側にユーザ情報がキャッシュされます)。 しかし、一度もGeyserMCを使ったクロスサーバに入ったことがない人は、この方法でホワイトリスト登録することができません。方法2以降の手段が必要になります。
※XBOXゲーマータグにスベースが入っている場合、前後にダブルクォーテーションを前後に挟んで登録してください
/fwhitelist add <XBOXゲーマータグ>
手段2 (推奨) : ホワイトリストを一時的に解除した状態でプレイヤーにサーバ入っていただき、ホワイトリストを設定する
多分この方法が一番早いと思います。つまり、ホワイトリストを解除した状態で事前にプレイヤーに入っていただき、プレイヤーの収集する方法です。プレイヤーがサーバに入っている間であれば、Java版のホワイトリスト登録と同じ以下の手順でもホワイトリスト登録ができます(デフォルトであれば「.」から始まるプレイヤー名になります)。
/whitelist add <統合版のログインプレイヤー名>
リスクとしては、このホワイトリストを解除している間に「意図しない悪意を持ったプレイヤーがその間にサーバに入る可能性がある」懸念があります。そのため、事前の防護策(最初にログインしたプレイヤーを隔離する)などは運用時に検討しておいたほうが良いでしょう。
手段3 : XUIDを事前に調べておき、whitelist.json に登録する
他の方法として、プレイヤーのXUID (UUID) をwhitelist.jsonに登録する方法も記載されいるようです。少し面倒ですが、「どうしてもセキュリティ的にホワイトリストを解除したくない」場合はこの手を使うのもありでしょう。具体的には、以下の手順です。この方法で、一度もGeyserMCに入ったことのない私のサブアカウントで実際に登録してみて入れたことは確認しています。
注意事項 : 一度に多数リクエストするとリクエストが制限されてしまいます。一度にたくさんのXUIDを取得する手段としては向いていません。
1.以下のサイトでXBOXのゲーマータグを入力し、プレイヤーのXUIDを調べます https://cxkes.me/xbox/xuid

[補足] 上記サイト以外でも、自力でMicrosoft認証APIを使って調べる方法はありますが、面倒なので省略
2.出てきたXUID (HEX) を以下のようにフォーマットします
| 項目 | 例 |
|---|---|
| XUIDの検索結果(HEX=16進数の値) | 9000009E6D89F |
| ホワイトリストのUUIDとして登録するUUIDの値 (00000000-0000-0000-xxxx-xxxxxxxxxxxx ) | 00000000-0000-0000-0009-000009e6d89f |
3.Minecraftサーバがあるディレクトリのwhitelist.jsonに以下のように登録します(デフォルトでは、XBOXゲーマータグの前に「.」が付く形式となります)
[ { "uuid": "00000000-0000-0000-xxxx-xxxxxxxxxxxx", "name": ".<XBOXのゲーマータグ>" } ]
登録例:
[ { "uuid": "00000000-0000-0000-0009-000009e6d89f", "name": ".Komnazsk" } ]
4.登録したら、以下のコマンドでホワイトリストをリロードします
/whitelist reload