マイクラ統合版とJava版の完全なクロスプレイを実現する方法

2020年8月27日

【改造なし】Xbox One、スイッチ、PS4で特集サーバー以外に接続する方法」が、数日前に投稿したにもかかわらず閲覧数が多かったんですよね(笑)
なので、それに近い内容(?)を今回は書いていこうと思います。

今回はタイトル通り、マイクラの統合版とJava版でクロスプレイできるようにしていこうと思います。
別に筆者は勘違いしてるわけではないです(汗
少しバグはありますが、ちゃんとプレイできますよ。
それらのバグも多分そのうち修正されると思います。

もし、どれぐらいの完成度(?)か知りたい方は是非私のサーバーに入ってくださいね!!
というかプレイヤー数少ないので入ってください(汗
https://novablog.work/minecraft-server/
このページに入り方などが書いてます。

では、早速やっていきましょう!

前書き

※筆者のどうでもいい話が書いています。
 暇な方だけ読んでください(笑)

冒頭のリンクの記事でも少し書いたように、BetterTogetherアップデートによってスイッチ、Windows10版、PS4、スマホなどでクロスプレイができるようになりました(統合版)。
ですが、Java版だけは対象外で、クロスプレイとか言っときながらJava版と統合版ではクロスプレイができません。

スイッチ版の発売によって統合版ユーザーが急激に増えたので、いやらしい筆者は統合版ユーザーを狙ってサーバーを建てようと思ったんですが、公式サーバーソフトウェア(DedicatedBedrockServer)はまだ不安定だし、統合版サーバーを立てたら自鯖のオペレーターさんのU氏が入れなくなるからなー…って悩んでました。

で、何とか統合版とJava版のマルチプレイをする方法はないかなーって調べてたわけです。
「そんなのあるわけwwwww」って思ってたんですけど、ありました。
興奮して鼻血出ました(大嘘

私が見つけたのは、DragonProxy、ProtocolSupportPE、Geyserの三つで、全部を試してみました。
どうやらProtocolSupportPEは更新が止まっていました。
DragonProxyとGeyserは、両方とも使えたのですが、Geyserのほうが安定していました。
なので、今回はGeyserを使う方法を紹介します。

JEとBEのクロスプレイを実現するGeyserの仕組みは?

前章で書いた通り、今回はGeyserを使った方法で実現します。
概ねの仕組みはこんな感じです。

公式Webサイトから引用

このようにサーバーとして動くのではなく、統合版のパケットをJava版のパケットに変換するミドルウェア(?)として動きます
統合版のユーザーはJava版のユーザーと同じような扱いをされます。

※Java版のアカウントが無くても、記事で紹介するように設定すれば、サーバーのオンラインモードを有効にしたまま統合版のみ認証なしで接続できます。

サーバーに導入する

今記事では、「統合版ユーザー > Gyeser > Spigot」というような構造にします。
ちなみにBungeeCordを挟む方法もありますが(筆者のサーバーがそうです)、記事が膨大な量になってしまうので割愛します(リクエストが多ければ多分書きます)

Spigotのセットアップについてはネット上に膨大な量の記事があるので割愛します。
セットアップ済みであるとして話を進めます。

https://ci.nukkitx.com/job/GeyserMC/job/Floodgate/job/development/から、floodgate-bukkit.jarをダウンロードします。
このファイルはspigot(bukkit)のプラグインで、これを使うことで統合版ユーザーのみ認証なしでサーバーに接続できます。

https://ci.nukkitx.com/job/GeyserMC/job/Geyser/job/master/から、Geyser-Bukkit.jarをダウンロードします。
(8/20追記 : 7/8からGeyser-BukkitからGeyser-Spigotに名前が変わったようです)
このファイルもプラグインで、これがパケット変換する本体となります。

③二つのファイルをspigotのpluginsフォルダにぶち込みます。

④一度サーバーを起動して、起動完了したらサーバーを停止します。
 これで設定ファイルが生成されます。

config.ymlの設定

次に設定をしていきましょう。

①pluginsフォルダ内のfloodgate-bukkitフォルダを開いてpublic-key.pemをコピーします。(コピーですよ!)

②コピーしたファイルをpluginsフォルダ内のGeyser-Bukkitフォルダに貼り付けます。

(8/27追記 : 今のバージョンでは同じspigot上にfloodgateを入れると、自動でfloodgateの設定をしてくれるので、①②の操作は不要です)

③Geyser-BukkitSpigotフォルダ内のconfig.ymlを編集します。

bedrock:
  # 接続を待機するアドレス(変更しない)
  address: 0.0.0.0
  # 接続を待機するポート番号(このポート番号で統合版から接続する。普通は変更しなくてOK)
  port: 19132
  # 統合版のポート番号をJava版と同じにする(通常は変更しない)
  clone-remote-port: false
  # motdを設定する(passthrough-motdがtrueの場合は関係ない)
  # 今回はpassthrough-motdをtrueにするのでそのままにする
  motd1: "GeyserMC"
  motd2: "Another GeyserMC forced host."
  # サーバー名を設定する(ポーズ画面を開いたときに表示される)
  server-name: "MyServer"
remote:
  # Java版のサーバー(spigot)のアドレスを指定する
  # autoにすると、自動で設定してくれる
  address: auto
  # Java版のサーバー(spigot)のアドレスを指定する
  port: 25565
  # spigotサーバーに接続するときの認証タイプ
  # spigotのonline-modeがfalseならoffline
  # 接続にJava版のアカウントを必要とする場合はonline
  # spigotのonline-modeをtrueにしながら、統合版はJava版のアカウントを必要とせずに接続できるようにするにはfloodgate
  # 今回はfloodgateを使うのでfloodgateを指定する
  auth-type: floodgate

# floodgateのキーファイル名
# これはfloodgateが自動で設定してくれるのでそのままにする
floodgate-key-file: public-key.pem

# auth-typeをonlineにしたときに、毎回Java版のアカウント情報を入力するのが面倒なので、Xbox(統合版)名とJavaのアカウントを自動で結びつけるための設定
# configにそのままパスワード等を書くのはセキュリティ的にクソなので、使わないほうが良い
#userAuths:
#  bluerkelp2: # MCPE/Xbox username
#    email: not_really_my_email_address_mr_minecrafter53267@gmail.com # Mojang account email address
#    password: "this isn't really my password"
#
#  herpderp40300499303040503030300500293858393589:
#    email: herpderp@derpherp.com
#    password: dooooo

# チャットで/だけを打った時、コマンドの一覧を表示する
# 表示数が多いので、もしチャットがフリーズするようならfalse推奨
command-suggestions: true

# motdをJava版サーバーと同じにする
passthrough-motd: true
# プロトコル名をJavaバージョンと同じにする
# 見た目上は何も変わりないのでそのままにする
passthrough-protocol-name: false
# 最大プレイヤー数と現在ログイン中のプレイヤー数情報をJava版サーバーと同じにする
passthrough-player-counts: true
# 古いpingパススルー機能を使う
# 一般人が使う分には必要ない
legacy-ping-passthrough: false
# Java版サーバーにpingを送信する回数(legacy-ping-passthroughがfalseの場合は関係ない)
# 関係ないのでそのままにする
ping-passthrough-interval: 3

# 統合版ユーザーとしてログインできる最大人数を設定する
# spigotサーバーが満員の場合は、max-playersの値を超えていなくてもログインできない
max-players: 20

# デバッグメッセージを表示する
# 一般人には必要ない
debug-mode: false

# スレッドプールサイズ
# よくわからないのでそのままにする
general-thread-pool: 32

# Optifineマントなどを有効にする
allow-third-party-capes: true

# MinecraftCapeの耳を表示する
# よくわからないのでそのままにする
allow-third-party-ears: false

# Java版であるクールダウンタイムのチャージメーターを統合版でも擬似表示する
# あると便利なのでtrue
show-cooldown: true

# クライアントが要求した言語が無い場合に設定する言語
# 設定する必要はない
# default-locale: en_us

# チャンクキャッシュ機能を有効にするか設定する
# 大量のRAM領域を消費するのでfalseのまま
cache-chunks: false

# イメージをキャッシュする時間を指定する
# 0で無効になる
# 意味が分からないのでそのままにする
cache-images: 0

# 統合版ではY127以上にブロックを建築できないので、ディメンションIDをエンドIDにすることによってY127以上に建築できるようにする
# 空の見た目が変わるだけなので、ネザーは通常空が見えないので、見た目的にはあまり変わりない
# スポーンするmobも変わりない
# Y127以上に行くことがないのでfalseのままにする
above-bedrock-nether-building: false

# 統計の設定
# 絶対にいじらない
metrics:
  enabled: true
  uuid: 29b59910-1b9a-4d03-bc52-b6de1f1deb2e

# これより下は高度な設定なので、いじらない

# Allow connections from ProxyPass and Waterdog.
# See https://www.spigotmc.org/wiki/firewall-guide/ for assistance - use UDP instead of TCP.
enable-proxy-connections: false

# The internet supports a maximum MTU of 1492 but could cause issues with packet fragmentation.
# 1400 is the default.
# mtu: 1400

config-version: 4

motdは↓の画像の赤で囲んだ部分の文字のことです。

④floodgate-bukkit内のconfig.ymlを編集します

# 秘密鍵のファイル名(そのままにする)
key-file-name: key.pem

# Java版ユーザーと統合版ユーザーの名前がかぶらないようにするために、統合版の名前の先頭にプレフィックスをつける
# *だと一部のプラグインでうまく処理できないため、_BE_に変更する
username-prefix: "_BE_"

# 統合版の名前の空白を_に置き換える
# 名前の空白をうまく処理できないので、trueにする
replace-spaces: true

disconnect:
  # 鯖主がセットアップしたGeyser以外でログインしようとしたときに表示するメッセージ
  # 普通は表示されないのでそのままにする
  invalid-key: Please connect through the official Geyser
  # プラグインのアップデート等によって鍵のフォーマットが変わったとき、表示するログインエラーメッセージ
  # 普通は表示されないのでそのままにする
  invalid-arguments-length: Expected {0} arguments, got {1}. Is Geyser up-to-date?

# プレイヤーリンク機能
player-link:
  # Java版と統合版のリンク機能を使用する
  # この機能を使用すると、同じユーザーがJava版と統合版で入ったときに同じプレイヤーとして扱われる
  # 必要ないのでfalse
  enable: false
  # SQLiteのみ対応
  # enabledがfalseなので関係ない
  type: sqlite
  # /linkaccount /unlinkaccountコマンドを実行できるようにする
  # enabledがfalseなので関係ない
  allow-linking: true
  # リンクコードが何秒で期限切れになるか設定する
  # enabledがfalseなので関係ない
  link-code-timeout: 300

⑤サーバーを起動します

統合版で入ってみる

※MinecraftWindows10Editionを使っていて、サーバーを建てたPCでログインする場合、以下のコマンドをPowerShellで実行する必要があります。

CheckNetIsolation LoopbackExempt -a -n="Microsoft.MinecraftUWP_8wekyb3d8bbwe"

※スイッチ/PS4/Xbox Oneを使っている方は通常特集サーバー以外には入れません。
それらのデバイスでログインする方法はhttps://novablog.work/be-join-any-server/に書いてあります。
尚、筆者はWindows10Editionでしか検証していないので、ほかのデバイスではどのような挙動になるかは分かりません。

もし、統合版で友達などに入ってもらう場合は、configのbedrock→portで設定したポート忘れずに開きましょう。
TCPではなくUDPで開くんですよ!!
ポート開放に関する質問は、この記事では受け付けません。

これで統合版とJava版がクロスプレイできるようになりました!




<NPサーバー>

マインクラフトサーバーを運営しています!

  1. 統合版、Java版どちらでも参加できます!
  2. 経済、サバイバル、PvP(実装中)など、様々な遊び方があります。
  3. 年齢は問いません!

是非ご参加ください!!
https://novablog.work/minecraft-server/

にほんブログ村

ブログランキング・にほんブログ村へ