息子は Minecraft が大好きだ。Nintendo Switch 版を使っており、木を切って土を掘り返しては日々拠点を作り、剣を作り牛を狩っている。そろそろマルチプレイも体験してもいいだろうということで、自宅に Minecraft サーバーを構築した。いろいろと設定が面倒だったので、Nintendo Switch (BEDROCK 版)で気軽にマルチプレイをしたいなら Realms を使うのが一番だと思う。友達と遊ぶようになれば、さすがに Realms になるのかな。
Nintendo Online を契約していないと、そもそもオンラインプレイができない。
今回は BEDROCK 版サーバーを docker で起動したいのでitzg/docker-minecraft-bedrock-serverを使用した。docker-compose.yml を下のように作成して、docker-compose up で起動。docker-compose.yml における environment の詳細は【マイクラ統合版】server.properties の設定一覧と解説【サーバー設定】 | ひきこもろんが詳しい。難易度は easy, ゲームオーバーになってもアイテムをドロップしない設定にしたいのでチートモードを有効に。アイテムをドロップしない 「/gamerule keepInventory true」 コマンドを叩くために、DEFAULT_PLAYER_PERMISSION_LEVEL を operator に設定。DEFAULT_PLAYER_PERMISSION_LEVEL は本来は member にして、個別のユーザーに管理者権限を付与するべきだが息子と二人しか遊ばないのであえて operator にしている。データのバックアップとかはまた後日
version: '3.4'
services:
bds:
container_name: bds
restart: always
image: itzg/minecraft-bedrock-server:latest
environment:
SERVER_NAME: jitaku
EULA: "TRUE"
GAMEMODE: survival #ゲームモード
ONLINE_MODE: "false"
TICK_DISTANCE: 12
ALLOW_CHEATS: "true" #チートの許可
DIFFICULTY: easy #難易度
LEVEL_NAME: MY WORLD
DEFAULT_PLAYER_PERMISSION_LEVEL: operator #参加者のデフォルト権限
TZ: Asia/Tokyo
ports:
- 19132:19132/udp
volumes:
- ./data:/data
stdin_open: true
tty: true
先ほど起動したマインクラフトサーバーのインスタンスに接続できるか確認する。
ここからが面倒くさい。Switch 版マインクラフトは決まったホスト(特集サーバー)にしか接続できないため、ホストを偽装する必要がある。私は dnsmasq を使ったが何でも良いので、ローカルネットワークに DNS サーバーを立てて、以下のようにホストを偽装する。
192.168.0.200 geo.hivebedrock.network
192.168.0.200 play.galaxite.net
192.168.0.200 mco.mineplex.com
192.168.0.200 mco.cubecraft.net
192.168.0.200 play.pixelparadise.gg
192.168.0.200 mco.lbsg.net
192.168.0.200 play.inpvp.net
自前で DNS サーバーを立てずに、BedrockConnectが提供している DNS サーバー を使う手もあるが、日本からだと接続が遅く、DNS ポイズニングっぽいものを提供している DNS サーバーを設定するのはちょっとねえ。
ローカルネットワークに立てた DNS サーバーを Switch におけるプライマリ DNS に設定する。
マインクラフトを再起動して、子供用のマイクロソフトアカウントでログインする。サーバーの所に特集サーバーが表示されているが、サーバー名が先ほど docker で立てたサーバーインスタンスで設定しているものになっていれば OK。