テフロウのおぼえがき

手抜きや趣味に関しての一覧、手順、ノウハウなど

当ブログの概要を併記して分類を行った記事一覧は下記から

記事一覧

コンシューマ機版マインクラフトで過去バージョン用のワールドを遊ぶ

はじめに

SwitchやPS4Xbox等のコンシューマ機で過去バージョンのマルチサーバーに接続し、遊ぶ方法です。

どうにかしてコンシューマ機にて適正環境のマルチサーバーにてThe Unusual SkyBlock(https://skyblock.jp/tusb-download/)(以下TUSB)で遊びたかったために構成しました。

Spigotで動くのであればplugin版のGeyser(https://geysermc.org/)とViaVirtsion(https://github.com/ViaVersion/ViaVersion)でてっとり早く動作させるんですが、TUSBはSpigot等のmodサーバーだと動作が怪しいらしいので……

このように書いていますが、Windows 10やAndroid等を含めたBE版、マルチサーバーと異なったバージョンのJava版のクライアントも対象となります。WANの自身が管理者でないサーバーに接続することもできます。

 

条件

この方法はマインクラフトを、PCで動作させるソフトウェアを介してマルチサーバーに接続します。そのため、各種ソフトウェアを動作させるPCが必須です。

  • 接続元のマインクラフトクライアントについての条件は下記のとおりです。
    バージョン1.7以降(サーバー側のバージョンとの組み合わせは問わない)
    バニラサーバーに接続可能
  • 接続先のマインクラフトサーバーについての条件は下記のとおりです。
    バージョン1.8以降(クライアント側のバージョンとの組み合わせは問わない)
    バニラクライアントにて接続可能
    online-mode=false(この条件は構成や設定次第でなくすことができるかもしれません)
    ※クライアントとサーバーとのバージョンの組み合わせについては原理的にはどの組み合わせでも可能だと思われるが未検証。サーバー側1.10.2、クライアント側1.17.1でのみ実際に動作を確認済み
    ※data packやresource packとの整合性については未検証
  • 各種ソフトウェアを動作させるPCの条件については下記のとおりです。
    Java16以降推奨
  • その他の条件については下記のとおりです。
    ソフトウェアを動作させるPCに接続するためのDDNSワイルドカードが利用可能なDuckDNS等にて取得すること

 

方法

いろいろな部分について詳しくないため最低限動作することだけを目指しています。実践する際は自己責任でお願いします。

オフラインモードのため、スキン等の一部が機能しません。(改善できるか検討中)

構成は下記のとおりです。

  • BE版の場合
    BE版マインクラフトクライアント

    Geyser Standalone(以下Geyser)

    VIAaaS

    マインクラフトサーバー
  • Java版の場合
    Java版マインクラフトクライアント

    VIAaaS

    マインクラフトサーバー
  • 事前準備
    下記ソフトウェアを利用するため、事前にダウンロードしておきます。
    VIAaaS(https://github.com/ViaVersion/VIAaaS)
    クライアントのバージョンを偽装し、どのバージョンのサーバーにも接続することができるようにするソフトウェア。
    [Actions→適当なbuild→artifact]よりダウンロード。ファイルを解凍しファイル名がVIAaaS-[バージョン]-all.jar(以下VIAaaS-all.jar)のものを使用する。buildによって動かなかったりするのでいろいろ試してみてください

    Geyser(https://geysermc.org/)
    通信内容の相互変換を行い、BE版のクライアントにてJava版サーバーに接続可能とするソフトウェア。
    [右上のDownload→Jenkins→Geyser.jar]よりダウンロード。
  • 導入
    それぞれ適当なディレクトリにGeyser.jar、VIAaaS-all.jarを格納し、jarファイルを一度実行、停止する。
  • 設定
    jarファイルを実行したことで設定ファイルが生成されるので、それぞれ、最低限下記の設定を行います。設定はあくまで一例ですので、環境に応じて読み替えてください。
    Geyser[config.yml]
      bedrock:
        port: 19132 #BE版からのudp接続ポート ※1
      remote:
        address: [VIAaaSへの接続アドレス] #VIAaaS側への接続アドレス。接続環境に応じてアドレスジェネレーターより生成するアドレス
        port: 25566 #VIAaaS側への接続ポート
        auth-type: offline

    VIAaaS[config/viaaas.yml]
      port: 25566 #JavaクライアントやGeyserからのtcp接続ポート ※2
      bind-address: 0.0.0.0 #許容する接続元に応じて設定
      host-name: -[VIAaaSに接続する際のホスト名] #基本的にはDDNSにて取得したホスト名
      default-backend-port: 25565 #接続ポートを指定しない際のデフォルトポート。基本的にはマインクラフトサーバーのデフォルトポートと同じ

    設定に合わせて下記ポートを開放します。
    ※1 Geyserへの接続用udpポート
    ※2 VIAaaSへの接続用tcpポート
  • アドレスジェネレーターの使い方
    GeyserやJava版クライアントからVIAaaSに接続する際のアドレスはアドレスジェネレーター(https://jo0001.github.io/ViaSetup/aspirin)を利用して生成する。それぞれ下記を入力することでGenerated Addressにアドレスを生成する。
    Backend Address:マインクラフトサーバーのアドレスとポート
    Backend Version:マインクラフトサーバーのバージョン
    VIAaaS Address:VIAaaSが動作するPCのDDNSを利用したアドレス
  • 実行
    設定が完了したらVIAaaS、Geyserをそれぞれ起動します。
  • 接続
    上記の構成でソフトウェアでJava版とBE版の違い、バージョンの違いを吸収しマルチサーバーへ接続、操作することができるようになると思います。接続先は下記の通り。

    BE版からの接続
      アドレス:ソフトウェアを動作させているPCのアドレス
      ポート:Geyserへのudp接続ポート
    ※コンシューマ版からの接続の場合、特集サーバー以外に接続するためにDNSをBedrockConnectサーバーのものにしておく。
    詳細はBedrockConnect(https://github.com/Pugmatt/BedrockConnect)を参照
    Java版(サーバーとクライアントのマインクラフトバージョンが同等でない)からの接続
      アドレス:アドレスジェネレーターにて生成したアドレス
      ポートVIAaaSへのtcp接続ポート

    Java版(サーバーとクライアントのマインクラフトバージョンが同等)からの接続
      アドレス:通常通り
      ポート:通常通り

 

問題点

Java版とBE版の違い、バージョンの違いを吸収しているとはいえ、完全に互換があるわけではありません。未検証ですが下記のような部分が怪しいです。

Java版ではあるがBE版にはない部分。もしくはその逆については、該当部分のバインドがないため利用できないか、サーバー側にて反映されない可能性が高い。

クライアントのバージョンではあるがサーバーのバージョンにはない部分。もしくはその逆についても同様。

たとえばTUSB等で存在する、チャットテキストをクリックすることで実行されるコマンドは、BE版では実行することができなかった。実際に遊ぶ際にはopやコンソールにて同等のコマンドを実行してやる必要がありそうだ。

 

クライアント側だけで完結する部分、サーバー側だけで完結する部分については問題ない可能性が高い。

たとえばサーバーコマンドとそれに伴う動作についてはサーバー側の処理なので問題ないと思われます。

 

まとめ

基本的に上記で動作すると思います。

テストとしてAndroidのBE版でTUSBに挑戦したんですが、一部を除きとりあえず問題なく動くようです。ちなみに操作難度的にチュートリアル時点で地獄でした。

細かい部分については現在随時検証していますので、変更点があり次第更新します。