SwitchとiPadで遊ぶ宅内minecraftサーバー

二週間ほど前から妻がマインクラフトを始めた。2年ほどクリエイティブモードで遊んでいる息子に習いながら、穏やかな平地を見つけて家を建て、洞窟を冒険し、ブランチ鉱法で鉄の採掘を行い、拠点に村人を連れてきて、廃坑から持ち出してきたレールで交通機関を作るなどして遊んでいたのだけど、三人で遊んでいるとインベントリーも開かないほど重くなってしまった。うちのゲーム環境はゲーミングPCやPS5ではなくNintendo SwitchとiPad、iPhoneなので、サバイバルゲームのマルチプレイサーバーのホスティングは荷が重いのだ。

そこで、息子にあげたお下がりのiMacでサーバーを立ち上げることにした。マインクラフトのサーバーはてっきりサードパーティーのものだと思っていたんだけど、公式があるんだね。これはありがたい。

見ての通りWindows版とLinux版(というかUbuntu版)しかないので、Dockerで動かすことにする。仮想環境なのでパフォーマンスが最高というわけではないけど、iMac 2020のCPUは3.3GHz 6コアのIntel Core i5。画面を使うわけでもないし、Fution Driveなので仮想記憶に落ちてもそこそこ早い。そもそもメモリが16GBもあるのでスペックは問題ない。構築には以下のZennを参考にした。

Dockerはmastodonで使ったことがあるけど手持ちの環境にはインストールしていなかったので、iMacにDocker Desktopをダウンロードするところから。

インストール中に息子がJava版のマインクラフトで遊んでいたので、sshで入ってbrewでインストールしようとしたんだけど、このインストールプロセスはデスクトップ操作をシェルから実行するもので、セキュリティ認証やアプリケーションの起動をシェルで終わらせるのが難しい(結局諦めてデスクトップで操作した)。

Docker Desktopはちょっと癖がある。コマンドがインストールされるのは/usr/bin/local/とかじゃなくて、/Applications/Docker.app/Contents/Resources/bin/docker(GUIアプリケーションのパッケージの内部)。ローカルではパスが通るけど、sshでも$PATHを通さないとsshから起動できない。そしてコマンドはDocker Desktopを起動していないと使えない。それでも、ブログの通りにcompose.yamlを作ってdocker compose up -dするとサーバーが立ち上がり、永続化用のフォルダーができて色々とファイルが作られた。compose.yamlはこんな感じ。server.propertiesのパラメーターがcomposer.yamlで書けるので無理なく立ち上げられる。

services:
  # =================================================== #
  #  Bedrock Server                                     #
  # =================================================== #
  bedrock:
    container_name: home-bedrock
    image: itzg/minecraft-bedrock-server
    tty: true         # ターミナルの割り当て(`-t`オプション)
    stdin_open: true  # 標準入出力ストリーム(`-i`オプション)
    environment:
      SERVER_NAME: "new-world" # a default is "Dedicated Server"
      #GAMEMODE: "SURVIVAL"
      #FORCE_GAMEMODE: "FALSE"
      #DIFFICULTY: "EASY"
      #ALLOW_CHEATS: "FALSE"
      #MAX_PLAYERS: 10
      #ONLINE_MODE: "TRUE"
      #WHITE_LIST: "FALSE"
      #ALLOW_LIST: "FALSE"
      SERVER_PORT: "19134"
      SERVER_PORT_V6: "19135"
      #ENABLE_LAN_VISIBILITY: "TRUE"
      #VIEW_DISTANCE: 12
      #TICK_DISTANCE: 4
      #PLAYER_IDLE_TIMEOUT: 30
      #MAX_THREADS: 8
      LEVEL_NAME: "My世界" # a default is "Bedrock level"
      EULA: "TRUE"
      VERSION: "LATEST"
    ports:
      - 19134:19134/udp
    volumes:
      - ./bedrock:/data
      - /etc/timezone:/etc/timezone:ro
    restart: unless-stopped

portはデフォルトの19312ではなくて19314にずらしている(デフォルトのポートは、後述するBedrockConnectで使っている)。妻だけではなく私もワールドを持ちたいしね。必要なライブラリだけダウンロードするのでimage作成も一瞬。さすがDocker。ちょっと感動。

iPhoneのマインクラフトからIPを指定してサーバーに入ると、世界が構築される。リスポーン地点は氷雪バイオーム。粉雪だまりに落っこちてあっという間に死んだ(マインクラフトのハードさはWizardryに匹敵すると思う)。

次は引越しだ。ワールドデータはiOSならFilesからダウンロードできるので、途中まで遊んだワールドを引っ越しておく。Switchはファイルにアクセスできないけど、公式ゲームサーバーのRealmに加入してワールドをサーバーにアップロードして、iPhoneでログインしてダウンロードすると、iPhoneで作った世界のように引っ越せる。Realmはサブスクリプションだけど初月無料枠がある。

これでiPadやiPhoneは宅内サーバーで遊べるんだけど、Switchから宅内サーバーにアクセスするにはもう一つハードルを越えなければならない。

同じ統合版でもWindows版とモバイル版は勝手サーバーを追加できるんだけど、コンシュマーゲーム機用のマインクラフトにはサーバー追加機能がない。マインクラフトの世界にも闇はあるので制限は無理もないけど、プラットフォーマーのペアレンタルコントロールで解除できるようになってくれないかなあ……とは思うけど、ないものねだりしても仕方がない。そこで使うのがサーバー選択だけを行う専用ワールドサーバー、BedrockConnectだ。

BCMainというフレンドを登録すると、このアカウントが提供しているBedrockConnectのワールドに入ることができる。ワールドを読み込むとサーバー選択画面が現れて、自分で好きなサーバーを登録することができるのだ。マインクラフト世界の広がりを感じたいのなら、ぜひ試してみてほしい(この数日、このアカウントが現れなくなってしまったのだけど)。

これでSwitchから接続することができた。よしよし、と思っていたのだけど、BedrockConnectのサーバーがちょっと不安定だった。アクセスが集中してるのか、それともサービスを継続できないのかわからないが、繋がらないことも増えてきたので、iMacでBedrockConnectもサーブすることにした。

BedrockConnectもDockerのイメージがあるので起動しておく。compose.yamlはこんな感じ。

version: '3'
services:
  bedrock:
    restart: always
    image: pugmatt/bedrock-connect
    container_name: bedrock-connect
    # environment:
    #   featured_servers: false
    custom_servers: "/brc/custom_servers.json"
    #   user_servers: true
    ports:
      - "19132:19132/udp"
    volumes:
      - './servers.json:/brc/custom_servers.json'

そして最後に、iMacに誘導する仕組みだ。フレンドを使う方法は遅いし技術もいるので、DNSサーバー起動して、提供してマインクラフトの認可済みサードパーティーワールドをiMacに転送することにした。これもDockerだ。設定は以下の通り。

変更:実はDockerをやめました。53番ポートはMacがRandezbousで使っているポートなのでDockerのポートマッピングとコンフリクトしてしまいます。そこで、dnsmasqをbrewでインストールして、設定することにしました。

# プライベートIPの逆引きは上位DNSに転送しない
bogus-priv

# 名前と IP の管理を、/etc/hosts ではなく /etc/dnsmasq.d/add_hosts に変更する.
# (∵ コンテナ内の /etc/hosts は、ホスト側から容易にマウントできないため)
# addn-hosts=/etc/dnsmasq.d/add_hosts 

server=8.8.8.8
address=/geo.hivebedrock.network/192.168.0.X
address=/hivebedrock.network/192.168.0.X
address=/play.inpvp.net/192.168.0.X
address=/mco.lbsg.net/192.168.0.X
address=/play.galaxite.net/192.168.0.X
address=/play.enchanted.gg/192.168.0.X
port=53

あとはSwitchのDNSサーバーにiMacのIPアドレスを指定してあげればいい。上位DNSはGoogle。プロバイダのDNSを使わないと弊害も出るけど、今のところ、Switchでは目立つ問題が出ていない。

Switchの認定ワールドにアクセスするとiMacで動いているBedrockConnectが起動してサーバー選択画面が立ち上がり、異なるポートを開いているマインクラフトサーバーにアクセスできる。

Dockerのコンテナなので、キャッシュやら何やらが溜まるらしく長時間起動しっぱなしだとパフォーマンスが落ちてしまうのだけど、そのあたりはこれから勉強が必要なところ。ゲームは快適。ネザーゲートも開いて地図も広げ、三人それぞれ好きな時間に好きな冒険ができるようになった。

マインクラフトは楽しい。家族や友人たちと遊ぶともっと楽しいよ。

追記:妻はついにネザー要塞を発見。スカを引かされたらしくネザーウォートが見つからなかったのでブレイズスポナーにトラップを作って鬱憤を晴らしています。

コメントを残す