Bukkit 層の設定ファイルで、Mob のスポーン数、自動保存、ワールドのジェネレーター指定 など、サーバーの基本的な挙動を決めています。
この記事では各項目の意味と調整のポイントを解説します。
bukkit.yml の位置づけ
サーバーを起動すると生成されるファイルで、サーバーの設定を行えるファイルはいくつか存在します。
今回の bukkit.yml はMinecraftサーバーの中でもスポーンやワールド生成などの部分の設定を行なうことができます。
- server.properties バニラ由来の基本設定(ポート、難易度、視野距離など)
- bukkit.yml Bukkit 層の設定(スポーン上限、自動保存、ワールド生成)
- spigot.yml Spigot 独自の最適化・ゲームプレイ調整
settings:サーバー基本設定
settings:
allow-end: true
warn-on-overload: true
permissions-file: permissions.yml
update-folder: update
plugin-profiling: false
connection-throttle: 4000
query-plugins: true
deprecated-verbose: default
shutdown-message: Server closed
minimum-api: none
use-map-color-cache: true
- allow-end:エンドの有効化。false にするとエンドポータルが機能しません。ネザーは server.propertiesの allow-netherで制御します。
- warn-on-overload:サーバーが処理落ちしたとき「Can't keep up!」をコンソールに出すか。false にするとログは静かになりますが、負荷の兆候に気づきにくくなります。
- update-folder:plugins/update/ に新しい jar を置いておくと、再起動時に自動で差し替えてくれる便利機能です。
- connection-throttle:同一 IP からの再接続を制限する間隔(ミリ秒)。4000 なら 4 秒以内の再接続を拒否します。ローカルテストや BungeeCord 配下では -1にして無効化することが多いです。
- query-plugins:サーバーリスト等の Query で導入プラグイン一覧を公開するか。セキュリティ的に false 推奨です。
- shutdown-message:停止時にプレイヤーへ表示されるメッセージ。日本語化しておくと親切です。
- use-map-color-cache:地図の色計算をキャッシュして高速化。基本 true のままで。
spawn-limits:Mob のスポーン上限
spawn-limits:
monsters: 70
animals: 10
water-animals: 5
water-ambient: 20
water-underground-creature: 5
axolotls: 5
ambient: 15
プレイヤー周辺のチャンク単位で自然スポーンできる Mob の上限 です。
これはサーバー全体の上限ではなく、「プレイヤーがロードしているチャンク数」に比例して計算されます。
TPS が落ちているときは monstersを 50 前後まで下げるのが定番の対策です。逆にモンスタートラップ重視のサーバーでは上げる余地がありますが、負荷が跳ね上がるので慎重に。ambient はコウモリで、洞窟の負荷源になりがちなので減らしても支障はほぼありません。
ticks-per:スポーン頻度と自動保存
ticks-per:
animal-spawns: 400
monster-spawns: 1
water-spawns: 1
water-ambient-spawns: 1
water-underground-creature-spawns: 1
axolotl-spawns: 1
ambient-spawns: 1
autosave: 6000
各 Mob カテゴリのスポーン判定を 何 tick ごとに行うか を決めます。
- monster-spawns: 1 は毎 tick 判定という意味で、ここを 2〜5 にするだけでスポーン処理の負荷が大きく下がります。ゲームプレイへの影響は小さいため、軽量化の第一候補です。
- autosave: 6000 は自動保存の間隔で、6000 tick = 5 分。短くするとデータ損失リスクは減りますが、保存時のラグが増えます。大規模サーバーでは 12000(10 分)程度に伸ばすこともあります。0で無効化できますが、絶対におすすめしません。
chunk-gc:チャンクのガベージコレクション
chunk-gc:
period-in-ticks: 600
使われていないチャンクをメモリから解放する間隔(600 tick = 30 秒)。基本はデフォルトのままで問題ありません。
この項目は広いワールドにプレイヤーが散らばっている場合、プレイヤーの周囲のチャンクはメモリ上にロードされますが、プレイヤーが移動してみる必要が無くなったチャンクをどれくらいの時間でメモリから捨てるかを決めます。
かつて、この設定を変更したことがありますが、実感するほどの改善は見えませんでした。これが効果的かどうかは、プレイヤーの動き次第みたいなところがあります。
はやくメモリを解放すれば、メモリには空きができるでしょうが、プレイヤーが動き回るとメモリに再度載せる動きをします。これはある意味ディスクのIOやCPU処理を使います。これにより、体感するほど改善されないという話になってきます。
一番効果的なシチュエーションは、プレイヤーがある場所からある場所に走っていて、もう戻ることが無いようなときです。
極端に言えば、一直線のレースゲームでスタート地点から全員がスタートすれば、数秒後にはスタート地点は使わなくなるので素早く開放できるといったところでしょう。
現実には、あまりそういう状況にはなりません。
aliases:コマンドエイリアス
aliases: now-in-commands.yml
以前はここでエイリアスを定義していましたが、現在は commands.yml に移動しています。この行は「移動しましたよ」というメモに過ぎません。
worlds:ワールドごとのジェネレーター指定
worlds:
world_flat:
generator: SomePlugin
lobby:
generator: VoidGenデフォルトではこのセクションは空(または存在しません)。Multiverse などでカスタムジェネレーターを使うワールドを、サーバー起動時から正しく読み込ませたいときに記述します。ジェネレーター指定を忘れると、ロビー用の Void ワールドが通常地形で上書き生成される 事故が起きるので、複数ワールド運用では必須の確認項目です。
まとめ:まず見直すべき項目
- ticks-per.monster-spawns:1 → 2〜5で手軽に軽量化
- spawn-limits.monsters:TPS が低ければ 50 前後まで下げる
- connection-throttle:プロキシ配下やテスト環境では -1
- query-plugins:セキュリティ的に false 推奨
- worlds:カスタムジェネレーターのワールドは必ず登録
bukkit.yml の変更はサーバー再起動後に反映されます(/reload は非推奨)。spigot.yml と合わせて調整すれば、体感できるレベルで TPS が改善するはずです。