Лимит мобов на сервере — первое, что стоит трогать, когда TPS проседает вечером, а профайлер показывает жирный кусок времени в EntityLiving.tick. Мобы плодятся вокруг каждого игрока, каждый тик считают путь до цели, проверяют освещённость и коллизии. На двадцати онлайн это уже несколько тысяч сущностей, и никакие Aikar's flags тут не спасут — нужно резать спавн.
Разберу, где именно эти лимиты живут, что означают цифры и до каких значений их разумно опускать, чтобы сервер не превратился в пустую песочницу.
Как ванилла считает мобов
Механика простая: игра берёт зону вокруг игрока (по умолчанию 128 блоков, ограничена view-distance и simulation-distance), считает существующих мобов нужной категории и, если их меньше кэпа, пытается заспавнить новых в случайных точках загруженных чанков.
Категорий несколько, и путать их не надо:
| Категория | Кто это | Дефолтный кэп |
|---|---|---|
monsters | Зомби, скелеты, криперы, пауки — основной пожиратель тиков | 70 |
animals | Коровы, овцы, свиньи — спавнятся редко, но накапливаются при разведении | 10 |
water-animals | Кальмары и дельфины | 5 |
water-ambient | Рыба, которой в океанах генерируется очень много | 20 |
water-underground-creature | Светящиеся кальмары | 5 |
axolotls | Аксолотли | 5 |
ambient | Летучие мыши | 15 |
Ключевой момент: в чистом Bukkit/Spigot кэп общий на мир (масштабируется по числу загруженных чанков). Один игрок в аду с фермой мобов может выбрать весь monsters-лимит, и на остальных мобы просто перестанут появляться. В Paper это лечится отдельной опцией, о ней ниже.
Лимит мобов на сервере в bukkit.yml
Основные значения лежат в bukkit.yml в корне сервера:
spawn-limits:
monsters: 70
animals: 10
water-animals: 5
water-ambient: 20
water-underground-creature: 5
axolotls: 5
ambient: 15
ticks-per:
animal-spawns: 400
monster-spawns: 1
water-spawns: 1
water-ambient-spawns: 1
water-underground-creature-spawns: 1
ambient-spawns: 1Это дефолты — те же значения приводит справочник PaperMC по bukkit.yml. Для выживалки на 30–50 человек я обычно ставлю так:
spawn-limits:
monsters: 35
animals: 8
water-animals: 5
water-ambient: 3
water-underground-creature: 2
axolotls: 2
ambient: 1
ticks-per:
monster-spawns: 4
animal-spawns: 800
water-ambient-spawns: 200
ambient-spawns: 400Пояснение к ticks-per: это интервал между попытками спавна в тиках. monster-spawns: 1 означает попытку каждый тик, то есть 20 раз в секунду. Подняв до 4, вы уменьшаете нагрузку на алгоритм спавна вчетверо, а игрок разницы почти не заметит — мобы всё равно упрутся в кэп, просто чуть медленнее.
Ambient и water-ambient режьте смело. Летучие мыши и рыба не влияют ни на прогресс, ни на фарм, а в океанских мирах рыба создаёт заметный фон нагрузки.
Больше про остальные секции файла — в разборе bukkit.yml.
Per-player mob spawns в Paper
Если сервер на Paper 1.21 (а он должен быть на Paper — ставится ядро за пять минут), в paper-world-defaults.yml есть опция, которая меняет саму логику:
entities:
spawning:
per-player-mob-spawns: trueС ней кэп применяется к каждому игроку отдельно, а не к миру целиком. Практический эффект: можно опустить monsters до 25–30 и при этом у каждого игрока рядом будет нормальное количество мобов, а суммарное число сущностей на сервере вырастет линейно от онлайна, а не хаотично.
Включено по умолчанию в свежих сборках Paper, но проверить стоит — на старых конфигах, перетащенных с 1.16, значение бывает false.
Дальность деспавна
Второй рычаг — despawn-ranges. Он определяет, на каком расстоянии моб исчезает:
entities:
spawning:
despawn-ranges:
monster:
soft: 28
hard: 96
creature:
soft: 28
hard: 96
ambient:
soft: 16
hard: 32Дефолт — 32 и 128. Soft означает, что дальше этого расстояния моб может исчезнуть случайно; hard — исчезает гарантированно. Снижение hard до 96 убирает мобов, которые висят на границе прогрузки и никому не нужны. Ниже 64 опускать не советую: игроки начнут жаловаться, что скелет, за которым они бежали, растворился в воздухе.
Mob-spawn-range и entity-activation-range
В spigot.yml есть ещё два параметра, которые работают в связке с лимитами:
world-settings:
default:
mob-spawn-range: 6
entity-activation-range:
animals: 16
monsters: 24
raiders: 48
misc: 8mob-spawn-range (в чанках) сужает зону, где вообще пытаются появиться мобы. Дефолт 8, а у entity-activation-range по умолчанию animals и monsters — 32, raiders — 64, misc — 16 (справочник spigot.yml). Значение 6 для mob-spawn-range заметно снижает количество бесполезного спавна за пределами видимости.
entity-activation-range — радиус, за которым сущность перестаёт тикать полноценно. Мобы не исчезают, но перестают искать путь и двигаться. Снижение monsters до 24 экономит много, но осторожно: слишком маленькие значения ломают фермы, где мобы должны падать в воронку. Если на сервере есть техноблок с автофермами, не опускайте monsters ниже 24, а misc ниже 8.
Как понять, что лимиты уже нормальные
Не подбирайте вслепую. Поставьте Spark и посмотрите реальную картину — как читать его отчёты, разобрано отдельно. В консоли:
/spark tps
/spark profiler start --timeout 60Если в отчёте ServerLevel.tickNonPassenger занимает больше 25–30% времени тика, а рядом видно Mob.aiStep — лимиты режем дальше. Если после правок эта доля упала до 10–15%, а TPS держится 19.8+, дальше можно не крутить.
Быстрая проверка количества сущностей без плагинов:
/execute if entity @e[type=minecraft:item]Команда ничего не меняет в мире, а в ответе покажет число подходящих сущностей. Для мобов подставьте нужный тип, например minecraft:zombie.
Частые вопросы
Почему мобы вообще перестали спавниться?
Три типичные причины. Первая — запрет спавна монстров: в старых версиях это spawn-monsters=false в server.properties, в новых — соответствующее игровое правило (проверьте список через /gamerule). Вторая — сложность выставлена в peaceful. Третья — кто-то поставил ClearLagg с агрессивным автоочистителем, и мобы вычищаются раньше, чем игрок до них добежит.
Стоит ли ставить плагин-очиститель вместо лимитов?
Плагины вроде ClearLagg решают следствие: они убивают уже созданные сущности каждые несколько минут. Сервер всё это время всё равно их обсчитывает, плюс скачки лага в момент чистки. Лимиты работают на входе, поэтому правильный порядок — сначала конфиги, а очиститель только для дропа предметов.
Влияет ли view-distance на количество мобов?
Прямо — да. Мобы спавнятся только в загруженных чанках, поэтому снижение view-distance с 10 до 7 автоматически уменьшает и общее число мобов. Если у вас ещё не тронут этот параметр, начните с него: эффект больше, чем от любых spawn-limits.
Итог
Рабочая связка выглядит так: per-player-mob-spawns: true, monsters в районе 30, ambient и water-ambient почти в ноль, ticks-per.monster-spawns: 4, mob-spawn-range: 6 и hard despawn 96. После каждого изменения перезапускайте сервер и смотрите TPS хотя бы полчаса под реальным онлайном — сразу после рестарта картина всегда красивее реальной.
Остальные шаги по разгону есть в общем гайде по оптимизации. А если крутить конфиги надоело и проще взять машину, где ресурсов хватает с запасом, — тарифы под Minecraft тут.