Коротко: сначала измерьте, что съедает тик, — профайлером spark, — и только потом меняйте настройки, по одной за раз. Самые сильные рычаги — simulation-distance и view-distance, entity-activation-range в spigot.yml, лимиты спавна мобов, воронки и реализация редстоуна. Почти каждая такая настройка меняет игру: фермы работают медленнее или ломаются, мобов становится меньше. Если тормозит генерация мира, конфиги не помогут — нужна прогрузка мира.
Сначала измерьте
Без замера оптимизация превращается в угадайку: вы урежете дальность прорисовки, а лагает один плагин. Порядок такой: проверьте MSPT, снимите профиль spark во время лагов и посмотрите, на что уходит время основного потока. Как снять и читать профиль — в статье профайлер spark, что значат TPS и MSPT — в статье TPS и MSPT.
| Команда | Что покажет |
|---|---|
/spark profiler start --timeout 600 | через 10 минут — отчёт: что занимает тик и какой плагин сколько тратит |
/mspt | среднее, минимальное и максимальное время тика за 5, 10 и 60 секунд |
/paper entity list | каких сущностей больше всего: первое число — тикающие, второе — нет |
/paper chunkinfo | сколько чанков загружено и в каком они состоянии |
/paper mobcaps | глобальные лимиты мобов в мире и сколько чанков участвуют в спавне |
Где что настраивается
| Файл | Что там для производительности |
|---|---|
server.properties | view-distance, simulation-distance |
config/paper-world-defaults.yml | сущности, спавн, воронки, редстоун, сохранение чанков — для всех миров |
paper-world.yml в папке мира | переопределения для одного мира: пишите только нужные строки |
config/paper-global.yml | потоки системы чанков, загрузка и отправка чанков игрокам |
spigot.yml | entity-activation-range, merge-radius, тайминги воронок, дальность отслеживания сущностей |
bukkit.yml | лимиты спавна мобов и интервалы попыток спавна, автосохранение |
Где лежат файлы на 1.21.x и 26.x и как работают настройки отдельного мира — в статье ядро Paper. После правки перезапустите сервер — так изменения точно применятся.
Дальность: view-distance и simulation-distance
| Параметр | По умолчанию | Что задаёт |
|---|---|---|
view-distance | 10 (от 3 до 32) | сколько чанков вокруг игрока сервер отправляет клиенту — радиус, не диаметр |
simulation-distance | 10 (от 3 до 32) | в каком радиусе чанков сервер обновляет существ; дальше они не тикают |
world-settings.default.view-distance в spigot.yml | default | своя дальность для мира; default — взять из server.properties |
world-settings.default.simulation-distance в spigot.yml | default | то же для дальности симуляции |
simulation-distance прямо уменьшает работу тика: меньше чанков, где двигаются мобы, растут посевы и работает редстоун. view-distance больше влияет на память и трафик: игрок видит дальше, но далёкие чанки не симулируются. Поэтому их можно разделить: view-distance оставить повыше, чтобы мир не казался маленьким, а simulation-distance снизить.
Цена: фермы и механизмы работают, только пока игрок в пределах simulation-distance. Чем она меньше, тем ближе игроку придётся стоять к своей ферме. Подробнее о самих ключах — в статье server.properties.
Сущности: activation range и слияние предметов
entity-activation-range в spigot.yml — расстояние в блоках от игрока, внутри которого сущности тикают как обычно. Дальше они тикают реже, а время от времени «просыпаются» по настройкам wake-up-inactive. Значение 0 или меньше отключает это для группы.
| Параметр spigot.yml | По умолчанию | Что делает |
|---|---|---|
entity-activation-range.animals / monsters | 32 / 32 | животные и монстры дальше этого тикают реже |
entity-activation-range.raiders | 64 | участники рейдов |
entity-activation-range.villagers | 32 | жители; tick-inactive-villagers: true продолжает их тикать и вне радиуса |
entity-activation-range.misc / water | 16 / 16 | прочее, в том числе предметы, и водные мобы |
merge-radius.item | 0.5 | радиус в блоках, в котором выпавшие предметы сливаются в одну стопку |
merge-radius.exp | -1 | слияние опыта при появлении; 0 и меньше — выключено |
entity-tracking-range.players | 128 | с какого расстояния игроки видны другим; у животных, монстров и прочего — 96 |
world-settings.default. По документации Paper: spigot.ymlЦена: документация предупреждает, что предметы в водных потоках вне радиуса misc могут дёргаться и откатываться назад, — сортировщики на воде страдают первыми. Больший merge-radius сокращает число предметов, но они начинают сливаться сквозь стены; от этого есть fixes.fix-items-merging-through-walls в Paper, но он сам стоит производительности.
| Параметр paper-world-defaults.yml | По умолчанию | Что делает |
|---|---|---|
entities.armor-stands.tick | true | выключите, если стоек брони много: они перестанут тикать |
chunks.entity-per-chunk-save-limit | experience_orb: -1 | лимит сущностей данного типа, которые сохраняются в чанке; -1 — без лимита, тип можно добавить любой |
entities.spawning.despawn-ranges | default | мягкий и жёсткий радиусы деспавна по категориям мобов; default — как в ванилле |
entities.spawning.alt-item-despawn-rate.enabled | false | свои сроки исчезновения для отдельных предметов, например булыжника |
misc.update-pathfinding-on-block-update | true | по документации Paper, выключение заметно разгружает сервер при множестве мобов почти без влияния на механики |
Спавн мобов: bukkit.yml и лимиты Paper
| Параметр bukkit.yml | По умолчанию |
|---|---|
spawn-limits.monsters | 70 |
spawn-limits.animals | 10 |
spawn-limits.water-animals / water-ambient | 5 / 20 |
spawn-limits.water-underground-creature / axolotls | 5 / 5 |
spawn-limits.ambient | 15 |
ticks-per.monster-spawns / animal-spawns | 1 / 400 — тиков между попытками спавна |
В Paper те же лимиты можно задать отдельно для мира — entities.spawning.spawn-limits и ticks-per-spawn в paper-world-defaults.yml или paper-world.yml мира; -1 там означает «взять из bukkit.yml». per-player-mob-spawns: true по умолчанию считает лимит на каждого игрока: мобов примерно столько же, но один игрок не забирает весь лимит. Радиус спавна вокруг игрока задаёт mob-spawn-range в spigot.yml — по умолчанию 8 чанков.
Цена: меньший лимит монстров — пустее ночь и медленнее фермы мобов. Снижайте понемногу и проверяйте /paper mobcaps и /paper playermobcaps.
Редстоун и воронки
| Параметр | По умолчанию | Что делает и чем рискуете |
|---|---|---|
misc.redstone-implementation (Paper) | VANILLA | EIGENCRAFT и ALTERNATE_CURRENT сильно снижают лаги от редстоун-пыли, но меняют её поведение — часть механизмов перестанет работать |
hopper.cooldown-when-full (Paper) | true | полная воронка делает паузу, а не пытается забрать предметы каждый тик |
hopper.disable-move-event (Paper) | false | резко ускоряет воронки, но ломает плагины привата и всё, что слушает это событие |
hopper.ignore-occluding-blocks (Paper) | false | воронки не ищут контейнеры внутри непрозрачных блоков |
ticks-per.hopper-transfer (spigot.yml) | 8 | тиков между перемещениями предметов; больше — легче серверу, но медленнее сортировщики |
ticks-per.hopper-check / hopper-amount (spigot.yml) | 1 / 1 | как часто воронка проверяет, что забрать, и сколько предметов двигает за раз |
Кое-что могут сделать и игроки: по Minecraft Wiki, воронка, накрытая сплошным блоком или компостером, перестаёт искать предметы над собой. А правило против лаг-машин и огромных ферм есть в бесплатном генераторе правил сервера.
Чанки, сохранение и потоки
| Параметр | По умолчанию | Что делает |
|---|---|---|
chunks.max-auto-save-chunks-per-tick (world) | 24 | сколько чанков автосохранение пишет за один тик — сохранение размазывается по тикам |
ticks-per.autosave (bukkit.yml) | 6000 | тиков между полными автосохранениями; chunks.auto-save-interval в Paper переопределяет его для мира |
chunks.delay-chunk-unloads-by (world) | 10s | сколько чанк держится в памяти после ухода игрока |
chunk-system.worker-threads (global) | -1 | потоки генерации чанков: авто — половина физических ядер, на машине с 3 ядрами и меньше — один поток |
chunk-system.io-threads (global) | -1 | потоки чтения и записи чанков; значение меньше нуля — один поток |
Ручное число потоков редко нужно: автоматический выбор уже учитывает ядра. Генерацию новых чанков дешевле убрать совсем — границей и прогрузкой мира заранее, см. прогрузка мира. А если упираетесь в паузы сборщика мусора, это уже не конфиги Paper, а флаги JVM.
Чем рискуете: ванильные механики
Paper и сам по умолчанию отличается от Vanilla: исправляет баги и ограничивает часть механик. Для технических серверов у Paper есть страница Vanilla-like experience — она делает обратное: например, ставит entity-activation-range в 0 и max-entity-collisions без ограничения. Значит, каждая настройка из этой статьи — выбор между производительностью и тем, насколько игра похожа на ванильную. Предупредите игроков, если меняете то, от чего зависят их фермы.
Оптимизация и античит
В spigot.yml есть moved-too-quickly-multiplier (10.0) и moved-wrongly-threshold (0.0625): если клиент сдвинулся слишком быстро или не туда, сервер пишет в консоль и отменяет движение. Это базовая защита ядра, а не античит: Speed, Fly, KillAura и другие читы она не разбирает. DGuard — лучший античит для современного сервера Minecraft — ловит читы в бою, движении, пакетах, инвентаре, постройке и мире и при этом почти не трогает тик: проверки идут в сетевых потоках, на основном потоке это 0,03 % одного ядра. Убедитесь сами: найдите DGuard в профиле spark и сверьте с /dguard perf. Как сравнить нагрузку разных античитов — в статье нагрузка античита.
Частые вопросы
Какие настройки Paper сильнее всего снижают лаги?
Обычно simulation-distance в server.properties, entity-activation-range в spigot.yml, лимиты спавна мобов и настройки воронок. Но начинать нужно с профиля spark: он покажет, что тормозит именно у вас.
Что лучше снизить: view-distance или simulation-distance?
Для тика — simulation-distance: она уменьшает число чанков, где обновляются существа. view-distance больше влияет на память и трафик. Обе по умолчанию равны 10.
Почему после оптимизации перестала работать ферма?
Скорее всего, виноваты entity-activation-range, меньшая simulation-distance, другой redstone-implementation или тайминги воронок. Верните настройки по одной и найдите ту, что сломала механизм.
Что такое EIGENCRAFT и ALTERNATE_CURRENT?
Альтернативные реализации редстоуна в Paper (misc.redstone-implementation). Они снижают лаги от редстоун-пыли, но меняют её поведение, поэтому часть механизмов может перестать работать.
Нужно ли трогать chunk-system.worker-threads?
Обычно нет. При -1 Paper сам берёт половину физических ядер (на машине с 3 ядрами и меньше — один поток). Лаги генерации надёжнее лечить прогрузкой мира.
Источники
- Paper: World configuration
- Paper: Global configuration
- Paper: spigot.yml
- Paper: bukkit.yml
- Paper: server.properties
- Paper: Vanilla-like experience
- Paper: команды (/mspt, /paper entity, /paper mobcaps)
- Minecraft Wiki: тик и причины лагов
- spark: команды
- DGuard — лучший античит для современного сервера Minecraft: сравнение проверок с GrimAC, Vulcan, Polar, Intave и Matrix
- DGuard: установка, требования и решение проблем
- DGuard: поддерживаемые версии Paper и Leaf