Minecraft Java Editionの設定 第2回 Windowsでマルチプレイサーバを建てる

友人とマルチプレイしたい、サーバを公開して色んな人と遊びたい、様々な理由でMinecraftサーバを立てたい!という需要はそれなりにあるでしょう。
しかし、何から手を付ければ良いのか、何が必要なのかを掴むのが難しいかもしれません。
構築は見様見真似でしてみたものの、なんとも安定しない、バックアップも何をしたら良いのかわからない。
そんなあなたへ、"はい世界"でお馴染みの@ProjectCBWのサーバ管理を担っている@shibanyan_1が、検索してもヒットしない情報も含めてすべて解説します。
更新履歴 見出しにジャンプ
日時 | 内容 |
---|---|
2020-06-18 |
|
2021-05-20 |
|
WindowsでなくLinuxをオススメする理由 見出しにジャンプ
Minecraftサーバは、WindowsでもLinuxでも立てることは可能です。
ただしWindows ServerでないWindows 10 HomeやProの場合、外部からアクセスするサーバのホストとして使用するのは規約違反のようです。
2. インストールおよび使用権。
c. 制限。製造業者またはインストール業者、およびマイクロソフトは、本ライセンス条項において明示的に許諾されていない権利 (知的財産に関する法律に基づく権利など) をすべて留保します。たとえば、このライセンスは、次の行為に関してお客様にいかなる権利も与えるものではなく、お客様は次の行為を行うことはできません。
(v) 本ソフトウェアをサーバーソフトウェアとして使用することもしくは商業的ホスティング用に使用すること、本ソフトウェアをネットワークを介して複数のユーザーが同時に使用できるようにすること、本ソフトウェアをサーバーにインストールしてユーザーがリモートアクセスできるようにすること、または本ソフトウェアをリモートユーザーのみが使用する目的でデバイスにインストールすること。
d. 複数使用のシナリオ。
(iii) デバイスの接続。お客様は、ライセンスを取得したデバイスでファイルサービス、印刷サービス、インターネットインフォメーションサービス、インターネット接続の共有およびテレフォニーサービスを利用することを目的として、ライセンスを取得したデバイスにインストールされた本ソフトウェアに対し、最大 20 台の他のデバイスからの接続を許可することができます。お客様は、任意の数のデバイスに、デバイス間でデータを同期するために、ライセンスを取得したデバイス上の本ソフトウェアにアクセスすることを許可することができます。ただし、本項は、お客様がこれらの他のデバイスに本ソフトウェアをインストールしたり、本ソフトウェアの主要な機能 (本項に記載する機能を除きます) を当該デバイス上で使用したりする権利を有することを意味するものではありません。
マイクロソフトソフトウェアライセンス条項 WINDOWS オペレーティングシステム 最終更新日: 2016 年 12 月
上記の内容はWindowsの設定 -> システム -> 詳細情報 -> マイクロソフト ソフトウェア ライセンス条項を読む でも確認できます。
パフォーマンス面でも、同等のマシン構成の場合Linuxの方が快適に動きます。Linuxで当たり前のように使用できるscreen
でのサーバへのコマンド送信、rsync
を使用した高速な自動バックアップ環境をWindowsで再現するのは、むしろLinuxより敷居が高いと言えるでしょう。
とはいえ、常時動かさず身内で少し遊ぶ程度のものであればWindowsで構わないと思いますし、実際私もMinecraftをプレイするのと同じクライアントPCのWindows上で建てることもあります。
OpenJDKのインストール 見出しにジャンプ
Minecraft Java Editionのサーバを建てるにはJavaが必要です。
最新のMinecraft LauncherにはJREが同梱されているので、それを流用しても構いませんが、第一回で触れたように、新たに最新のOpenJDKを導入するのがベストです。
普段OptiFineやModをインストールする際に必要な(前述の通り本当は不要)"Javaのインストール"とは少し違います。
How to download and install prebuilt OpenJDK packages
JDK 9 & LaterOracle's OpenJDK JDK binaries for Windows, macOS, and Linux are available on release-specific pages of jdk.java.net as .tar.gz or .zip archives.
https://jdk.java.net/ からダウンロードしてインストールせよと書かれています。

執筆時点ではOpenJDK 14が最新なので、Windows / x64のzipを選んでダウンロードし、展開します。
フォルダjdk-14.0.1
を丸ごとC:\
直下へ移動します。

C:\
+--jdk-14.0.1
| +--bin
| | +--java.exe <- Minecraftサーバで使う
| | +--javaw.exe <- Minecraft Launcherで使う
| | +--...
| +--conf
| +--include
| +--jmods
| +--legal
| +--lib
java.exeのフルパスはC:\jdk-14.0.1\bin\java.exe
になりました。
フルパスはjava.exeを選択した状態でShift
- 右クリック
-> パスのコピー
で取得できる。
まだインストールは終わっていません。
現時点でコマンドプロンプトでjavaと打っても、下記のようになると思います。
java -version
'java' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
java -version
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
これを
java -version
openjdk version "14.0.1" 2020-04-14
OpenJDK Runtime Environment (build 14.0.1+7)
OpenJDK 64-Bit Server VM (build 14.0.1+7, mixed mode, sharing)
に持っていきます。
その為には、環境変数Pathを通す必要があります。

Vanillaサーバを建てる 見出しにジャンプ
Mojangが公式に配布しているMinecraft Java Editionサーバは、通称"Vanilla"と呼ばれます。
server.jarのダウンロード 見出しにジャンプ
Minecraft Launcherの起動構成からダウンロードするか、powershell
で下記を実行するなどして、任意のバージョンのserver.jarを取得します。
# カレントディレクトリ
Set-Location C:\Minecraft\Servers\Versions
# Mojangからバージョンリストのjsonを取得
$Versions = Invoke-WebRequest -Uri 'https://launchermeta.mojang.com/mc/game/version_manifest.json' -UseBasicParsing | ConvertFrom-Json
# 結果を見る
$Versions
latest versions
------ --------
@{release=1.14.4; snapshot=19w36a} {@{id=19w36a; type=snapshot; url...
$Versions.latest.release
1.14.4
$Versions.latest.release
19w36a
# バージョン固有のjsonを取得(例: 最新のリリース)
$Latest = Invoke-WebRequest -Uri ($Versions.versions | Where-Object {$_.id -eq $Versions.latest.release}).url | ConvertFrom-Json
# server.jarのダウンロードURLを取得し、ダウンロード
Invoke-WebRequest -Uri $Latest.downloads.server.url -OutFile ./server.jar
Windowsでは以下に留意し、サーバ用のファイル群を置きます。
- ユーザ名は日本語を含まない半角英数が前提です。あらゆるアプリケーションで不具合を起こします。おま国です。
- 基本的にC:ドライブ直下等、管理者権限が不要な場所に置きます。
- ディレクトリ名に半角英数とアンダースコア以外の日本語や記号、スペースを含めてはいけません。
C:\MinecraftServer\server.jar
C:\Minecraft\Servers\Versions\server.jar
初回起動 見出しにジャンプ
コマンドプロンプトで下記を実行します。
rem server.jarのある場所に移動
cd C:\Minecraft\Servers\Versions
rem javaへ引数を渡してサーバを起動
java -jar .\server.jar
この時点ではサーバは起動しません。
eula.txtの編集 見出しにジャンプ
VSCode等のテキストエディタでfalseをtrueに書き換えて保存します。
MINECRAFT エンド ユーザー ライセンス条項に目を通しておきましょう。
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#Wed Jul 18 04:41:13 UTC 2018
eula=true
CLIの場合は、powershellで下記のようなコードを実行します。
(Get-Content eula.txt).Replace('eula=false','eula=true') | Out-File eula.txt -Encoding utf8
server.propertiesの設定 見出しにジャンプ
初回起動で生成されたserver.propertiesを編集します。
スポーン地点付近にブロックが置けない問題の原因
spawn-protection=0
低スペックで処理が遅れ過ぎると勝手にMinecraftサーバが停止する問題の対策
max-tick-time=-1
ゲームモードや難易度、ハードコアの切り替え
gamemode=survival
difficulty=normal
hardcore=false
プレイヤーの放置対策
player-idle-timeout=0
プレイヤー同士で殴り合いできるかどうか
pvp=true
level-type=default
コマンドブロックの有効/無効
enable-command-block=false
最大接続数の設定(Windows 10 HomeやProで外部に公開する場合、10人まで)
max-players=10
ポート番号の設定。何も指定せずに接続できるデフォルトポートが25565。
Minecraftサーバを同じマシンで複数建てる場合、ポート番号が重ならないようにする。
server-port=25565
サーバ側の描画距離。
プレイヤー毎にこの値が適用されるため、上げすぎないように。
view-distance=10
whitelistまたはopに登録したMCIDのみ参加できるようにするホワイトリストモードの有効/無効
white-list=true
MCIDをMojangのサーバに問い合わせて、正規のアカウントか確認することで、外部から接続できるようにするオンラインモードの有効/無効。
online-mode=true
Minecraftサーバにログインしてみる 見出しにジャンプ
eula.txtの編集とserver.propertiesの設定が終わったら、
もう一度初回起動の手順を行い、Minecraftサーバを起動します。

因みに、白いGUIは不要なので無効化できます。
java -jar server.jar nogui
次に、Minecraftのクライアントを起動して、サーバのアドレスを登録します。
今回はサーバとクライアントが同一なので、
localhost
になります。
友達に教えるアドレスは、公開する準備ができた後で解説します。

server.propertiesで設定した通り、クライアント側、サーバ側共にYou are not white-listed on this server!と出ていますね。成功です!

Whitelistの登録 見出しにジャンプ
Minecraftサーバコンソール内で下記を実行します。
whitelist add Shibanyaan
私が入れますね。

whitelist remove Shibanyaan
ホワリスから外されてしまいました。
サーバの停止 見出しにジャンプ
必ずstop
コマンドで終了します。Xボタンやタスクマネジャ等からkillすると正常にセーブされず、直前の変更が保存されていなかったり、チャンク単位で巻き戻ったりします。
stop
[19:04:55] [Server thread/INFO]: Stopping the server
[19:04:55] [Server thread/INFO]: Stopping server
[19:04:55] [Server thread/INFO]: Saving players
[19:04:55] [Server thread/INFO]: Saving worlds
[19:04:55] [Server thread/INFO]: Saving chunks for level 'world'/minecraft:the_nether
[19:04:55] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved
[19:04:55] [Server thread/INFO]: Saving chunks for level 'world'/minecraft:the_end
[19:04:55] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved
[19:04:55] [Server thread/INFO]: Saving chunks for level 'world'/minecraft:overworld
[19:04:55] [Server thread/INFO]: ThreadedAnvilChunkStorage (world): All chunks are saved
[19:04:55] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved
[19:04:55] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved
[19:04:55] [Server thread/INFO]: ThreadedAnvilChunkStorage (world): All chunks are saved
同様に、サーバ起動中にバックアップしたセーブデータの整合性は保証できません。
これの回避方法は、第3回 Minecraftサーバ起動中のバックアップで解説しています。
外部への公開 見出しにジャンプ
Windows Firewallの設定 見出しにジャンプ
ルータ側でポート開放しても、WindowsのFirewallで弾かれてしまうので、外からの通信(受信、Inbound)に対してWindows Firewallに穴を開ける必要があります。
コントロール パネル\システムとセキュリティ\Windows Defender ファイアウォール
の"詳細設定"や
Windowsの検索からアクセスできます。
WindowsでMinecraftサーバを公開する場合、"受信の規則"のみ設定すればよく、"送信の規則"に設定する必要はありません。
受信の規則を選択し、"新しい規則"からWindows Firewallのルールを追加します。
-
規則の種類
基本的に"ポート"を選択します。
"プログラム"を選択して、Minecraftサーバに使用するjava.exeを指定する方法もあります。 -
プロトコルおよびポート
Minecraftは"TCP"を使用します。
ポートは必ず"特定のローカルポート"で25565
(server.propertiesのserver-port)にして下さい。
-
操作
通常の外部からの接続を許可するには、一番上の"接続を許可する"を選択する必要があります。
-
プロファイル
自宅に据え置きのデスクトップであれば全てにチェックが入っていても構いません。
様々なネットワークに接続するノートパソコンなどでは、プライベートに限定した方が良いかもしれません。
-
名前
分かりやすい名前を付けておきましょう。
受信の規則の一覧に存在すれば成功です。
PowerShell Cmdletで同等の設定を行うには、以下のようにします。
New-NetFirewallRule -DisplayName "Allow Inbound Minecraft Server" -Direction Inbound -LocalPort 25565 -Protocol TCP -RemoteAddress Any -Action Allow
ポート開放 見出しにジャンプ
ルータによってはポートマッピング(NEC)、ポート変換(Buffalo)、静的IPマスカレード(YAMAHA)などと呼ばれます。
グローバルIPアドレスの特定のポートをプライベートIPアドレスの特定のポートに繋げる設定をすることで、外部から自分のPC上で実行されているMinecraftサーバにアクセスできるようになります。
Windows Firewallの設定と併せて設定することで、LANの外側に居る友人とマルチプレイができるようになります。
この設定は各機器によって異なるので、"ルータの型番+ポート開放"で検索して下さい。
ポート開放の設定方法/アドレス変換の設定方法 | バッファロー
ポートマッピング(ポートの開放)の設定を行いたい | Aterm Q&A
YAMAHA RTX830 をSSHで設定する - 俺の外付けHDD #ポート開放
サーバアドレス 見出しにジャンプ
Minecraftサーバにログインしてみるでさらっと触れましたが、自分が接続する時のアドレスと、家族のとき、友人とではサーバアドレスは異なります。
自分のPCに | サーバアドレス | 調べ方(コマンドプロンプト) |
---|---|---|
自分が接続する | localhost | |
家族が接続する(LAN内) | 192.168.XXX.X(ローカルIPアドレス) | ipconfig /all |
友人が接続する(LAN外) | XXX.XXX.XX.XXX(グローバルIPアドレス) | curl ipinfo.io |
コマンドプロンプトでcurlが無い!と怒られるほどWindows 10のバージョンが古いなら、アップデートなりクリーンインストールするなりで最新のWindowsにしましょう(基本的には、ね)
起動バッチ 見出しにジャンプ
起動バッチといっても、ダブルクリックでMinecraftサーバを立ち上げられるようにするだけなら、この2行でできます。
java -server -jar server.jar nogui
pause
JVM引数については、第3回 JVMの引数で詳しく触れています。
複数のサーバや設定を一括で管理したり、コマンドだけでサーバの停止まで行ったり、Discordに通知したりするには第3回 Discordへ通知できるMinecraftサーバ管理スクリプト msl.ps1を参照して下さい。
Minecraftサーバのバックアップ 見出しにジャンプ
Windowsで簡単にバックアップするならRobocopyが早いが、より安全に、効率的に大量(例えば1年分)のバックアップをとるにはWSLのrsyncを利用したほうがよい。
Windows標準のRobocopyをバッチで書ける範囲で書いた簡易的なバックアップバッチ
https://nyanshiba.hatenablog.com/entry/2018/03/22/232116
WSLのrsyncを使った高機能なバックアップスクリプト
https://nyanshiba.com/blog/wsl-rsync-auto-backup