Velocity・Paper・GeyserでJava版と統合版が入れるサーバーを構築する

1. はじめに

Minecraftサーバーは、Java版と統合版で通信方式が異なります。そのため、Java版向けのPaperサーバーを立てただけでは、通常は統合版クライアントからそのまま接続できません。

そこで、Java版向けの通信へ変換するGeyserと、統合版プレイヤーの認証を補助するFloodgateを使います。今回は、複数のPaperサーバーをまとめるVelocityへGeyserとFloodgateを導入する構成を作ります。

この記事で使用するポート番号やファイル名は設定例です。実際の値は、ほかのサービスとの重複、レンタルサーバーの割り当て、ファイアウォールなどに合わせて変更できます。

また、Velocity、Paper、Geyser、Floodgateの設定項目や保存場所は、バージョンによって変わる場合があります。この記事の例をそのまま貼り付ける前に、実際に生成された設定ファイルと、使用しているバージョンの公式ドキュメントを確認してください。

2. 完成するサーバー構成

完成後の通信経路は、次のようになります。

Java版クライアント
        ↓ TCP 25565
     Velocity
        ↓
   Paperサーバー

統合版クライアント
        ↓ UDP 19132
Geyser + Floodgate
        ↓
     Velocity
        ↓
   Paperサーバー

今回の基本構成では、GeyserとFloodgateをVelocityのプラグインとして動かします。

Java版プレイヤーは、VelocityのJava版用ポートへ直接接続します。統合版プレイヤーはGeyserのUDPポートへ接続し、GeyserがJava版サーバー向けの通信へ変換します。その後はJava版プレイヤーと同じようにVelocityの振り分けを通り、lobbysurvivalなどのPaperへ移動します。

Java版 ─────────────→ Velocity ─┬→ lobby
                               └→ survival

統合版 → Geyser・Floodgate ────→ Velocity ─┬→ lobby
                                           └→ survival

GeyserをPaperごとに入れる構成もありますが、この記事では扱いません。Velocityを入口にするネットワークでは、Geyserをプロキシ側に1つ置くと接続経路をまとめやすくなります。

3. 各ソフトウェアの役割

使用するソフトウェアと役割を整理します。

ソフトウェア 役割
Velocity プレイヤーを各サーバーへ振り分けるプロキシ
Paper 実際のワールドやゲームを動かす
Geyser 統合版の通信をJava版サーバー向けに変換する
Floodgate Java版アカウントを持たない統合版プレイヤーの認証を補助する

Velocityの役割

Velocityは、サーバーネットワークの入口です。プレイヤーを最初にlobbyへ入れたり、コマンドやプラグインを使ってsurvivalへ移動させたりします。

Velocity自身はワールドを持ちません。ブロック、モブ、ゲームルールなどを実際に処理するのは、後ろにあるPaperです。

Paperの役割

Paperは、ワールドとゲームを動かすバックエンドサーバーです。ロビー用とサバイバル用を分ける場合、それぞれ別のPaperプロセスを起動し、異なるポートを割り当てます。

Geyserの役割

Geyserは、統合版クライアントの通信をJava版サーバーが理解できる形へ変換する橋渡し役です。

Geyserを導入しても、Paperが統合版サーバーへ変わるわけではありません。PaperはJava版サーバーのままで、Geyserが統合版クライアントとの違いを変換します。

Floodgateの役割

Floodgateは、Java版アカウントを持っていない統合版プレイヤーが、統合版のアカウントを使って参加できるよう認証を補助します。

Geyserだけを使い、Java版アカウントで認証させる構成もあります。今回は初心者がJava版と統合版の両方を受け入れやすいよう、Floodgateを併用する構成を説明します。

4. 必要なもの

構築前に、次のものを用意します。

  • Velocity本体
  • lobby用のPaper
  • survival用のPaper
  • Velocity向けのGeyser
  • Velocity向けのFloodgate
  • 各ソフトウェアが要求するJava
  • Java版クライアント
  • 動作確認用の統合版端末
  • 設定変更前のバックアップ

現在のGeyser公式セットアップではJava 21以上が案内されています。ただし、VelocityやPaperが要求するJavaは、Minecraftと各ソフトウェアのバージョンによって変わることがあります。

java -version

複数のJavaが入っている環境では、コマンドで表示されたJavaと、起動スクリプトが実際に使うJavaが同じか確認します。

ダウンロードするときは、必ず対象プラットフォームを確認してください。GeyserにはVelocity向け、Paper・Spigot向け、単体実行版などがあります。今回はVelocity向けを使用します。

5. フォルダ構成

フォルダ構成の例は次のとおりです。

minecraft-network/
├─ velocity/
│  ├─ velocity.jar
│  └─ plugins/
│     ├─ Geyser-Velocity.jar
│     └─ Floodgate-Velocity.jar
│
├─ lobby/
│  ├─ paper.jar
│  └─ plugins/
│
└─ survival/
   ├─ paper.jar
   └─ plugins/

ここに書いたjarファイル名は説明用です。大文字・小文字、バージョン番号、ハイフンなど、実際のファイル名は配布バージョンによって異なります。

基本構成では、Velocityのpluginsへ次の2つを入れます。

Velocity側
├─ GeyserのVelocity向けjar
└─ FloodgateのVelocity向けjar

Paper側のpluginsへGeyserを重ねて入れる必要はありません。

Floodgateも通常はVelocity側だけで始められます。ただし、Paper上のプラグインからFloodgate APIを利用する場合や、ネットワーク全体で統合版プレイヤー情報を扱う場合は、Paper側にも対応するFloodgateを入れる構成があります。この追加構成では転送設定と鍵ファイルの共有が必要になるため、使用中のFloodgate公式ドキュメントに従ってください。

6. ポート設計

この記事では、次のポートを例として使います。

用途 ポート例
Java版プレイヤー→Velocity 25565/TCP
統合版プレイヤー→Geyser 19132/UDP
Velocity→lobby 30066/TCP
Velocity→survival 30067/TCP

ポート番号は固定ではありません。環境に合わせて変更できますが、設定する場所同士の番号を一致させる必要があります。

TCPとUDPの違い

Java版の接続ではTCP、統合版からGeyserへの接続ではUDPを使用します。

25565/TCP
  Java版からVelocityへ接続

19132/UDP
  統合版からGeyserへ接続

TCPとUDPは別の通信方式です。ルーターやファイアウォールで19132を開けても、TCPだけを許可していると統合版からは接続できません。Geyser用にはUDPを許可します。

バックエンド用の3006630067は、外部プレイヤーが直接使う入口ではありません。VelocityからPaperへの内部通信に使います。

7. Velocityの初期設定

最初にVelocityだけを起動し、velocity.tomlなどの初期ファイルを生成します。生成後はいったん停止して設定します。

velocity.tomlでは、Java版プレイヤーの入口とPaperの接続先を確認します。

bind = "0.0.0.0:25565"
online-mode = true

[servers]
lobby = "127.0.0.1:30066"
survival = "127.0.0.1:30067"

try = [
  "lobby"
]

bindはVelocityがJava版プレイヤーを受け付ける場所です。[servers]には、バックエンドのPaperを登録します。

この例はVelocityとPaperが同じPCにある想定なので、127.0.0.1を使っています。Paperが別PCにある場合は、Paper用PCのLAN内IPアドレスなどに変更します。

[servers]
lobby = "192.168.1.100:30066"
survival = "192.168.1.100:30067"

192.168.1.100は例です。実際のPaper用PCのIPアドレスを確認してください。

プレイヤー情報の転送

VelocityからPaperへ、プレイヤーのIPアドレス、UUID、スキンなどを渡すための転送設定が必要です。

比較的新しいPaperとの構成では、Velocityのmodern forwardingが候補になります。現在の設定例は次の形ですが、対応バージョンと設定場所を必ず公式ドキュメントで確認してください。

player-info-forwarding-mode = "modern"
forwarding-secret-file = "forwarding.secret"

forwarding.secretの中身は、VelocityとPaperの間で使う秘密情報です。記事、スクリーンショット、GitHub、チャットなどへ公開しないでください。

転送方式は混在させず、VelocityとすべてのPaperで同じ方式にそろえます。古いPaperでは設定ファイルやキーが異なるため、使用しているバージョンの公式手順を優先します。

Velocity単体の構築については、Minecraft Java版プロキシサーバーの立て方も参考にしてください。

8. Paperの初期設定

次に、lobbysurvivalをそれぞれ起動します。初回起動後に生成されるeula.txtを読み、MinecraftのEULAへ同意できる場合は、案内に従って値を変更します。

Paperごとに異なるポートを指定します。

lobby/server.propertiesの例です。

server-port=30066
server-ip=
online-mode=false

survival/server.propertiesの例です。

server-port=30067
server-ip=
online-mode=false

server-ipは空欄で使う構成が多いですが、同じPC内だけで接続させる目的で127.0.0.1へ限定する方法もあります。別PC構成では必要なインターフェースで待ち受ける必要があります。環境に合わないIPを指定すると接続できなくなるため、構成を確認して決めます。

modern forwardingを使う現在のPaperでは、server.propertiesonline-modeを無効にし、Paper側でVelocity転送を有効にします。現在の設定例は次の形です。

proxies:
  velocity:
    enabled: true
    online-mode: true
    secret: "Velocityのforwarding.secretと同じ値"

この例の実際の保存場所は、比較的新しいPaperではconfig/paper-global.ymlです。古いPaperではファイル名やキーが異なる場合があります。また、online-modeに関する値はVelocity側の設定との対応を確認する必要があります。

ここへ実際のシークレットを載せたスクリーンショットを公開しないでください。Gitで管理する場合も、シークレットを含むファイルをリポジトリへ入れないようにします。

バックエンドのPaperをonline-mode=falseにする構成では、Paperへ直接接続されないようにする対策が必須です。modern forwardingは重要ですが、ファイアウォールの代わりにはなりません。

9. Geyserの導入

Velocityを停止した状態で、Velocity向けのGeyser jarをvelocity/pluginsへ入れます。

minecraft-network/
└─ velocity/
   └─ plugins/
      └─ Geyser-Velocity.jar

Velocityを一度起動すると、Geyserの設定フォルダとconfig.ymlが生成されます。実際のフォルダ名は配布物やバージョンによって異なるため、コンソールログと生成されたフォルダを確認してください。

現在のGeyser公式セットアップで案内されている、統合版用の待受設定例は次の形です。

bedrock:
  address: 0.0.0.0
  port: 19132
  clone-remote-port: false

portは、統合版プレイヤーが入力するポートです。このポートにはUDP通信が必要です。

clone-remote-portの意味や初期値は、利用環境とバージョンの公式説明を確認してください。有効にすると、設定したBedrock用ポートが別のポートで上書きされる場合があります。レンタルサーバーでは自由なポートを使えないこともあるため、管理画面で割り当てられたUDPポートを使います。

Geyserの接続先をVelocity構成に合わせる

Geyser-VelocityはVelocityの中で動作します。統合版プレイヤーはGeyserのUDP入口へ接続し、変換後はVelocityに登録されたlobbyなどへ振り分けられます。

そのため、この記事の基本構成では、GeyserからPaperの30066へ直接入れる構成を追加で作りません。Velocityのtryやサーバー登録が、最初の接続先を決めます。

統合版クライアント
  ↓ 19132/UDP
Geyser-Velocity
  ↓ Velocity内部
tryで指定したlobby
  ↓ 30066/TCP
Paper

Geyser Standaloneなど、別の配布形態ではJavaサーバーのアドレスとポートを指定する設定があります。Geyser-Velocityの記事へStandalone向け設定を混ぜないようにしてください。

10. Floodgateの導入

Velocityを停止し、Velocity向けのFloodgate jarをvelocity/pluginsへ入れます。

minecraft-network/
└─ velocity/
   └─ plugins/
      ├─ Geyser-Velocity.jar
      └─ Floodgate-Velocity.jar

再起動すると、Floodgate用の設定ファイルや認証用の鍵ファイルが生成されます。

Geyser側では、認証方式をFloodgateへ合わせます。現在の公式手順では、Geyserの設定にあるauth-typefloodgateへ変更する案内があります。

auth-type: floodgate

このキーの位置や周辺構造はバージョンによって変わる可能性があります。生成されたコメント付き設定ファイルを検索し、使用中のGeyser・Floodgate公式手順と照合してください。

FloodgateをPaper側にも入れる場合

通常の接続だけなら、まずVelocity側への導入から確認します。一方、Paper上のプラグインからFloodgate APIを使う場合などは、バックエンドにも対応するFloodgateを導入する構成があります。

その場合は、現在の公式手順では次のような追加作業が案内されています。

  • Velocity側でFloodgateデータの転送を有効にする
  • Paper側にも対応するFloodgateを導入する
  • プロキシとバックエンドで正しい鍵ファイルを共有する
  • Velocityのプレイヤー情報転送を正しく設定する

設定キーや鍵の配置場所はバージョンによって変わり得るため、ここでは固定値を作りません。特に、古い解説を見て鍵ファイルをGeyser側へ不要にコピーすると、現在の構成では問題になる場合があります。

Floodgateの秘密鍵は、統合版プレイヤーの認証に関係する重要なファイルです。第三者へ渡さず、GitHubにも公開しないでください。

11. 起動と接続確認

導入全体の流れを整理すると、次の順番になります。

  1. Javaを用意する
  2. Velocityを起動して初期ファイルを生成する
  3. Paperサーバーを起動し、内容を確認してEULAに同意する
  4. Paperごとに異なるポートを設定する
  5. Velocityにバックエンドサーバーを登録する
  6. GeyserをVelocityのpluginsへ配置する
  7. FloodgateをVelocityのpluginsへ配置する
  8. Geyserの待受ポートとVelocity内の接続経路を確認する
  9. 必要な転送・認証設定を行う
  10. Paperを起動する
  11. Velocityを起動する
  12. Java版と統合版から接続を確認する

起動順序

基本的には、Paperなどのバックエンドを先に起動し、その後でVelocityを起動すると確認しやすくなります。

1. lobbyのPaperを起動
2. survivalのPaperを起動
3. 両方の起動完了を確認
4. Velocityを起動
5. GeyserとFloodgateの読み込みログを確認

Velocityを先に起動しても構成によっては問題ありませんが、プレイヤーが接続した時点でPaperが準備できていないと、Connection refusedなどが発生します。

Java版から確認する

Java版では、VelocityのアドレスとTCPポートへ接続します。

サーバーアドレス: サーバーのIPまたはドメイン
ポート: 25565

最初にlobbyへ入り、必要であればsurvivalへ移動できるか確認します。

統合版から確認する

統合版では、GeyserのアドレスとUDPポートを指定します。

サーバーアドレス: Java版と同じIPまたはドメインの例
ポート: 19132

ドメインの扱いやカスタムサーバーの追加方法は、統合版を動かす端末によって異なることがあります。家庭用ゲーム機などでは追加方法に制限がある場合があるため、使用端末と現在のGeyser公式案内を確認してください。

Geyserの現在の公式手順には、外部からUDPポートへ到達できるかを確認するコマンドも案内されています。

geyser connectiontest <IPアドレス> <ポート>

実行できる場所や権限は導入形態で異なるため、Geyserのコンソールやコマンドヘルプを確認します。

12. よくあるエラー

Velocityには入れるがlobbyへ移動できない

Java版でVelocityへログインできても、lobbyのPaperが停止していれば移動できません。

確認する場所は次のとおりです。

  • lobbyのPaperが起動完了しているか
  • Paperのserver-port30066
  • Velocityのlobbyが同じアドレスとポートを指しているか
  • VelocityとPaperの転送方式とシークレットが一致しているか
  • Paper側のファイアウォールがVelocityからの通信を許可しているか

Connection refusedが表示される

Connection refusedは、指定されたアドレスとポートでPaperが待ち受けていない場合に出やすいエラーです。

Velocity → 127.0.0.1:30066 → 待受なし

Paperの停止、起動途中、異常終了、ポート番号の間違い、別PCなのにlocalhostを指定している、といった原因を確認します。

詳しい確認方法は、VelocityでConnection refusedが出た原因と直し方でまとめています。

Java版からは入れるが統合版から入れない

Java版が入れるなら、VelocityからPaperまでの基本経路は動いている可能性が高いです。その場合は、統合版専用の入口から順に確認します。

1. Geyser-Velocityが読み込まれているか
2. Floodgateが正常に読み込まれているか
3. Geyserが19132/UDPで待ち受けているか
4. ルーターとファイアウォールがUDPを許可しているか
5. 統合版で入力したIPとポートが正しいか
6. Geyserと統合版・Java版サーバーの対応バージョンを確認
7. Geyserの認証方式がFloodgate構成と一致しているか

Java版用の25565/TCPが開いているだけでは、統合版用の19132/UDPへは接続できません。

統合版のサーバー一覧で読み込みが終わらない

統合版の一覧で接続確認が終わらない場合は、UDPパケットがGeyserまで届いていない可能性があります。

  • Geyserの起動ログに待受ポートが表示されているか
  • 統合版で19132を指定しているか
  • UDPのポート転送先がVelocity用PCになっているか
  • ファイアウォールが19132/UDPを許可しているか
  • レンタルサーバー側でUDPポートが割り当てられているか
  • 同じLAN内と外部回線の両方から結果を比較したか

一覧表示の問題と、実際の参加処理の問題は別の場合があります。Velocity、Geyser、Paperのどこまでログが出ているかで切り分けます。

GeyserのUDPポートが開いていない

Windows PowerShellでは、ローカルのUDP待受を次のように確認できます。

Get-NetUDPEndpoint -LocalPort 19132

Linuxでは次の例があります。

ss -lunp | grep 19132

ローカルで待ち受けていても、ルーター、クラウドのセキュリティ設定、ホスティング側のポート割り当てで止まっていれば外部からは接続できません。

Floodgateの認証または鍵ファイルが一致していない

GeyserとFloodgateが同じVelocity上にある基本構成では、まず両プラグインが正常に起動しているか、Geyserの認証方式がFloodgateになっているかを確認します。

Paper側にもFloodgateを入れた構成では、プロキシとバックエンドの転送設定、鍵ファイルが一致していないと認証に失敗する可能性があります。古い鍵と新しい鍵が混在していないか、転送中にファイルが壊れていないかも確認します。

鍵を確認するために、内容をWeb上へ貼り付けてはいけません。

バックエンドサーバーへ直接接続できてしまう

外部から3006630067へ直接入れる状態は避けます。

外部公開する入口
├─ 25565/TCP:Velocity
└─ 19132/UDP:Geyser

外部公開しない
├─ 30066/TCP:lobby
└─ 30067/TCP:survival

同じPCならループバックアドレスへ限定する方法があります。別PCなら、Paper用PCのファイアウォールでVelocity用PCからだけ許可します。

Java版と統合版でユーザー名やUUIDの扱いが異なる

Floodgate経由のプレイヤーは、Java版プレイヤーと同じ名前・UUIDの扱いになるとは限りません。設定によってはユーザー名へ識別用の接頭辞が付くこともあります。

そのため、権限、ホワイトリスト、BAN、所持金、土地保護などをUUIDで管理するプラグインでは、Java版アカウントと統合版アカウントが別ユーザーとして扱われる場合があります。

接頭辞やアカウントリンクに関する設定はバージョン差があるため、使用中のFloodgate公式ドキュメントを確認します。本番データを変更する前に、テスト用アカウントで権限やデータの保存方法を確認してください。

プラグインが統合版プレイヤーの操作に対応していない

Geyserは統合版の操作をJava版向けに変換しますが、すべてのJava版プラグインが統合版を想定しているわけではありません。

インベントリGUI、右クリック判定、リソースパック、独自パケット、チャット入力などを使うプラグインでは、表示や操作に差が出ることがあります。

13. 統合版での制限

Geyserを導入しても、Java版の全機能が統合版上で完全に同じ動作になるわけではありません。

特に、次の部分は実機で確認が必要です。

  • 一部のインベントリGUI
  • Java版向けプラグインの独自メニュー
  • 表示エンティティや特殊な描画
  • キーボード・マウスを前提にした操作
  • リソースパックやサウンド
  • Java版向けの独自パケット処理

Java版向けの音ゲーや、細かなタイミングを独自パケットで処理するゲームは、統合版で正常に動かない場合があります。入力方法、通信、サウンド、表示の違いがゲーム性へ影響するためです。

PCのJava版だけで動作確認を終えず、スマートフォン、タブレット、Windows統合版など、実際に参加させたい統合版端末でテストします。

14. セキュリティ

プロキシ構成では、接続できることだけでなく、バックエンドを直接公開しないことが重要です。

  • Velocity経由以外でPaperへ入れないようにする
  • Velocityの認証用シークレットを公開しない
  • Floodgateの鍵ファイルをGitHubへ公開しない
  • 管理用ポートを無闇に外部公開しない
  • 設定変更前にバックアップを取得する
  • プラグインは公式配布元から取得する
  • Velocity、Paper、Geyser、Floodgateを対応する組み合わせに更新する

modern forwardingやシークレットは防御の一部ですが、ファイアウォールの代わりではありません。

同じPCであれば、Paperを127.0.0.1だけで待ち受けさせる構成を検討できます。別PCの場合は、Paperのポートへ接続できる送信元をVelocity用PCに限定します。

設定ファイルをスクリーンショットにするときは、シークレット、鍵、グローバルIP、管理画面のトークンなどが写っていないか確認してください。

15. まとめ

Velocityを入口にしてJava版と統合版の両方を受け入れる構成は、次の流れになります。

Java版
  ↓ 25565/TCP
Velocity
  ↓
Paper

統合版
  ↓ 19132/UDP
Geyser + Floodgate
  ↓
Velocity
  ↓
Paper

役割を短くまとめると、Velocityが振り分け、Paperがゲーム本体、Geyserが通信変換、Floodgateが統合版プレイヤーの認証補助です。

構築するときは、次の順番で確認すると迷いにくくなります。

Paperのポートを分ける
  ↓
VelocityへPaperを登録する
  ↓
VelocityとPaperの転送設定を合わせる
  ↓
VelocityへGeyserとFloodgateを導入する
  ↓
19132/UDPを確認する
  ↓
Java版と統合版の実機でテストする

Java版だけ入れる場合はVelocityからPaperまでを確認し、統合版だけ入れない場合はGeyser、Floodgate、UDPポート、対応バージョンを優先して確認します。

最後に、この記事の設定例よりも、実際に使用するバージョンで生成された設定ファイルと公式ドキュメントを優先してください。特に、認証方式、転送設定、シークレット、Floodgateの鍵は、古い解説と混ぜないことが大切です。

参考にした公式情報