Minecraftサーバーを動かす知識

Minecraftサーバーの設定

投稿:  更新:  By: HimaJyun

ここでは、バニラサーバーの設定について解説します。

Bukkitに関する設定(bukkit.ymlなど)に関してはBukkitサーバーの設定のページをご覧ください。

スポンサーリンク

生成されるファイル

バニラサーバーでは以下のファイルが生成されます。

  • banned-ips.json
    BANしたIPの設定です、通常はコマンドから操作します。
  • banned-players.json
    BANしたプレイヤーの設定です、通常はコマンドから操作します。
  • eula.txt
    EULAです、同意しないと先には進めません。
  • ops.json
    OPユーザーの設定です、通常はコマンドから操作します。
  • server.properties
    サーバーの設定です、設定を変更するにはこれを編集します。
  • usercache.json
    ユーザーの情報をキャッシュするファイルです、普通は触らなくて構いません。
  • whitelist.json
    ホワイトリストの設定です、通常はコマンドから操作します。

EULA

eula.txtにはMinecraftサーバーを動かす際に同意する必要のあるライセンス条項の設定を行います。

Minecraftエンドユーザーライセンス条項を確認して、同意できる場合はeula=falseeula=trueに変更します。

当然ながらに、同意(eula=trueに変更)しないと起動しません。

サーバーアイコンの設定

server.propertiesなどと同じ場所にserver-icon.pngというファイル名のpng画像を配置すると、それがサーバーのリストに表示されます。

ファイル形式はpng、大きさは64x64ピクセル、透過が使用可能です。

自分のサーバーを分かりやすく、見分けやすくするためにぜひとも設定しておきましょう!

server.propertiesの設定

server.propertiesはサーバーの設定になります。テキストファイルなのでメモ帳(notepad.exe)などで開いて構いません。

デフォルトでは存在しない設定値も一部あります。

設定デフォルト説明
allow-flightfalseMODやプラグインを使用した飛行を許可するか?
trueにすれば飛行が許可され、falseにすると飛行が禁止(5秒以上空中にいるプレイヤーがキック)されます
allow-nethertrueネザーへの移動を許可するか?
trueにすればネザーポータルが動作し、falseにすると動作しなくなります
broadcast-console-to-opstrueコンソールやコマンドブロックからのコマンド実行の結果をOPに表示するか?
difficulty1サーバーの難易度
  • 0: ピースフル
  • 1: イージー
  • 2: ノーマル
  • 3: ハード
enable-command-blockfalseコマンドブロックを有効にするか?
enable-queryfalse通常より詳細なサーバーの情報を取得できるようにするか?
enable-rconfalseリモートからコマンドなどを実行するrconを使用するか?
enforce-whitelistfalseホワイトリストを強制するか?
trueでホワイトリストが有効の場合、リロード時にホワイトリストに存在しないユーザーはキックされます
force-gamemodefalseデフォルトのゲームモードを強制するか?
trueならログイン時にデフォルトのゲームモードに変更されます
gamemode0ゲームモードの設定
  • 0: サバイバル
  • 1: クリエイティブ
  • 2: アドベンチャー
  • 3: スペクテイター
generate-structurestrue村などの構造物を生成するか?
falseでもダンジョンは生成されます
generator-settingsなしワールドをカスタムするための設定
hardcorefalseハードコアを有効にするか?
有効にすると死亡したユーザーはBANされます
level-nameworldワールド名とそのデータを保存するディレクトリ名の設定
level-seedなし新しくワールドを生成する場合に使用するSeed値
level-typeDEFAULT生成されるマップの種類
  • DEFAULT: 普通の世界
  • FLAT: スーパーフラット、generator-settingsで細かく設定できる
  • LARGEBIOMES: 大きなバイオーム
  • AMPLIFIED: アンプリファイド
  • BUFFET: ビュッフェ
max-build-height256ブロックを設置できる最大高度
max-players20最大プレイヤー数
max-tick-time600001チックにこれ以上の時間がかかるとサーバーが動作を停止したと判断しシャットダウンする
-1なら無効、単位はミリ秒
max-world-size29999984世界の最大サイズを半径で設定します
motdA Minecraft Serverサーバーリストに表示されるメッセージ
改行(\nで指定)、色コード、一部の記号や特殊文字、日本語が使えます
記号、特殊文字、日本語はUnicodeエスケープシーケンスに変換する必要があります
network-compression-threshold256パケットのサイズが設定した値以上なら圧縮され、設定した値未満ならそのまま送信します
-1なら圧縮を無効に、0ならすべて圧縮します
数値が小さいほど圧縮率が上がりますが、実際には圧縮のオーバーヘッドがあるので小さすぎると効果が薄れます
online-modetrue公式の認証サーバーに接続してユーザーを認証するか?
BungeeCordを利用する場合など、ごく一部の状況以外ではfalseにしないこと
op-permission-level4OPのデフォルト権限レベル、ops.jsonで個別に設定できる
  • 1: spawn-protectionの保護を無視できる
  • 2: シングルプレイのチートコマンドを使用できる
  • 3: /stop、/save関係、/reloadなどの一部コマンドを除くマルチコマンドが使用できる
  • 4: すべてのコマンドが使用できる
player-idle-timeout0指定した時間操作していないプレイヤーをキックする。0なら無効(単位: 分)
prevent-proxy-connectionsfalseVPNやプロキシを使用しているユーザーの接続を拒否する機能です
サーバーに送信された情報がMojangの認証サーバーと一致しない場合プレイヤーがキックされます
pvptruePvP(プレイヤー同士の攻撃)を許可するか?
falseにしても相手の足元に溶岩や炎などを置いたりする攻撃は防げません
query.port25565サーバー情報を取得する際に使用するポート(UDP)
rcon.passwordなしrconのパスワード
rcon.port25575rconのポート
resource-packなしリソースパックのURLを指定します。:や=は\でエスケープする必要があります。
例: https\://example.com/resource.zip?abc=def
resource-pack-sha1なしリソースパックのSHA-1ハッシュ、必須ではない
server-ipなしサーバーが複数のIPアドレスを持っている場合などに指定するバインドIP。空白が推奨されている
server-port25565サーバーのポート
snooper-enabledtrueスヌーピングデーターを公式サーバーに定期的に送信するか?
spawn-animalstrue動物がスポーンするか?
spawn-monsterstrue敵性MOBスポーンするか?
spawn-npcstrue村人がスポーンするか?
spawn-protection16スポーン地点を中心に保護する範囲を半径で設定しますサーバーにOPが設定されていない場合無効になります
use-native-transporttrueLinuxサーバーを使用する際にパケットの送受信を最適化する機能を使用するか
view-distance10サーバーが送信するワールドデータの量(表示距離)を半径で設定
white-listfalseホワイトリストを使用するか?

JVM引数の設定

JVM引数(いわゆるメモリ割り当て)ですが、ほとんどデフォルトで大丈夫です。

「○○ってオプションが効果あるよ」みたいな記事が多いですが、それらのオプションはほぼ大抵がデフォルトで有効になってます。ほとんど眉唾です。

意味も分からずコピペでガチャガチャと弄り倒すくらいなら触らない方がマシです。

そのため、ここでは必要最低限のオプションだけを解説します。

-server

サーバーVMを使用します。

最近は-serverがデフォルトだったりするので指定する意味は薄いのですが、明示しておきます。

-Xms, -Xmx

メモリの割り当てです。

必要以上に割り当てるとOSがディスクキャッシュとして利用できるメモリが減ってしまうので、多ければ良いという訳でもありません。

一方で-Xms-Xmxを同じ値に設定した方がメモリ不足時の領域拡張のコストがなくなるので良いという情報もあります。

他のソフトウェア(データベースなど)が必要とする分を考慮したうえで、不足がないように設定しましょう。

-XX:MetaspaceSize

良く分からないなら触らなくて構いません。クラスローダーがどうのこうのと説明されてわかる人だけが触ればいい。

ちなみに、-XX:MetaspaceSizeはMetaspace不足時のFullGCを調整する設定であって、Metaspaceの初期値指定ではないです。

Metaspaceの初期値指定は-XX:InitialBootClassLoaderMetaspaceSizeです。

-XX:+UseG1GC

G1GCという比較的新しいGCを使用します。

今時のJVMであれば大抵はデフォルトでG1GCですが、GCに関しては念のために明示しておきます。

-XX:MaxGCPauseMillis

G1GCの停止時間目標と呼ばれる設定です。

GCの際の停止時間が指定した時間より短くなるように調整します。デフォルトは200ms(4チック)です。

あまり値が小さすぎるとオブジェクトを回収しきれずにFullGCが発生してしまいますし、かといって大きすぎると普段のGCでTPSが低下してしまいます。

-XX:+DisableExplicitGC

プログラム側からのGCの呼び出しを無効化します。

指定しておきましょう、プログラムからGCを呼び出したって意味がないです。

JVMに任せたので構いません。

-XX:+UseStringDeduplication

文字列の重複を検出してひとまとめにする設定です。

メモリを少し節約する効果があるようですが、その分CPUの負荷が少し上がるようです。

メモリに余裕のある環境なら設定する必要はないでしょう。

最終的な設定値

オンラインユーザー数や使用しているプラグイン、同居しているサーバーの状況など、必要なメモリ量を左右する条件は多岐にわたります。

「こう設定すればOK」というようなおまじない的設定はありませんが、参考までに実際に設定している引数を紹介しておきます。

java -server -Xms8G -Xmx8G -XX:+UseG1GC -XX:+DisableExplicitGC -jar ./server.jar

実際に自分のサーバーでGCログなどを取りながら最適な設定値を探ると良いでしょう。