RE:NODE

Minecraft12 мин чтения

Плагины Minecraft, которые стоит поставить, и те, что вам дорого обойдутся

Короткий список, который окупает свой тик: права, защита, логирование, backup и профайлер. А ещё как их ставить и что незаметно разрушает сервер.

Обновлено

1 прочтений

Каждый плагин - это код, работающий в единственном главном потоке вашего сервера, а тик длится 50 миллисекунд. Плагин, который тратит 5 мс на тик, съедает десятую часть бюджета ещё до того, как игра сдвинула хоть одного моба. Именно эту рамку стоит держать в голове: список не бесплатен, короткий список, выбранный осознанно, работает лучше длинного, собранного за два года, а цена проявляется в частоте тиков, а не в памяти. Эта статья - короткий список: четыре плагина, нужные почти любому серверу, ещё шесть, которые окупаются, когда появляются игроки, категории, тихо разрушающие сервер, и способ установить, обновить и удалить любой из них, ничего не сломав.

Чего на самом деле стоит плагин#

Плагины дёшевы по памяти и дороги по времени. Типичный jar - это несколько мегабайт классов плюс то, что он кэширует; двадцать таких не сдвинут график памяти. Соревнуются они за тик.

Сервер делает всё по порядку в одном потоке: движение сущностей, редстоун, обновления блоков, затем запланированные задачи каждого плагина и каждый сработавший обработчик событий. Если сумма превышает 50 мс, тик затягивается и TPS падает. В Paper /mspt показывает текущую стоимость напрямую, и это гораздо более раннее предупреждение, чем TPS: сервер на 45 мс всё ещё показывает 20.0 TPS и находится в одной ферме мобов от заметных лагов.

Дорогим плагин делают три конкретных поведения:

  • Повторяющиеся задачи в главном потоке. Плагин, который раз в секунду сканирует все загруженные чанки, выполняет работу, пропорциональную числу игроков и view distance, каждую секунду и вечно.
  • Синхронные запросы к базе данных. Запрос в главном потоке блокирует весь сервер, пока не вернётся. Если запрос занимает 200 мс, сервер потерял четыре тика. Классический нарушитель - обработчики входа.
  • Обработчики на частых событиях. BlockPhysicsEvent, EntityMoveEvent и события загрузки чанков срабатывают огромное число раз. Обработчик, который делает на них что-то нетривиальное, - налог на всё остальное.

Ничего из этого не значит «избегайте плагинов». Это значит: знайте, для чего нужен каждый, и будьте готовы убрать любой.

Четыре плагина, нужные почти каждому серверу#

Плагин прав идёт первым, потому что без него всем остальным не у кого спросить, кто есть кто. LuckPerms - ответ по умолчанию, и так уже много лет: группы с наследованием, контексты по мирам и серверам, треки для повышения, веб-редактор и - возможность, которая действительно выручает, - /lp verbose on, выводящая каждую проверку права в момент её выполнения, так что вы видите, какой именно node запрашивает плагин, а не гадаете.

bash
$ lp creategroup moderator$ lp group moderator parent add default$ lp group moderator permission set coreprotect.inspect true$ lp user Steve parent add moderator$ lp editor

По умолчанию он хранит данные в файле H2, так что для начала больше ничего не требуется, и работает на Paper, Velocity, Fabric и Forge, что важно, если вы когда-нибудь вырастете до сети с прокси. Контексты и наследование подробно разбирает руководство по LuckPerms, а слой выше - whitelist и права.

Защита территории предотвращает самую частую причину развала сообщества. Есть две формы, и большинству серверов нужны обе:

  • На основе приватов - стандарт здесь GriefPrevention. Игроки заявляют приват золотой лопатой, со временем получают блоки привата и управляют доступом через /trust, /containertrust и /accesstrust. Никакой работы администратора на каждый приват, в этом и смысл.
  • На основе регионов - WorldGuard, которому нужен WorldEdit рядом. Администратор выделяет область и задаёт флаги: /rg define spawn, затем /rg flag spawn pvp deny. Так защищают спавн, магазины и арены для событий.

Логирование блоков с откатом превращает «кто-то сжёг город» из катастрофы в команду. Это CoreProtect: /co inspect включает режим, в котором щелчок по блоку выводит его историю, /co lookup u:Steve t:3d r:10 ищет, а /co rollback u:Steve t:2h r:20 отменяет. По умолчанию он пишет в файл SQLite. Остальной набор инструментов описан в статье защита от гриферов и античит.

Профайлер, чтобы при замедлении сервера можно было ответить, почему, а не гадать. Это spark: он бесплатный и работает на Paper, Fabric, Forge и Velocity.

code
/spark profiler start... play for five minutes .../spark profiler stop/spark health/spark heapsummary

profiler stop печатает ссылку на flame graph, где названы плагин, мод или система, съедающие тик. health выводит TPS, MSPT и память вместе. heapsummary показывает, какие классы занимают кучу, - так ловят кэш плагина, растущий с марта. Что вы видите на графике, объясняет статья как читать отчёт spark.

Профайлер превращает спор о том, какой плагин тормозит, в скриншот.

Backup - пятое, что включает большинство списков, и это тот случай, когда плагин обычно не тот инструмент. Плагин backup записывает архив на тот же диск, что и защищаемый им мир, а это покрывает повреждённый чанк и ничего больше. Backup уровня панели хранится вне машины, может быть заблокирован, чтобы ротация его не удалила, и восстанавливается кнопкой. Используйте его, а как сделать его согласованным, см. ниже.

Установка, обновление и удаление плагинов#

Механика проста, а ошибки повторяются.

  1. Скачивайте со страницы самого плагина. Hangar, SpigotMC, Modrinth или релизы проекта на GitHub. Плагин - это произвольный код с полным доступом к вашему серверу, его файлам и учётным данным базы данных. Перезалив на сайте-агрегаторе того не стоит: более длинный вариант этого довода - в статье как держать сервер с модами в чистоте.
  2. Проверьте версию, на которую он рассчитан. Плагин, собранный для 1.20, может не загрузиться на 1.21. Страница загрузки указывает поддерживаемый диапазон; верьте ей, а не надеждам.
  3. Положите jar в `plugins/` и перезапустите. В панели это файловый менеджер или SFTP, затем кнопка Restart.
  4. Не используйте `/reload`. Он оставляет наполовину выгруженные классы со ссылками на объекты, которых больше нет, и порождает баги, похожие на что угодно, кроме того, чем являются. У менеджеров плагинов, обещающих горячую замену jar, за более симпатичным интерфейсом та же проблема. Перезапустите сервер.
  5. Прочитайте сгенерированную конфигурацию. Первый запуск создаёт plugins/<Name>/config.yml. Большинство плагинов поставляется с настройками, рассчитанными на большой публичный сервер, а у большинства из вас такого нет.
  6. Чтобы удалить плагин, остановите сервер, удалите jar и решите, что делать с папкой данных. Оставленный каталог plugins/<Name>/ ничего не стоит и позволяет передумать. Удаление необратимо, а для чего-то вроде CoreProtect это вся ваша история.

/plugins показывает загруженное; всё, что напечатано красным, не смогло включиться, а причина - в консоли с момента запуска. Что ещё там стоит заметить, описано в статье как читать консоль.

Следующие шесть, когда появились игроки#

ПлагинДля чегоНа что обратить внимание
EssentialsXДома, варпы, наборы, /tpa, экономикаОтключите его модули protect и anti-build, если используете WorldGuard
VaultСвязывает экономику и права между плагинамиНичего. Это клей, и он крошечный
ChunkyЗаранее генерирует территорию, чтобы это не делали игрокиЗапускайте, когда никого нет онлайн; он и должен быть тяжёлым
Семейство ViaVersionПозволяет подключаться клиентам других версий игрыНе замена обновлению; есть особые случаи
Веб-картаDynmap, BlueMap или squaremapНужен второй порт и настоящий диск
Geyser и FloodgateКлиенты Bedrock на сервере JavaНужен UDP-порт, и есть некоторые визуальные странности

Заметки, полезные до установки любого из них.

EssentialsX - поддерживаемый форк; оригинальный Essentials заброшен уже много лет, и руководства со ссылками на него устарели. Ставьте ядро и только те модули, которые нужны: обычная пара - EssentialsXChat и EssentialsXSpawn. Его модули защиты пересекаются с WorldGuard и GriefPrevention, а две системы защиты порождают споры, которые не выигрывает ни одна. Денежная сторона разобрана в статье EssentialsX, Vault и экономика, а если вы собираетесь что-то продавать, прочтите монетизация в рамках правил, прежде чем назначать цену.

Chunky - самый ценный плагин в списке на минуту настройки, потому что негенерированная заранее территория - крупнейшая причина «случайных» скачков лагов на сервере выживания. Задайте границу, сгенерируйте всё внутри неё, и скачки прекратятся:

code
/chunky world world/chunky center 0 0/chunky radius 5000/chunky quiet 30/chunky start

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

Веб-карты - категория плагинов, которая чаще всего удивляет счётом за диск и ввод-вывод. Dynmap рендерит плитки изображений и по умолчанию отдаёт их на порту 8123; BlueMap строит 3D-модель, работает на 8100, дорог при первичном рендере и дёшев потом; squaremap - облегчённый вариант 2D. Всем нужно второе выделение порта, которое в этой панели делается парой щелчков на вкладке Network, потому что тарифы Minecraft поставляются с одним. Подробности - в статье Dynmap, BlueMap и squaremap в сравнении.

Античит заслуживает предупреждения, а не рекомендации. Пакетный античит действительно прожорлив по CPU, а CPU на игровом тарифе - жёсткая доля, а не всплеск. Он также даёт ложные срабатывания на игроках с высоким пингом и на игроках Bedrock, приходящих через Geyser, потому что правила их движения другие. Если вы запускаете такой, сначала запустите его в режиме логирования и неделю читайте, что бы он сделал, прежде чем позволять ему кого-то выгонять.

Backup, который действительно согласован#

Minecraft держит мир в памяти и периодически записывает его на диск, так что архив, снятый в середине записи, может содержать порванный файл региона. Лечится это предварительным сбросом, а вкладка Schedules создана именно для этого, потому что задачи выполняются по порядку с паузами между ними.

Расписаниеcron 0 4 * * *Команда консолиsave-all flushПауза30 секундЗадача backupхранится вне машиныЗаблокироватьпереживает ротацию
Согласованный ночной backup

Поставьте расписание на час, когда никто не играет, первой задачей save-all flush, второй - короткую паузу, а третьей - backup. Перед обновлением версии или крупным изменением плагинов снимите один вручную и заблокируйте, чтобы ротация его не удалила. И иногда восстанавливайте один, чтобы убедиться, что он работает, потому что backup, который никто не восстанавливал, - гипотеза; о второй половине этой фразы статья backup, из которых действительно восстанавливаются, а задачи по расписанию, которые стоит завести описывают остальное, что стоит поручить таймеру.

Категории, которые вам дорого обходятся#

Некоторые из них по отдельности оправданы. Все они распространены, и ко всем стоит относиться с подозрением.

  • Всё, что сканирует по таймеру. Счётчики сущностей, чистильщики чанков, «уменьшители лагов». Они выполняют работу, пропорциональную вашему миру, каждые несколько секунд, изменилось что-то или нет.
  • Очистители сущностей. Шаблон ClearLag - удалять все выброшенные предметы каждые пять минут - прячет проблему и удаляет вещи игроков. Настоящее решение - найти ферму или каменоломню, которая их производит. Paper уже умеет объединять предметы и ограничивать спавн в spigot.yml и config/paper-world-defaults.yml без плагина.
  • Логгеры блоков на настройках по умолчанию. CoreProtect стоит иметь, но логирование каждой операции с контейнерами и предметами на загруженном сервере - большой объём записи. Отключите категории, которые вы никогда не будете искать, и запускайте /co purge t:30d по расписанию.
  • Плагины «всё в одном». Jar, объединяющий сорок возможностей, чтобы вы использовали три, - это обработчики событий тридцати семи возможностей, о которых вы не просили.
  • Заброшенные плагины. Самая опасная категория, потому что они обычно работают, пока не перестают. Плагин, не обновлявшийся под вашу версию, может загрузиться, выглядеть нормально, а затем сломаться на каком-то событии или тихо испортить данные. Проверяйте дату последнего релиза перед установкой и проверяйте весь список перед обновлением версии.
  • Несколько плагинов на одну работу. Две защиты, два форматтера чата, две экономики за Vault. Тот, что загружается вторым, обычно побеждает, но непоследовательно.
  • Лишние загруженные миры. Multiverse - это нормально, но каждый загруженный мир держит в памяти собственные чанки спавна, находится в нём кто-то или нет.

Как доказать, какой плагин тормозит#

Когда TPS падает, удержитесь от желания убирать всё подряд. Порядок, который работает:

  1. Сначала `/mspt`. Если значение заметно ниже 50, ваша проблема не в постоянной нагрузке, а в периодическом скачке, и шаг 3 его найдёт.
  2. `/spark profiler start`, воспроизведите плохое поведение, `/spark profiler stop`. Читайте flame graph от самой широкой полосы вниз. Имена плагинов появляются как их собственные пакеты, так что виновник обычно очевиден за полминуты.
  3. `/spark profiler start --timeout 60`, если проблема возникает по таймеру и вам нужна выборка, которая сама останавливается и выгружается.
  4. `/spark heapsummary`, если симптом - память. Плагин, держащий сотни мегабайт кэшированных объектов, виден здесь и больше нигде.
  5. Только потом начинайте убирать плагины, по одному, с перезапуском между ними. Если убрать пять сразу, вы ничего не узнаете.

Помните, что не каждое замедление - вина плагина. View distance, негенерированная заранее территория, ферма сущностей и просто слишком маленькая доля CPU - всё это выглядит как лаг. Непроблемные для плагинов причины разобраны в статье почему падает TPS и что делать, а сервер, упёршийся в лимит CPU, работает медленно, а не сломан.

FAQ#

Сколько плагинов - это слишком много?

Числа нет. Тридцать лёгких плагинов могут стоить меньше, чем три тяжёлых. Важно измерение MSPT: если оно ниже примерно 35 при вашем обычном числе игроков онлайн, запас есть. Если оно около 50, запаса нет, сколько бы jar ни лежало в папке.

Занимают ли плагины много RAM?

Редко. Большинство стоит несколько мегабайт классов плюс их кэши. Исключения - веб-карты, логгеры блоков с большими очередями в памяти и всё, что кэширует данные регионов или чанков. На самом деле плагины расходуют время главного потока.

Можно ли устанавливать плагины без перезапуска?

Можно, и не нужно. /reload и менеджеры плагинов с горячей заменой оставляют устаревшие классы и вызывают баги, которые крайне трудно диагностировать. Загрузите jar, затем перезапустите. Это занимает пятнадцать секунд и экономит вечер.

Будут ли плагины работать на сервере Fabric или Forge?

Нет. Плагины рассчитаны на API Bukkit и Paper, которые загрузчики модов не реализуют. У нескольких привычных инструментов есть отдельные версии-моды - среди них LuckPerms и spark, - но экосистема не переносится. Это решение разбирает статья Paper, Fabric или ванильный сервер.

Какой плагин ставить первым?

LuckPerms, раньше всего остального. Конфигурация почти каждого другого плагина предполагает, что система прав существует, а вводить её после того, как вы раздали оператора пятерым, - больше работы, чем сделать это в первый день.

Нужен ли мне плагин для backup?

Нет, если ваш хостер делает backup вне машины. Плагин, пишущий архивы на тот же диск, защищает от повреждённого файла мира и ни от чего больше: ни от удалённого сервера, ни от неудачного восстановления, ни от ошибки в файловом менеджере. Используйте backup панели и планируйте перед ними save-all flush.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000