September 30

Оптимизация сервера Minecraft (Высокие версии 1.16.х - 1.20.х)

Данная статья актуальна для серверов на новых версиях.
Все изменения конфигов следует производить осмысленно и специально для каждого сервера.
Если Вы не испытываете проблем с производительностью - не трогайте стандартные конфиги.
Вы просто сломаете ванильный игровой процесс и не получите ничего взамен. Пожалуйста, читайте описание под каждую настройку и не меняйте ничего вслепую.

Важные моменты


Не используйте слитый софт:
Мало кто будет выкладывать платные плагины бесплатно без подвоха.
Нет денег на платные плагины - делайте сервер с бесплатными.
Их множество в открытом доступе и Вы точно найдете что-то для себя.

Правильно выбирайте версию:
Чем выше версия для обычного выживания - тем лучше.
Не смотрите на популярные проекты с версиями 1.12.2 и 1.16.5.
Их онлайн держится на старых игроках с донатом, ботах и тех, кто пойдет куда угодно играть из-за рекламы в тик-токе. К тому же, на старых версиях
существуют критические уязвимости, которые отсутствуют на новых версиях.

Не используйте дата-паки с функциями:
Большинство дата-паков непригодны для сервера. Авторы делают
их прежде всего для одиночной игры, где Ваш процессор выполняет
функции датапака только для Вас. На большинство популярных дата-паков
давно существуют аналоги в виде более оптимизированных плагинов.

Делайте резервное копирование данных (бэкапы):
Никто не знает, что с Вашим проектом может случиться завтра.
Поэтому, крайне желательно делать ежедневные бэкапы в облако.

Прогрузка карты


Генерация чанков - достаточно неприятный процесс для сервера, особенно на 1.16+.
Чтобы избежать лагов при генерации чанков игроками, крайне рекомендуется их прогрузить.

Скачайте плагин Chunky

Теперь пишем команды:
/chunky radius кол-во_блоков_в_каждую_сторону
Например, /chunky radius 5000. Так у нас получится карта на 10к на 10к блоков.

/chunky world мир_который_нужно_прогрузить
Например, /chunky world world. Так мы выделим Верхний мир для прогрузки.
Желательно прогружать дополнительные миры (Нижний, Край).

Также установим ванильный барьер:
Заходим в игру, телепортируемся в нужный мир и пишем команду:
/worldborder set умножаем_число_из_первой_команды_на_два
Например, в команде /chunky radius мы указали 5000. Значит тут указываем 10000.

И, наконец, начинаем прогрузку карты командой:
/chunky start

Данный процесс займет некоторое время и некоторые гигабайты в Вашем хранилище.
На нормальном хостинге и при небольшом онлайне - лагов быть не должно.

Смотрим конфиги

server.properties

network-compression-threshold: 128/256/512
Наименьшее значение означает большее сжатие трафика и увеличение нагрузки на процессор,
но положительно сказывается на игроках с плохим интернетом.
Ставьте наибольшее значение, если у Вас ограниченный месячный трафик.

enforce-secure-profile=false
Выключает новомодную (1.19.1) проверку сообщений в чате.

entity-broadcast-range-percentage=75/100
Определяет насколько близко игрок должен быть к сущностям, чтобы
сервер отправил их ему на рендер. Ставьте наименьшее значение, если Ваш
сервер сильно нагружен уникальными сущностями (например, на стойках для брони).

max-tick-time=-1
Указывает время (в тиках) через которое сервер будет автоматически выключен
при сильном залаге. Частично заменяется WatchDog'ом из Paper,
поэтому может быть выключено.

use-native-transport=true
Включает оптимизированную отправку пакетов.
Ставьте true только если сервер стоит на Linux.
При создании модового сервера - лучше оставить false.

view-distance: 2-4
Некий официальный аналог no-tick чанков из Paper который появился в официальном ядре недавно.
Данная настройка сильно влияет на игровой процесс!

simulation-distance: 4-6
Чанки рядом с игроком, в которых будет происходить жизнь. Слишком маленькие значения ломают фермы.
Данная настройка сильно влияет на игровой процесс!

idle-timeout: 10-20
Устанавливает время, после которого бездействующий игрок будет считаться сервером в AFK.
На Minecraft Wiki указано, что данное значение исчисляется в минутах.

allow-flight: true
Плохой пример реализации "античита", встроенный в ядро. Установите отдельный плагин на античит.

snooper-enabled: false
Выключает отправку некоторых данных в Mojang.
Нельзя выключить в новых версиях.

sync-chunk-writes=false
Выключает синхронную (однопоточную) генерацию чанков.
Автоматически выключено в Paper и его форках, имеет смысл изменять значение только если у Вас сервер на Fabric.

bukkit.yml

query-plugins: false
Выключает возможность узнать плагины сервера через сторонние ресурсы.

spawn-limits:
monsters: 20 #Враждебные мобы.
animals: 8 #Мирные мобы.
water-animals: 3 #Водные существа (спруты, etc)
water-ambient: 1 #Мелкие рыбы
axolotls: 3 #Аксолотли
water-underground-creature: 3 #Подземные спруты
ambient: 1 #Летучая мышь
Означает лимит спавна определенной группы сущностей.
Данная настройка сильно влияет на игровой процесс!

period-in-ticks: 300
Время, через которое сервер выгрузит неактивный чанк из памяти. В тиках.

ticks-per:
animal-spawns: 400/420
monster-spawn: 10/12
water-spawns: 600/800
axolotl-spawns: 400/600
water-ambient-ambient: 600/800
water-underground-creature-spawns: 400/600
ambient-spawns: 1800/2200
Время, через которое сервер будет спавнить указанную группу сущностей. В тиках.
Если Вам нужен более ванильный геймплей - ставьте первые числа,
если нужно больше производительности - вторые.

autosave: 6000/16000
Автоматическое сохранение данных сервера. В тиках.
Если сервер работает нестабильно и постоянно падает - не трогайте.

paper-global.yml

timings:
enabled: false
verbose: false

Выключает автоматический сбор таймингов после старта сервера.
В новых версиях форка Purpur тайминги удалены.

use-rgb-for-named-text-colors: false
Позволяет отображать цветную консоль сервера.

max-joins-per-tick: 1
Ограничивает максимальное количество возможных заходов игроков до одного в один тик.

fix-entity-position-desync: true
Исправляет баг синхронизации лежащего предмета у игрока и сервера.

use-dimension-type-for-custom-spawners: trueuse-alternative-luck-formula: true

paper-world-defaults.yml

despawn-ranges:
      ambient:
        hard: 56
        soft: 30
      axolotls:
        hard: 56
        soft: 30
      creature:
        hard: 56
        soft: 30
      misc:
        hard: 56
        soft: 30
      monster:
        hard: 56
        soft: 30
      underground_water_creature:
        hard: 56
        soft: 30
      water_ambient:
        hard: 56
        soft: 30
      water_creature:
        hard: 56
        soft: 30
        

parrots-are-unaffected-by-player-movement: true
Попугаи не будут сбрасываться с плеча игрока слишком часто.

item-frame-cursor-limit: 64
Лимит отметок на карте.

delay-chunk-unloads-by: 7s

zombies-target-turtle-eggs: false
Зомби не будут агрессировать на яйца черепах.
Убивает все фермы, построенные на этом принципе.
Данная настройка сильно влияет на игровой процесс!

item-frame-cursor-update-interval: 20
Отображение игрока на карте будет обновляться реже.

disable-end-credits: true
Выключает показ титров игроку при первом прыжке в портал Края, ведущий в Верхний мир.

fix-items-merging-through-walls: true
Исправляет возможность предметам стакаться через стены.

keep-spawn-loaded: false
Выключаем постоянную прогрузку чанков спавна.

max-entity-collisions: 2
Именно столько сущностей сможет толкаться если они слишком близко.
Негативно влияет на плагины, связанные с стойками для брони

max-auto-save-chunks-per-tick: 8
Определяет сколько чанков в тик максимум сервер сможет сохранять.
Чем больше онлайна - тем больше должно быть значение. Проблема тут в том, что указанное в статье значение в 8 чанков подойдет для сервера в 40-50 человек МАКСИМУМ (при условии низкой прорисовки, в 5-6 чанков). Далее могут возникнуть проблемы и фризы, т.к. те чанки, которые ядро не успевает сохранить за период auto-save-interval оно сохраняет сразу в 1 момент.

mob-spawner: 4-8
Время в тиках, раз в которое спавнер будет спавнить сущностей.

disable-chest-cat-detection: true
Выключает котам возможность искать сундуки. Оптимизация!

disable-relative-projectile-velocity: true

redstone-implementation: ALTERNATE_CURRENT
Позволяет серверу использовать альтернативную систему редстоуна
(практически нет разницы с ванильной в механиках).

prevent-moving-into-unloaded-chunks: true
Запрещает игроку быстро грузить непрогруженные чанки,
телепортируя его назад, пока чанк не будет создан.

update-pathfinding-on-block-update: false

armor-stands:
do-collision-entity-lookups: false
tick: false
Выключает бессмысленный тик стоек для брони. Если у Вас есть плагины на уникальных сущностей (ModelEngine, ItemsAdder, Oraxen) - не изменяйте значение на фальш.

optimize-explosions: true

markers:
tick: false

hopper:
cooldown-when-full: true
disable-move-event: true
ignore-occluding-blocks: true
Весомые патчи для оптимизации одного из самых жрущих - воронок.
Естественно влияет на ванильность, но дает нехилый прирост производительности.
Может негативно влиять на другие плагины, но это уже проблема разработчика плагина.

non-player-arrow-despawn-rate: 5
creative-arrow-despawn-rate: 5
Влияет на скорость удаления стрел игроков в креативе и мобов. В тиках.

treasure-maps:
find-already-discovered:loot-tables: true
villager-trade: true
По-сути - полностью отключает карты клада на сервере. Ибо они способны даже положить сервер на последних версиях и никто это исправлять естественно не собирается.

grass-spread: 2-8
Определяет раз во сколько тиков трава на блоках будет расти на следующий блок.

nether-ceiling-void-damage-height: 127
Запрещает игрокам вылезать на крышу Нижнего мира.
Данная настройка сильно влияет на игровой процесс!

container-update-tick-rate: 3
Не рекомендую изменять данное значение при маленьком онлайне (до 30).
Может вызывать баги у игроков с фантомными предметами в инвентаре.

tick-rates:

  behavior:
    villager:
      validatenearbypoi: 60
      acquirepoi: 120
  sensor:
    villager:
      secondarypoisensor: 80
      nearestbedsensor: 80
      villagerbabiessensor: 40
      playersensor: 40
      nearestlivingentitysensor: 40

spigot.yml

mob-spawn-range: 3-4
Радиус в чанках от игрока, где будут спавнится мобы.
Данная настройка сильно влияет на игровой процесс!

hanging-tick-frequency: 250
Увеличивает время для проверки декоративных сущностей (стойки/рамки/картины и т.д.).
Может вызывать мелкие визуальные баги у игроков.

restart-on-crash: false
Выключает попытки сервера авто-перезапуститься при краше.

save-user-cache-on-stop-only: true

merge-radius:
item: 4.5 exp: 8.75
Радиусы в блоках, в которых одинаковые предметы/опыт будут соединяться в одну кучу.

netty-threads: 4 / 6
Определяет, сколько потоков процессора сервер будет использовать для обработки трафика.
Указывайте число, которое получится если разделить на четыре все доступные Вам ядра процессора.

arrow-despawn-rate: 300
Время до удаления стрелы, выпущенной игроком. В тиках.
trident-despawn-rate: 600
Время до удаления трезубца, кинутый игроком. В тиках.

hopper-amount: 3-9
hopper-transfer: 8-24
hopper-check: 8-24
По-сути, это полная настройка воронок на сервере.
Нужное значение зависит от количества игроков и воронок на сервере.
Данная настройка сильно влияет на игровой процесс!

nerf-spawner-mobs: true
Полностью убирает AI у мобов со спавнера.
Полезно для больших серверов, где много ферм на спавнерах.
Данная настройка сильно влияет на игровой процесс!

log-villager-deaths: false
Выключает бессмысленное логирование смертей жителей.
log-named-deaths: false
Выключает бессмысленное логирование названных сущностей (под биркой).

max-tnt-per-tick: 10-50
Ограничивает максимальное количество взрывов динамита на тик.
Устанавливайте нужное Вам число в зависимости от типа сервера.

max-tick-time:
tile: 8
entity: 16

purpur.yml

use-alternate-keepalive: true
Позитивно влияет на игроков с плохим интернетом, оттягивая время их кика из-за плохого подключения.
Несовместимо с TCPShield.

dont-send-useless-entity-packets: true

disable-mushroom-updates: true
disable-note-block-updates: truedisable-chorus-plant-updates: true
Выключает обновление нотных блоков, грибов и хорусов.
Лучше не трогать, если сервер больше склонен к ванильной игре, но рекомендуется
к отключению разработчиком LoneDev при использовании ItemsAdder.

max-joins-per-second: truebreeding-delay-ticks: 12000
Увеличивает в два раза ванильный откат размножения животных.
Настраивается отдельно для каждой сущности которую можно кормить.

fix-projectile-looting-transfer: true

система "заставляет" снаряд перенимать уровень зачарования "Грабеж" с оружия игрока, который его выпустил. Это приводит к корректному увеличению дропа.

disable-give-dropping: true
Команда /give не будет выбрасывать предметы из переполненного инвентаря.

fix-stuck-in-portal: true
Не позволяет игроку застрять в портале-ловушке, через время телепортируя его обратно.

disable-drops-on-cramming-death: true
Выключает падение предметов из сущностей при смерти от удушения.
Будет полезно, если игроки строят слишком много ферм, работающих таким образом.
Данная настройка сильно влияет на игровой процесс!

teleport-if-outside-border: true
Телепортирует игрока на нулевые координаты, если он как-то оказался за барьером.
На новых версиях - делает это криво, но игроку лазать за барьером не дает.

arrow:movement-resets-despawn-counter: false
При любом движении уже приземлившейся стрелы её таймер
на исчезновение не будет обновляться.

invulnerable-while-accepting-resource-pack: true
Игрок будет бессмертен пока устанавливает серверный ресурспак.

sleep-ignore-nearby-mobs: true
Игроки смогут лечь на кровать даже рядом с агрессивными мобами.

entities-can-use-portals: false
Данная настройка запретит сущностям использовать порталы.
Т.о. игроки не смогут сделать загрузчик чанков.
Не рекомендую, если игрокам нужно катать мобов по мирам.

  logger:
    suppress-init-legacy-material-errors: true
    suppress-ignored-advancement-warnings: true
    suppress-unrecognized-recipe-errors: true
    suppress-setblock-in-far-chunk-errors: true
    suppress-library-loader: true

Помогает сильно очистить консоль от не несущего смысла текста.

  seed:
    structure:
      buried_treasure: -1 #Случайное число от -2147483648 до 2147483647
      mineshaft: -1 #Случайное число от -2147483648 до 2147483647

Является отличным дополнением к разделу с сидами в spigot.yml.
Позволяет указать уникальные значения для генерации шахт и кладов на пляжах.

      armorstand:
        step-height: 0.0 #высота *прыжка* стойки, может быть полезно для сторонних плагинов (например на машинки)
        set-name-visible-when-placing-with-custom-name: true #имя переименнованой стойки будет видно при установке
        fix-nametags: true #позволяет переименовывать стойки с помощью бирки
        can-movement-tick: false #запрещает стойкам двигаться
        can-move-in-water: false #запрещает стойкам двигаться по воде
        can-move-in-water-over-fence: false #запрещает стойкам двигаться по воде через заборы
        place-with-arms-visible: true #стойки будут ставиться с видимыми руками (бедроклайк)

По сути, отключает возможность сделать лаг-машины на движущихся стойках для брони.
Читайте комментарии (#).

lagging-threshold: 17.0
Значение TPS, при котором Purpur будет принимать свои меры
для оптимизации, т.к. будет считать сервер лагающим.

observer:
disable-clock: true
Выключает возможность создать цикличный сигнал
редстоуна с помощью двух наблюдателей. Полезно серверу, но не игрокам.

      dolphin:
        disable-treasure-searching: true #Дельфины не будут искать сокровища.
      snow_golem:
        leave-trail-when-ridden: false #Снежные големы не будут оставлять за собой след снега.
        min-shoot-interval-ticks: 300 #Снежные големы будут стрелять раз в 10 секунд, вместо раза в секунду.
        max-shoot-interval-ticks: 300
      squid:
        immune-to-EAR: false

Спрут будет подчиняться параметрам entity_activation_range из spigot.yml.

      spider:
        can-climb-world-border: false

Пауки не смогут лазать по границе мира.

      villager:
        brain-ticks: 32
        use-brain-ticks-only-when-lagging: true #Житель будет активничать только раз в 32 тика при значении ТПС ниже чем в lagging-threshold.
        breeding-delay-ticks: 12000
        allow-trading: true #Если значение false - жители не будут торговать с игроком.
        lobotomize:
          enabled: true
          check-interval: 100
        display-trade-item: false #Отключает отображение предмета для продажи. Оптимизация.
        spawn-iron-golem: #Лимит количественного спавна железных големов на определенный радиус.
          radius: 5
          limit: 5

Настройка жителей. Читайте комментарии (#).

      zombie_villager:
        curing_time:
          min: 1300
          max: 3000
        cure:
          enabled: true #Если значение false - выключает возможность исцелить зомби-жителя.

Настройка скорости исцеления зомби-жителя.
Ради удобства игроков и меньшего держания агрессивного моба в памяти сервера.

      zombie:
        aggressive-towards-villager-when-lagging: false

Зомби не будут агрессировать на жителей при значении ТПС ниже, чем указано в lagging-threshold.

pufferfish.yml

entity_timeouts:
  SNOWBALL: 200
  EGG: 200
  LLAMA_SPIT: 40
  FIREBALL: 100
  DRAGON_FIREBALL: 100

max-loads-per-projectile: 4-6
Указывает, сколько любой снаряд может загрузить чанков за время своего существования.
Полезно, но может вызывать застревающие в чанках трезубцы/стрелы и их подобных.

start-distance: 6-8
Указывает, насколько далеко сущность должна находится от игрока, чтобы DAB начал работать.

max-tick-freq: 35-40
Указывает, раз в сколько тиков будут обновляться самые дальние (настройка выше) от игрока
сущности. Может быть крайне полезно, но очень негативно влияет на различные фермы.

activation-dist-mod: 7
Указывает, насколько расстояние влияет на тик сущностей. 7 - оптимальное значение

Отлично поработали! Теперь ваш сервер летает. Мы настроили ядро, оптимизировали параметры и исправили ключевые моменты. Присоединяйтесь к нашему комьюнити — здесь всегда поможем с дальнейшей настройкой. Делитесь успехами и развивайте свой проект вместе с нами! Удачи! 🚀

Полезные ссылки: