RE:NODE

Minecraft11 мин чтения

Purpur и Pufferfish против Paper

Что Purpur и Pufferfish добавляют поверх Paper, какие настройки purpur.yml и pufferfish.yml стоит знать и чем на самом деле рискует сервер на форке форка.

0 прочтений

Purpur и Pufferfish - оба форки Paper, которые запускают те же плагины и загружают те же миры. Purpur добавляет сотни игровых переключателей в файле purpur.yml - ездовых мобов, эндер-сундуки на шесть рядов, спавнеры, которые добываются шёлковым касанием, поведение жителей - и в остальном ведёт себя как Paper. Pufferfish добавляет патчи производительности, самый известный из которых - Dynamic Activation of Brain: он реже обрабатывает ИИ далёких мобов. Ни один из них не волшебное ускорение: Purpur существует ради настроек, Pufferfish жертвует частью ванильной точности ради времени тика, и оба уводят вас на шаг дальше от проекта, который первым исправляет ошибки безопасности и стабильности Minecraft. Если вам не нужна конкретная возможность одного из них, правильным выбором по умолчанию остаётся обычный Paper.

Место форков в родословной#

Серверное ПО Minecraft - это цепочка форков, и понимание этой цепочки объясняет каждый риск, о котором пойдёт речь дальше.

Сервер MojangэталонSpigotBukkit API, spigot.ymlPaperфиксы, async-чанкиPufferfishпатчи скоростиPurpurигровые опции
Каждый форк кладёт патчи поверх предыдущего

Каждый проект берёт предыдущий и накладывает свои патчи. Когда Mojang выпускает новую версию, обновляется Spigot, затем Paper, затем форки переносят свои патчи на новый Paper. Форк может быть не свежее того, на чём он построен, и часто отстаёт.

Purpur большую часть своей истории строился поверх патчей Pufferfish, а не прямо на Paper, поэтому в нём есть часть оптимизаций Pufferfish вдобавок к собственным опциям. Эти отношения менялись от версии к версии Minecraft, так что смотрите сгенерированные конфиги той сборки, которую реально скачали, а не предполагайте, какие возможности в ней есть.

Из этой родословной следуют два практических факта. Первый: каждый плагин, который работает на Paper, работает на обоих форках, потому что оба сохраняют API Paper. Второй: плагин, использующий расширенный API самого Purpur, работает только на Purpur, но не на Paper - такое бывает редко, но проверить стоит, прежде чем на него полагаться.

Purpur: Paper с выведенными наружу переключателями#

Главный довод Purpur - настраиваемость. Он добавляет большой purpur.yml рядом с файлами Paper, и почти каждая опция в нём по умолчанию повторяет ванильное поведение, так что Purpur без изменений играется как Paper. Каждое изменение вы включаете сами.

Небольшая подборка опций, которыми действительно пользуются:

purpur.yml
settings:  use-alternate-keepalive: false  blocks:    barrel:      rows: 3    ender_chest:      six-rows: falseworld-settings:  default:    mobs:      villager:        lobotomize:          enabled: false          check-interval: 100      phantom:        ridable: false
ОпцияПо умолчаниюЧто меняет
settings.blocks.barrel.rows3Размер инвентаря бочки, от 1 до 6 рядов
settings.blocks.ender_chest.six-rowsfalseУдваивает эндер-сундук
settings.use-alternate-keepalivefalseОтправляет keepalive чаще, может помочь при нестабильном соединении
mobs.<mob>.ridablefalseПозволяет ездить на этом мобе с седлом
mobs.villager.lobotomize.enabledfalseОтключает ИИ жителям, которые не могут двигаться

Переключатели езды задаются для каждого моба отдельно, поэтому purpur.yml такой длинный: почти у каждого моба свой блок настроек езды, здоровья, спавна и поведения. Собственная документация Purpur перечисляет их все с точными именами ключей для вашей версии. Ищите на этой странице, а не угадывайте ключ: Purpur молча игнорирует опцию с опечаткой, и сервер запускается так, будто вы ничего не меняли.

Две опции заслуживают отдельного внимания, потому что меняют не только игру, но и производительность сервера.

Лоботомия жителей. Торговый зал, полный жителей в клетках размером в один блок, - одна из самых дорогих вещей на сервере выживания, потому что каждый житель всё равно каждый тик выполняет поиск пути и логику рабочего места. При lobotomize.enabled: true у жителя, который не может двигаться, отключается ИИ, а check-interval задаёт, как часто Purpur перепроверяет, заперт ли он ещё. Торговля продолжает работать, но что именно продолжает делать лоботомированный житель - в частности, пополнение товаров - менялось от версии к версии, поэтому проверьте на одном жителе, прежде чем переделывать весь зал. На сервере с несколькими большими торговыми залами это одна из самых дешёвых реальных побед.

Альтернативный keepalive. Ванильный сервер отправляет пакет keepalive с фиксированным интервалом и отключает игрока, чей единственный ответ пришёл слишком поздно. Альтернатива Purpur отправляет их чаще и отключает игрока, только если в пределах таймаута не пришёл ответ ни на один, - это уменьшает число киков «Timed out» у игроков с нестабильным соединением. На задержку это не влияет.

Purpur также добавляет команды, которых нет в vanilla и Paper, например /tpsbar, /rambar, /ping и /uptime. Они полезны - и это ещё одна вещь, по которой будет скучать ваша команда, если вы когда-нибудь вернётесь на Paper.

Pufferfish: патчи производительности с компромиссами#

Pufferfish - преемник Airplane, более раннего форка для производительности; его поддерживает одноимённая хостинговая компания. Он сохраняет API Paper и сосредоточен на времени тика. Его настройки лежат в pufferfish.yml:

pufferfish.yml
dab:  enabled: false  start-distance: 12  max-tick-freq: 20  activation-dist-mod: 8  blacklisted-entities: []enable-async-mob-spawning: trueenable-suffocation-optimization: trueinactive-goal-selector-throttle: true

Dynamic Activation of Brain (DAB) - главная возможность. Новые мобы Minecraft - жители, пиглины, аксолотли, козы, лягушки и другие - используют систему «мозга», которую дорого обрабатывать. DAB тем реже тикает мозг моба, чем дальше тот от ближайшего игрока. В пределах start-distance (в блоках) мобы ведут себя как обычно. Дальше интервал между тиками мозга растёт с расстоянием, делённым на activation-dist-mod, вплоть до потолка в max-tick-freq тиков. Мобы из blacklisted-entities никогда не замедляются.

Компромисс заложен в самом названии. Житель в 40 блоках от ближайшего игрока думает реже. В обычной игре на выживание этого никто не замечает. Но у технических игроков с железной фермой, разведением жителей или рейд-фермой, которая рассчитывает на то, что мобы принимают решения на расстоянии, DAB может замедлить или сломать конструкцию. Решение - поднять start-distance, внести в чёрный список тип сущности, от которого зависит ферма, или отключить DAB.

Асинхронный спавн мобов выносит часть работы естественного спавна из главного потока. Правила спавна он не меняет, но меняет тайминги, и очень точные тесты защиты от спавна иногда расходятся с vanilla.

Замедление неактивного селектора целей заставляет сущности вне радиуса активации реже выполнять свои цели ИИ старого типа. Это пересекается с собственными настройками радиуса активации сущностей в spigot.yml - их стоит настроить в первую очередь, потому что они работают и на Paper.

Будьте честны насчёт размера выигрыша. На сервере, где узкое место - ИИ сущностей (много жителей, фермы пиглинов, мобобойки), патчи Pufferfish могут вернуть заметную долю каждого тика. На сервере, где узкое место - генерация чанков, плагины, редстоун или дальность прорисовки, они почти ничего не меняют. Профиль spark покажет, какой у вас случай: если преобладают фреймы Villager и Brain, Pufferfish стоит попробовать; если нет - не стоит.

Риски работы на форке#

Ни один из этих пунктов не повод никогда не запускать Purpur или Pufferfish. Это цена, которую нужно сопоставить с нужной вам возможностью.

  1. Отставание по версиям. Новый релиз Minecraft сначала приходит в Paper, потом в форки. Игроки с обновлёнными клиентами не смогут зайти, пока сервер не догонит, если только вы не поставите ViaVersion, чтобы закрыть разрыв. Бесплатные сборки Pufferfish в особенности временами сильно отставали от Paper.
  2. Исправления безопасности и крашей приходят позже. Когда Paper закрывает краш-эксплойт или дюп, форку нужно перенести патчи, прежде чем исправление получите вы. Обычно это часы или дни. Иногда дольше.
  3. Поддержка идёт к форку, а не к Paper. Разработчики Paper не будут разбираться с проблемой на Purpur или Pufferfish, и это разумно: они не могут сказать, не вызвали ли её патчи форка. Воспроизведите баг на чистом Paper, прежде чем сообщать о нём выше по цепочке.
  4. Расхождение поведения. Каждая включённая опция - отличие от vanilla, которого не ожидают игроки, гайды и схемы ферм. Ездовые фантомы и эндер-сундуки на шесть рядов - это весело; схема фермы, которая молча не работает из-за DAB, стоит вашим техническим игрокам полдня.
  5. Заброшенность. Форки держатся на небольшом числе мейнтейнеров. Если кто-то из них уходит, вам достаётся миграция по его расписанию, а не по вашему.
  6. Более глубокие форки умножают всё перечисленное. Существуют форки Purpur - Leaf, Gale, DivineMC и другие, - которые накладывают сверху ещё патчи, часто включая экспериментальную многопоточность. Каждый шаг вниз по цепочке добавляет отставание и убирает поддержку. Они бывают быстрыми, но именно там живут малопонятные баги.

Выбор: Paper, Purpur или Pufferfish#

Вам нужноЗапускайтеПочему
Надёжный вариант по умолчанию для любого сервераPaperОбновляется первым, эталон для плагинов и поддержки
Игровые опции без плагиновPurpurЕздовые мобы, размеры инвентарей, поведение мобов - всё в конфиге
Меньше времени тика на сервере с кучей мобовPufferfish или PurpurDAB и связанные патчи
Точная ванильная механика для технической игрыFabric с LithiumPaper и его форки меняют пограничные случаи
Больше игроков, чем тянет один потокVelocity и несколько серверов или FoliaФорк не убирает главный поток

Важны две последние строки. Техническим игрокам, которым нужно точное поведение редстоуна и ферм, лучше подходит Fabric с серверными модами для производительности, который сохраняет ванильное поведение. А если вы переросли один поток, ответ - прокси-сеть или Folia, а не другой форк той же однопоточной конструкции. Более широкое сравнение серверного ПО - в статье Paper, Fabric или vanilla.

Переход с Paper и обратно#

Поскольку оба форка сохраняют структуру мира и API плагинов Paper, переход - это замена jar-файла.

  1. Чисто остановите сервер и дождитесь окончания сохранения.
  2. Снимите бэкап вне машины. Формат мира тот же, но вы собираетесь изменить поведение, которое не всегда можно отменить: лоботомированный торговый зал или моб, на котором кто-то уехал, останутся там, где оказались.
  3. Скачайте сборку форка точно под вашу версию Minecraft. Purpur публикует сборки на своём сайте и через API загрузок; Pufferfish - на своём сайте. Не смешивайте версии.
  4. Замените jar-файл сервера и запустите. Форк создаст свой конфиг (purpur.yml или pufferfish.yml) рядом с существующими server.properties, bukkit.yml, spigot.yml и папкой config/, которые он продолжает читать.
  5. Прочитайте лог запуска на предмет плагинов, которые не загрузились, и предупреждений конфига, а затем меняйте по одной опции за раз.

На своей машине загрузку сборки Purpur можно автоматизировать через его API:

bash
$ curl -o server.jar https://api.purpurmc.org/v2/purpur/1.21.1/latest/download$ java -Xms4G -Xmx4G -jar server.jar --nogui

Возврат на Paper - то же самое в обратном порядке. Paper игнорирует purpur.yml и pufferfish.yml, так что оставьте их на месте на случай, если вернётесь. Не вернётся только состояние, созданное форком: сущности, на которых уехали куда-то необычно, инвентари больше, чем позволяет vanilla (классический случай - предметы в рядах с четвёртого по шестой у эндер-сундука на шесть рядов; освободите их перед возвратом), и всё, что зависело от команд, которые есть только в Purpur.

В RE:NODE тарифы Minecraft выдаются с Paper и подходящей версией Java - ровно то, что рекомендует эта статья. Если вам нужен Purpur или Pufferfish, загрузите jar-файл через файловый менеджер или по SFTP и укажите на него во вкладке Startup: белого списка разрешённого серверного ПО нет, но нет и переключения в один клик. Сначала снимите бэкап; у игровых тарифов есть слоты для бэкапов, которые можно заблокировать от ротации, пока вы решаете, остаётся ли форк.

Как работать на форке правильно#

Если вы всё-таки на форке, несколько привычек сделают жизнь скучной в хорошем смысле:

  • Закрепите сборку. Не позволяйте скрипту запуска скачивать «latest» при каждом старте. В сборках форков бывают регрессии, и вы хотите сами решать, когда брать новую. Держите предыдущий jar-файл рядом с текущим.
  • Ведите журнал всех опций, отличных от стандартных. Через полгода никто не вспомнит, почему на фантомах можно ездить и почему жители в 30 блоках перестали размножаться. Блок комментариев в начале purpur.yml ничего не стоит.
  • Следите за заметками к релизам форка на предмет исправлений безопасности и переносов патчей, а также за объявлениями Paper, потому что ждёте вы именно исправлений Paper.
  • Перед обновлением версии тестируйте на копии. Работающий порядок действий описан в статье обновление версии Minecraft, и он применим без изменений.
  • Профилируйте после каждого изменения. Опция форка, которая должна помочь и не помогает, - признак того, что узкое место в другом месте.

FAQ#

Purpur быстрее Paper?

Сам по себе нет. Собственные опции Purpur по большей части по умолчанию повторяют vanilla, и его производительность близка к Paper. Сборки с патчами Pufferfish могут быть быстрее на серверах с большим числом мобов, когда включены опции вроде DAB или лоботомии жителей, но выигрыш даёт именно эта настройка, а не название.

Работают ли плагины Paper на Purpur и Pufferfish?

Да. Оба сохраняют API Paper, так что любой плагин для Paper работает и на них. Исключение - плагин, написанный под расширенный API Purpur: он работает только на Purpur. Авторы плагинов обычно прямо об этом пишут.

Можно ли вернуться на Paper после Purpur?

Да. Формат мира и структура папок те же, а Paper просто игнорирует purpur.yml. Сначала освободите эндер-сундуки на шесть рядов и дополнительные ряды бочек, потому что Paper некуда положить эти предметы.

Ломает ли DAB из Pufferfish фермы?

Может. DAB замедляет ИИ мобов с «мозгом», которые находятся далеко от игроков, а это затрагивает разведение жителей, некоторые железные фермы и рейд-фермы, работающие на расстоянии. Поднимите dab.start-distance, добавьте затронутого моба в dab.blacklisted-entities или отключите DAB на серверах с серьёзными техническими игроками.

Стоит ли новому серверу начинать на форке?

Обычно нет. Начните на Paper, настройте его и переходите только тогда, когда понадобится конкретная возможность форка. Форк, выбранный потому, что звучит быстрее, обычно добавляет отставание по версиям и проблемы с поддержкой, не решая ничего, что на самом деле мешает серверу.


Комментарии

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

0/2000