はじめに
Minecraft
をクロスプレイできるまでに調べたこと/やったことをまとめています。
身内でクロスプレイで遊ぶためにMinecraftサーバーを立ち上げて運用しています。
知りたい情報は見出しからジャンプしてください。
クロスプレイできるまでに調べたこと
Minecraftの種別
Minecraftは
- Java版
- 統合版(Bedrock Edition)
の2種類が存在する。
PS4/5 , Switch , スマホなどは統合版となる。
PCはJava版、統合版の選択購入となる。
※ MacOSの場合はJava版のみ
クロスプレイとは
異なるハード、種別を跨いでオンライン上で遊ぶこと。
- windows同士だが、それぞれJava版と統合版で種別が異なる
- 統合版だが、PS4とSwitchでハードが異なる
- MacOS(Java版)とSwitch(統合版)
通常では、統合版間でのクロスプレイに対応しており、Java版と統合版のクロスプレイはサポートされていない。
クロスプレイを実現するには?
Java版 と 統合版 が参加できるサーバーを用意(借りる)する。
ローカルで立てて公開するか、課金してクラウドを借りるかの二択になるようだ。
また公開したサーバーはHackしておく必要がある。(後述
クロスプレイに最低限必要なもの
- Microsoftアカウント もしくは Xbox Liveアカウント
クロスプレイ構築の見積もり
ローカルで立てて公開する
私の採用した手段としては、
- Mac Mini上でMinecraftサーバーを起動
- Minecraftサーバーにクロスプレイ用の設定を施す
- グローバルで公開する
を目指し構築しました。
参考にしている記事は こちら
MinecraftサーバーはDockerで構築できる
Google検索で Minecraft docker-compose
で検索し、
実際に運用されている方の記事を参考にしました。
作業見積もり
- Mac MiniのOSを最新化する
- Docker Desktop for Mac をインストールする
- docker-compose.yml 作成
- docker-compose up 起動
- ダイナミックDNSを取得
- ダイナミックDNSの設定を追加
- MODを追加
Minecraftサーバーにクロスプレイ用の設定を施す
についてはこちらで実現
クロスプレイ構築の作業
作業一覧
- Mac Mini の準備
- Mac OSを最新化
- Docker Desktop for Mac をインストール
- Github にリポジトリ作成
- docker-compose.yml作成
- 初期セットアップ
- リポジトリをクローン
- docker-compose up 起動
- vi config.yml
- localhost で確認
- LAN(Local Area Network) で確認
- Mac Mini の設定を変更
- ルーター/モデムの設定変更
- WAN(Wide Area Network) で確認
- ダイナミックDNSの取得&設定
- ルーター/モデムの設定変更
作業詳細
Mac Mini の準備
Mac Mini(2016) に
-
macOS Monterey 12.4
をクリーンインストール - Docker Desktop for Mac を公式よりインストール
Githubにリポジトリ作成
URL: https://github.com/mabubu0203/minecraft_multi
クロスプレイを実現するためには
Minecraft を JavaEdition
✖️ SPIGOT
サーバーで起動し、以下のプラグインを導入する
- Geyser-Spigot
- floodgate-spigot
BedrockEdition
からは Geyser
を介して遊ぶこととなる
docker-compose.yml/ports
記載内容 | 説明 |
---|---|
19132:19132/udp | BedrockEditionからはGeyserを介する |
19133:19133/udp | BedrockEdition(IPv6)からはGeyserを介する |
25565:25565/tcp | JavaEdition用の標準ポート |
25575:25575/tcp | Rcon用のポート |
docker-compose.yml/enviroment
細かい設定等は下記に説明あり
URL: https://github.com/itzg/docker-minecraft-server/blob/master/README.md
特に大事だと思ったものは下記に抜粋
property | value | 説明 |
---|---|---|
DIFFICULTY | easy | |
HARDCORE | false | ハードコアを許可するかどうか |
MAX_PLAYERS | 15 | 最大接続人数 |
MODE | survival | |
PVP | false | ユーザー同士で対戦するを許可するかどうか |
property | value | 説明 |
---|---|---|
ENABLE_WHITELIST | TRUE | 許可されたユーザーのみアクセスできるようにする |
EULA | TRUE | |
MODS_FILE | /extras/mods.txt | |
TYPE | SPIGOT | |
TZ | Asia/Tokyo | |
VERSION | 1.19 | 2022/07時点で最新のものを指定 |
初期セットアップ
- リポジトリをクローン
$ git clone https://github.com/mabubu0203/minecraft_multi.git
- 初回起動
$ docker-compose -f ./docker/docker-compose.yml up --build --remove-orphans
エラーがでていないことを確認
$ docker-compose -f ./docker/docker-compose.yml stop
- pluginの設定修正
vi ./docker/data/plugins/Geyser-Spigot/config.yml
remote.auth-type: online -> floodgate - 再度起動後、Mac Miniの minecraft(JavaEdition) から接続を確認
接続先:localhost:25565
LAN(ローカルエリアネットワーク) で確認
- Mac Mini のセキリティを変更
システム環境設定 -> セキリティとプライバシー -> ファイアーウォール - ルーターのポートフォワードの設定を変更
25565(TCP)
19132(UDP) - Mac Book Pro(Mac Miniとは別の端末)から繋いで確認
観点:Java版同士の疎通確認 - Switchから繋いで確認
観点:統合版からの疎通確認
参考: 【プラグイン紹介】統合版とJava版でクロスプレイが出来るプラグイン【GeyserMC】
WAN(Wide Area Network) で確認
- ダイナミックDNSを取得
- Mac Mini にダイナミックDNSの設定を施す
- 友人に繋いで確認してもらう
観点:WANの疎通確認
作業していてハマったこと/苦労したこと
docker-compose.yml/enviroment
value値に ture/false
を クォートコート(') or ダブルクォート(")
で括らない場合怒られる
-> value値は文字列か数値しかだめboolはないんですね、なるほど
TYPE: "PAPER"
だとswitchからアクセスできない
-> 原因がわからない。TYPE: "SPIGOT"
で動作しているので諦めた
起動ログの時間がおかしい
-> タイムゾーンの設定(TZ: "Asia/Tokyo"
)で回避した
Geyser-Spigot
./docker/data/plugins/Geyser-Spigot/config.yml
を
remote.auth-type: online -> floodgate
に修正
LANから接続できない
- MacOSのファイアウォールに妨げられていた
- ルーターのポートフォワードの設定が足りていなかった
WANから接続できない
- 2重ルーターとなっていた
- auひかりから貸与されているホームゲートウェイにブリッヂモードで接続していなかったことが発覚
- LAN内からだとダイナミックDNSで接続できない
運用やってみての気づき
WHITELIST
deploy時は whitelist.json の中身は空なので誰もサーバーに入れない。
whitelist.json にユーザーを手作業で追加した。
ついでに ops.json にも管理者権限をもっていいユーザーを手作業で追加した。
参考: 【Minecraft】ホワイトリストの導入方法
以降はops権限をもったユーザーがコマンドで /whitelist add
でユーザーを追加している。
ただし、追加される側は自分のユーザー名を知る必要がある。
裏技で、ホワイトリストに弾かれたログからユーザー名を逆引きすることもできる。
統合版はハードにより強制アップデートされる可能性がある
PS4/5 , Switch , スマホなどはハードの状況により、強制アップデートされることがある。
サーバー側はdocker-composeの記述でバージョンを固定しているので、差異が発生する可能性がある。
Java版は、ユーザー自身で起動するバージョンを複数選択可能である。
Minecraftを遊びたい時間は十人十色
Mac Miniの電源を落とすと公開されているMinecraftは閉じるわけだが、
複数人で遊ばなければいけないというわけでもないので、常時プレイできるように提供したほうが親切設計ではある。
影Mod
M1Macで影Modを導入した事例が少ない。
mods.txtで指定するプラグインについて
jenkinsの lastSuccessfulBuild
によって最新のjarをとってくる仕組みになっている。
なので、dockerの起動ログを見に行かないとどのバージョンのプラグインを利用されているかよくわからない。
※ プラグインのバージョンを意識する必要は正直ないので、問題はない