お金を支払って使用するRealmsではない、自前のVPSでマインクラフト統合版のサーバを作成してしまいました。
別に、利用期限が切れて、お金払うのがもったいないわけではありませんが。
まずは、公式から統合版マイクラサーバをダウンロードします。(VPSなので、サーバのOSはubuntu使用しています。)
https://www.minecraft.net/ja-jp/download/server/bedrock/
これをVPSに設置して、プログラムを実行して、ファイアーウォール(iptable)を開放すれば完成。
展開する場所は実行できる場所であれば、どこでもOK。
適当なフォルダを作成して、そこにzipファイルを展開します。
展開したフォルダで以下のコマンドを実行。
LD_LIBRARY_PATH=. ./bedrock_server
ここまではマニュアルどおりですな。
$ LD_LIBRARY_PATH=. ./bedrock_server
NO LOG FILE! - setting up server logging...
[2019-12-19 19:14:12 INFO] Starting Server
[2019-12-19 19:14:12 INFO] Version 1.14.1.4
[2019-12-19 19:14:12 INFO] Session ID 33eced1a-7577-414d-b987-76524f997544
[2019-12-19 19:14:12 INFO] Level Name: Bedrock level
[2019-12-19 19:14:12 INFO] Game mode: 0 Survival
[2019-12-19 19:14:12 INFO] Difficulty: 2 NORMAL
[2019-12-19 19:14:15 INFO] IPv4 supported, port: 19132
[2019-12-19 19:14:15 INFO] IPv6 supported, port: 19133
[2019-12-19 19:14:15 INFO] IPv4 supported, port: 49148
[2019-12-19 19:14:15 INFO] IPv6 supported, port: 52245
[2019-12-19 19:14:17 INFO] Server started.
実行が確認できたら、ctrl+cで一旦終了します。
iptablesの設定
サーバ実行中に
$ netstat -ltup4
を実行すると、統合版マインクラフトサーバはUDPのポート番号19132を使用していることがわかります。
udp 0 0 0.0.0.0:19132 0.0.0.0:* 15680/./bedrock_ser
※もう一つポートを使用していますが、ランダムで決められている上に使用しなくても問題ないので、無視して構いません。
なので、UDPの19132を開放します。
$ sudo iptables -A INPUT -p udp -m udp --dport 19132 -j ACCEPT
この状態で、再び統合版マインクラフトサーバを起動し、クライアントのサーバー一覧からサーバーアドレスを指定してログインできること確認。
※ここで最初躓いたのは内緒。
ログインできることを確認したら一旦ログアウトします。
ホワイトリストの登録
このままでは、サーバのURLがわかってしまうと誰でもログインできる状態になっているので、ホワイトリストを作って、登録したメンバーだけしかログインできないようにします。
サーバを設置したフォルダにserver.propertiesというファイルがあるので、これを開いて、以下を変更します。
white-list=true
# If true then all connected players must be listed in the separate whitelist.json file.
# Allowed values: "true" or "false"
white-list=trueに書き換えて保存することで、ホワイトリストが有効になります。
続いて、ホワイトリストの登録。
whitelist.jsonを開いて、以下のように書き加えます。
[
{
"ignoresPlayerLimit": false,
"name": "ユーザー名"
}
]
ignoresPlayerLimitというのは接続ユーザー数のリミットに関係なくログインさせるか、という設定です。
通常では最大接続ユーザー数は30なので、これはどちらでも関係ないと思います。
nameの項にマインクラフトアカウントのユーザー名を記入します。
この画面の真ん中に出てるじゃないですか。このアカウント名ですよ。
記入したら保存して、サーバを起動し、クライアントからログインできることを確認します。
プレイヤーに権限を付与する
このままでもゲームはプレイできますが、現在地の座標を表示したり、他プレイヤーをキックしたり、やりたい人によっては、チートしたいとかあると思いますが、このままではそれを変更できる権限がありません。
なので、ユーザーに権限を設定します。
編集するファイルはpermissions.jsonです。
こんな感じに書き加えます。
[
{
"permission": "operator",
"xuid": "権限を与えるユーザーのxuid"
}
]
ここで、ユーザーのxuidというのは、もう一度、whitelist.jsonを開いてもらえれば書き足されるのがわかると思いますが、ユーザー個別に与えられたID番号のようなものです。
これは自力で探るのは困難なので、一度ホワイトリストに登録し、ログインしてもらって、ホワイトリストに書き足されたxuidを確認したほうが早いです。
permissionの値は、通常(デフォルト)は”member”になっていますが、これを”operator”にすることで、ゲーム全体に対していろいろな設定を行う権限が与えられます。
なので、このユーザーは座標を表示することも、他ユーザーをkickすることも、チートすることも可能になります。
一度”operator”になってしまえば、ゲーム内からでも「/」キーでさまざまな設定を変更することが可能です。
ちなみに統合版で、座標を表示するには、operatorが以下のコマンド入力すれば表示されます。
/gamerule showcoordinates true
まぁ、今は統合版プレイする予定はないから、サーバは停止させておきますけどね。