Стойки для брони как лаг-машина: почему они нагружают сервер и как это предотвратить
Введение: невинная декорация или оружие?
Стойки для брони (Armor Stands) кажутся безобидным декоративным элементом. Но в больших количествах они становятся мощной лаг-машиной. Каждая стойка — это Entity (сущность), которую сервер должен хранить в памяти, отслеживать её положение, проверять взаимодействия и отправлять данные клиентам. Стойка с бронёй создаёт дополнительную нагрузку из-за NBT-данных экипировки. В этом гайде я расскажу, почему стойки нагружают сервер, как найти «фермы стоек» и как ограничить их использование.
Почему стойки для брони нагружают сервер
- Entity Count: каждая стойка — это Entity. Сервер имеет лимит на количество Entity в одном чанке. 100 стоек = 100 Entity. 1000 стоек = лаги.
- NBT Data: стойка с бронёй хранит NBT-теги для каждого предмета экипировки. Это дополнительные данные, которые сервер загружает и сохраняет.
- Рендеринг: сервер отправляет данные о каждой стойке всем игрокам в радиусе видимости. 50 игроков × 100 стоек = 5000 пакетов.
- Взаимодействия: стойки проверяют столкновения с игроками, стрелами, другими Entity.
Как найти «ферму стоек» на сервере
- Выполните
/spark health— посмотрите раздел «Entities». Если Armor Stands исчисляются сотнями или тысячами — проблема. - Выполните
/spark health --chunks— найдите чанки с аномальным количеством Entity. - Телепортируйтесь в проблемный чанк:
/tp X Y Z. - Удалите лишние стойки:
/kill @e[type=armor_stand,distance=..50].
Способы ограничения стоек для брони
Способ 1: Paper.yml (отключение тиков)
В файле paper.yml:
world-settings:
default:
armor-stand-tick: false
Это отключает еже-тиковое обновление стоек. Стойки перестают двигаться, проверять столкновения и обновлять позицию. Они становятся статичными — нагрузка падает до нуля. Но ломаются механизмы с движущимися стойками (редко используются).
Способ 2: Плагин ArmorStandLimiter
Бесплатный плагин, который ограничивает количество стоек на чанк и на игрока. Конфигурация:
limits:
per-chunk: 10
per-player: 20
check-interval: 60 # Проверять каждые 60 секунд
Если игрок превышает лимит — лишние стойки автоматически удаляются.
Способ 3: Плагин EntityLimiter
Ограничивает не только стойки, но и все типы Entity (вагонетки, рамки, лодки). Настройка по типам:
limits:
armor_stand: 15
minecart: 10
item_frame: 20
boat: 5
Сравнительная таблица методов
| Метод | Эффективность | Побочные эффекты | Сложность |
|---|---|---|---|
| Paper armor-stand-tick: false | Максимальная | Ломает движущиеся стойки | Низкая |
| ArmorStandLimiter | Высокая | Нет | Низкая |
| EntityLimiter | Высокая | Нет | Низкая |
| Ручное удаление /kill | Временная | Нет | Низкая |
💡 Совет профи
Если вы используете стойки для декораций (манекены с бронёй на спавне), установите armor-stand-tick: false в Paper — они останутся на месте и будут выглядеть так же, но перестанут нагружать сервер. А для защиты от злоупотреблений добавьте ArmorStandLimiter с лимитом 10 стоек на чанк — этого достаточно для декора, но мало для лаг-машины.
💬 Комментарии (0)
🔒 Войдите, чтобы оставить комментарий
😊 Пока нет комментариев. Будьте первым!