MinecraftサバイバルサーバーでPaperMCの最適化設定

2021年8月20日

Minecraftサーバーの負荷軽減やサバイバル用の設定についてです
PaperもしくはPaperをForkしたサーバー(Airplaneなど)を導入していることが前提の記事です

前提

設定をする上で最低限知っておかないといけない前提知識

サーバーの名前設定ファイルFork元
公式サーバーserver.properties無し
CraftBukkitbukkit.yml
commands.yml
permissions.yml
help.yml
公式サーバー
Spigotspigot.ymlBukkit
Paperpaper.ymlSpigot
Airplaneairplane.airPaper

※ここでCraftBukkitの設定ファイルと書かれているものはBukkitの設定ファイルも含む
※Forkとは派生や改造といった意味

ForkしているのでFork元のサーバーの設定ファイルも存在します Paperのサーバーであればserver.properties bukkit.yml commands.yml permissions.yml help.yml spigot.yml paper.yml の7ファイルが設定ファイルです

このサイトでは主にpaper.ymlの最適化設定を紹介します
ですが最初に(server.properties)と書いていたらそれはserver.propertiesの設定ファイルです

起動引数

aikarを使用してGCを最適化します

java -Xms8G -Xmx8G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -XX:G1NewSizePercent=40 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=15 -XX:InitiatingHeapOccupancyPercent=20 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper.jar nogui

Xms Xmx -jarをあなたのサーバーにあったものに変えて使ってください

1.19以降について

1.19からpaperのconfigの構成が大きく変わりワールドごとにファイルを分ける形となりました
従来のバージョンのconfigからは自動変換されます

読み込みチャンク(1.18未満)

読み込みチャンクを減らすことで大幅に負荷を軽減します 送信チャンク数は変わらないのでプレイにはあまり影響しません
ここでは、例として送信チャンク数をプレイヤーの周りの半径10チャンク、時間が動くチャンク数をプレイヤーの周りの半径4チャンクに設定します
読み込みチャンクを指定します デフォルトは10です

(server.properties)
view-distance=4

送信チャンク数を指定します デフォルトは-1(無効)です

viewdistances:
  no-tick-view-distance: 10

読み込みチャンク(1.18以上)

読み込みチャンク数と送信チャンク数を分けてサーバーを軽量化させるという設定は1.18から公式サーバーに追加されたためPaperなどからは削除されました
ここでは、例として送信チャンク数をプレイヤーの周りの半径10チャンク、時間が動くチャンク数をプレイヤーの周りの半径4チャンクに設定します

(server.properties)
view-distance=10
simulation-distance=4

スポーンチャンク

スポーンチャンクを変更します
keep-spawn-loadedをfalseにするとスポーンチャンクがなくなります
keep-spawn-loaded-rangeを変更することでスポーンチャンクの大きさを任意の値に変更することが出来ます デフォルトは10です
ここでは、例としてスポーンチャンクを無くしています
ディメンションが多いサーバーにこの設定は非常に有用です

keep-spawn-loaded: false
keep-spawn-loaded-range: 0

Mobスポーン

同じワールドに複数人プレイヤーがいるとMobのスポーンが減ります
MinecraftではワールドごとにMobの上限が定められておりそれを超えるとMobがスポーンしなくなります
以下の設定にすることでMobの上限をワールドごとではなくプレイヤーごとにします
※なおこの機能にはバグがあります プレイヤーのすぐ近くにいきなりMobがスポーンする可能性があります#2614

per-player-mob-spawns: true

Mobのデスポーンを早くします
Minecraftでは32マス以上離れているランダムに選択されたmobと128マス以上の離れているmobはデスポーンします
遠くに居るmobは不要なので64マス以上離れたmobを強制的にデスポーンさせます

despawn-ranges:
  soft: 32
  hard: 64

最新のPaperではMobの種類ごとに分けられてるっぽいです
全部のMobのhardを64に変えても問題ないと思います

despawn-ranges:
  monster:
    soft: 32
    hard: 64

128から64に変えるとプレイヤーの周辺に約4倍の量のmobが湧くことになるのでspawn-limitsを1/4に減らすことをオススメします
デフォルトは-1ですがこれはBukkitの値を使用する設定です

spawn-limits:
  monster: 18
  creature: 3
  ambient: 4
  axolotls: 2
  underground_water_creature: 2
  water_creature: 2
  water_ambient: 5

爆発

爆発を最適化します
爆発の処理が大幅に早くなります

optimize-explosions: true

TNTが水に流されなくなります

prevent-tnt-from-moving-in-water: true

アーマースタンド

アーマースタンドを動かなくします

armor-stands-tick: false

レッドストーン

レッドストーンの処理が大幅に向上しますが通常のMinecraftと違う挙動をする可能性があります

use-faster-eigencraft-redstone: true

Anti-Xray

地面透視チートの対策です 詳細

以下のは1.16向けの設定なのでバージョンによって鉱石を増やしたり減らしたりしてください

anti-xray:
  enabled: true
  engine-mode: 2
  chunk-edge-mode: 2
  max-chunk-section-index: 7
  update-radius: 2
  lava-obscures: false
  use-permission: false
  hidden-blocks:
  - air
  - coal_ore
  - diamond_ore
  - emerald_ore
  - gold_ore
  - iron_ore
  - lapis_ore
  - mossy_cobblestone
  - redstone_ore
  - ancient_debris
  - bone_block
  - glowstone
  - magma_block
  - nether_bricks
  - nether_gold_ore
  - nether_quartz_ore
  - polished_blackstone_bricks
  replacement-blocks:
  - andesite
  - diorite
  - dirt
  - granite
  - gravel
  - oak_planks
  - stone
  - basalt
  - blackstone
  - gravel
  - netherrack
  - soul_sand
  - soul_soil

アイテムをまとめる

Spigotにはドロップしたアイテムや経験値をまとめる設定があります
一括破壊などを導入しているサーバーでは軽くなると思います


(spigot.yml)
merge-radius:
  exp: 7
  item: 7

Spigotでエンドラを倒すと経験値がまとまって降ってくるのでそれを回避させるためにエンドのみ0に設定します
エンドに経験値トラップなどがあると重くなるかもしれません

(spigot.yml)
world_the_end:
  merge-radius:
    exp: 0

おまけ

オウムが肩から落ちなくなります
スニークをすることで解除できます

parrots-are-unaffected-by-player-movement: true

猫がチェストの上に乗っていてもチェストが開けられるようになります

disable-chest-cat-detection: true

通常の2/3の速度で魚が釣れます デフォルトはMinimumTicksが100,MaximumTicksが600です

fishing-time-range:
  MinimumTicks: 60
  MaximumTicks: 400

ウィザーの敵対しないバグの修正 MC-29274

fix-wither-targeting-bug: true