CloudSuperSpawners

Ванильный спавнер на донате — вечная головная боль. Заплативший игрок сносит блок без Шёлкового Прикосновения — и спавнер просто исчезает, никакого предмета в кармане. Или подходит с яйцом спавна и тихо переназначает моба под свой — донат-товар угнан прямо у вас на глазах. CloudSuperSpawners закрывает обе дыры и превращает спавнер в честный, настраиваемый донат-предмет: ставится как блок, работает как продуманный генератор мобов, ломается только с умом.

Снаружи — обычный ванильный спавнер, ничем не палится. Внутри — своя логика: набор мобов, свои веса, свой интервал, свой кап на количество рядом. Всё целиком в конфиге, без правки кода и без рестарта сервера.

Что это

Спавнер-предмет: блок SPAWNER с меткой типа в PDC (superspawners:type). Плагин узнаёт свои предметы именно по этой метке, а не по имени — переименовать в наковальне и выдать за другой тип не получится. Игрок ставит предмет — на месте появляется рабочий супер-спавнер того типа, что был выдан командой. Типов сколько угодно, каждый — отдельная запись в конфиге со своим набором мобов, ритмом спавна и редкостью; ниже разобраны все шесть, что идут из коробки, плюс шаблон для седьмого.

Установка и активация

Игрок ставит предмет-спавнер как обычный блок — плагин узнаёт тип по метке в PDC, регистрирует координаты во внутреннем реестре и уже на следующем тике глушит ванильный спавн блока: 0 мобов за цикл, нулевой радиус игрока, огромная задержка. Внешне блок остаётся обычным спавнером — та же крутящаяся модель моба внутри, — просто ванильный движок у него молчит навсегда, а спавн ведёт отдельный планировщик плагина.

Планировщик проверяет каждый зарегистрированный спавнер по своему шагу (по умолчанию раз в секунду) и первым делом смотрит, есть ли игрок в радиусе activation-range — простым расстоянием, без обращения к чанкам, чтобы не будить лишний раз спящий мир. Только если игрок рядом, плагин трогает сам блок и проверяет, что чанк загружен. Если блок пропал не через плагин — снесли взрывом, WorldEdit, другим плагином, — реестр сам стирает запись при следующей проверке, без ошибок в консоли и без зомби-записей.

Мульти-моб и локальный кап

Раз в свой interval-seconds спавнер выдаёт не одного моба, а сразу пачку — count-per-cycle штук, и каждый слот пачки — независимый взвешенный бросок по весам набора. Значит, в «Адском» пачка из двух мобов вполне может выпасть два Ифрита подряд или два Магмовых куба — гарантии «по одному от каждого» нет, только вероятность.

Перед спавном планировщик считает живых существ в радиусе activation-range (кубом со стороной в этот радиус, не сферой) — и если их уже max-nearby или больше, цикл пропускается целиком, а не переносится на ближайшую свободную секунду: следующая попытка — только через полный interval-seconds заново. Кап при этом считает вообще всех живых существ рядом, не только мобов этого спавнера, — если поставить два разных типа близко друг к другу, они будут делить один лимит и подтормаживать друг друга. Таймер последнего спавна хранится в памяти, а не в файле, так что после каждого перезапуска сервера все спавнеры стартуют так, будто интервал уже прошёл, и готовы спавнить сразу.

Защита спавнера

  • Яйцо спавна. Правый клик яйцом спавна по зарегистрированному супер-спавнеру отменяется целиком — моба под блоком чужим яйцом не переназначить, донат-предмет нельзя незаметно подменить.
  • Ломка без Кирки. Любой инструмент, кроме Кирки Индианы, — блок пропадает без дропа и опыта, запись в реестре стирается сразу. Ванильный спавнер и так не даёт дропа при ломке — плагин лишь явно гасит и опыт, и любые прочие дропы, которые мог бы подмешать другой плагин.
  • Чужие спавнеры. Если блок SPAWNER не зарегистрирован плагином — обычный ванильный спавнер, поставленный яйцом или найденный в подземелье, — все листенеры его не трогают, ломается и переназначается как обычно.

Наборы спавнеров

Из коробки — шесть наборов, у каждого свой состав мобов и свой ритм. Логика веса простая: вес — это доля из ста, и во всех шести наборах веса мобов складываются ровно в 100, так что процент ниже — не округление, а точный шанс. Там, где есть редкий подшанс, он всегда с маленьким весом и превращает обычный фарм в маленькую лотерею при каждом цикле.

Дружелюбный

id friendly, custom-model-data 690001. Интервал 15 секунд, 3 моба за цикл, радиус активации 16 блоков, кап рядом — 20. Все веса ровно по 25 — раритетов внутри набора нет, это чистая ферма фауны для шерсти, яиц, кожи, говядины и свинины. Логичный первый спавнер для младшего доната: никакой боёвки, только мирная живность.

  • Овца SHEEP — 25%
  • Курица CHICKEN — 25%
  • Корова COW — 25%
  • Свинья PIG — 25%

Обычный

id common, custom-model-data 690002. Самый быстрый цикл из всех шести — 12 секунд, 3 моба за раз, радиус 16, кап 20 (вместе с «Дружелюбным» — самый высокий лимит рядом). Редкого подшанса нет, зато у набора самый высокий суммарный поток мобов среди всех шести: порох, кости, паутина, стрелы, гнилая плоть, изредка — паучий глаз.

  • Зомби ZOMBIE — 40%
  • Скелет SKELETON — 35%
  • Паук SPIDER — 25%

Морской

id sea, custom-model-data 690003. Интервал 20 секунд, 3 моба, радиус 16, кап 15. Пять рыбных мобов и Страж дают ровный фарм, а на дне пачки спрятан Древний Страж — 2% из ста, самый редкий подшанс во всём плагине. Он накладывает Усталость от горной добычи на игроков рядом, так что застать его чистым сюрпризом — часть удовольствия. Ставить такой спавнер стоит строго под водой: плагин спавнит мобов над блоком без проверки среды, и рыба на суше просто задохнётся.

  • Треска COD — 30%
  • Лосось SALMON — 25%
  • Иглобрюх PUFFERFISH — 15%
  • Тропическая рыбка TROPICAL_FISH — 15%
  • Страж GUARDIAN — 13%
  • Древний страж ELDER_GUARDIAN — 2% (редкий)

Редкий

id rare, custom-model-data 690004. Интервал 18 секунд, 3 моба, радиус 16, кап 15. Три опасных зомби-варианта примерно поровну — Утопленник иногда роняет трезубец или наутилусовую раковину, чего обычный зомби никогда не даст, — и Крипер на 4% сверху. Тот самый риск набора: цикл может тихо подложить взрывного гостя рядом с постройками, если сервер не гасит урон блокам от взрыва.

  • Хаск HUSK — 33%
  • Утопленник DROWNED — 33%
  • Скиталец STRAY — 30%
  • Крипер CREEPER — 4% (редкий)

Адский

id hell, custom-model-data 690005. Интервал 18 секунд, но пачка меньше — всего 2 моба за цикл, радиус 16, кап 15. Редкого подшанса нет: все три моба — уже сами по себе награда. Скелет-иссушитель изредка роняет свой череп, Ифрит — стержни для розжига и зельеварения, Магмовый куб — крем. И всё это без похода в Незер и без риска лавы: плагин спавнит их поверх обычного блока где угодно.

  • Скелет-иссушитель WITHER_SKELETON — 40%
  • Ифрит BLAZE — 40%
  • Магмовый куб MAGMA_CUBE — 20%

Деревенский

id village, custom-model-data 690006. Интервал 20 секунд (самый редкий ритм наравне с «Морским»), 2 моба за цикл, радиус 16, кап 15. Разбойники и Каратели — костяк рейда иллагеров, Ведьма подмешивает зелья и редкие ингредиенты, а на 3% — Заклинатель, единственный моб во всём плагине, гарантированно дающий Тотем Бессмертия при смерти. Он же на арене вызывает вексов — редкий подшанс тут одновременно и самая жирная награда, и самая опасная драка набора.

  • Разбойник PILLAGER — 40%
  • Каратель VINDICATOR — 35%
  • Ведьма WITCH — 22%
  • Заклинатель EVOKER — 3% (редкий)

Сводка по ритму и лимитам — «Морской» и «Деревенский» спавнят реже и мельче партиями, чем «Обычный»:

НаборИнтервалМобов за циклРадиус активацииКап рядом
Дружелюбный15 с316 блоков20
Обычный12 с316 блоков20
Морской20 с316 блоков15
Редкий18 с316 блоков15
Адский18 с216 блоков15
Деревенский20 с216 блоков15

Кирка Индианы Джонса

Отдельный донат-инструмент — золотая кирка с зачарованным блеском (пятый уровень Эффективности, спрятан из тултипа флагом скрытых зачарований — чисто ради визуала) и меткой superspawners:kirka в PDC. Механика простая: один удар Киркой по супер-спавнеру — блок ломается, и на 100% выпадает предмет-спавнер его типа, забирай и ставь в другом месте. Сама Кирка после удара расходуется — стак уменьшается на 1, а если это была последняя в руке, рука пустеет. Выдаётся отдельной командой, парой к предметам-спавнерам, а не крафтится и не встречается в мире сама по себе.

Есть нюанс на грани редактирования конфига: если тип спавнера удалить из spawner-types, а спавнер этого типа всё ещё стоит в мире, он «засыпает» — но если его всё равно сломать Киркой, вернуть нечего (плагину неоткуда взять определение типа для нового предмета), и в этом случае Кирка НЕ расходуется — сообщение будет как при обычной ломке без инструмента. Практический вывод: не убирать тип из конфига, пока в мире остаются спавнеры этого типа, которые кто-то ещё планирует честно выломать.

Спавнеры в экономике сервера

Плагин не просто выдаёт мобов — он даёт рычаги для донат-лестницы. Шесть типов из коробки естественно делятся по риску и полезности: «Дружелюбный» и «Обычный» — безопасный стартовый набор для младших рангов (шерсть, яйца, порох, кости, паутина, никакой боёвки), «Морской», «Редкий», «Адский» и «Деревенский» — уровень постарше, где в каждой пачке есть шанс на трофей вроде тотема от Заклинателя или черепа Скелета-иссушителя. Редкий подшанс — не украшение, а инструмент удержания: игрок фармит спавнер не ради гарантированного дропа, а ради лотереи в каждом цикле, и это держит интерес к рангу дольше, чем разовая выдача сундука.

Кирка Индианы — отдельный рычаг: без неё спавнер намертво привязан к точке установки, с ней — переносной актив, который можно честно передать другому игроку или переставить при переезде базы, но только тем, кому Кирку выдали отдельной командой, — массово фармить их нельзя. PDC-метка вместо имени защищает саму механику: переименовать обычный блок в наковальне и выдать его за супер-спавнер не получится, плагин попросту не увидит метку. А /spawners reload позволяет докручивать баланс — веса, интервалы, капы — на живом сервере без даунтайма, если какой-то ранг оказался слишком сильным или слишком слабым.

Команды

Все операции — через один корень /spawners (алиасы /superspawners, /спавнеры), право одно на всё — superspawners.admin.

  • /spawners give hell Vitaliy — выдать игроку Vitaliy предмет «Адский спавнер» (первый аргумент — id типа, ключ из spawner-types в конфиге)
  • /spawners give friendly Newbie — стартовый набор новичку
  • /spawners kirka Vitaliy — выдать Кирку Индианы Джонса
  • /spawners types (алиас list) — список всех типов из конфига прямо в чате: число мобов, интервал, размер пачки
  • /spawners reload — перечитать config.yml целиком: типы, сообщения, настройки планировщика; саму лицензию при этом заново НЕ проверяет — только при старте плагина

Неизвестный id типа — команда сама покажет список доступных. Оффлайн-игрок как получатель — вежливый отказ в чате, а не ошибка в консоли. Табуляция подставляет id типов и ники онлайн-игроков динамически: новый тип из конфига сразу появляется в автодополнении, а без права superspawners.admin команда вообще не подсвечивается.

Важно: выдача предмета не проверяет свободное место в инвентаре получателя и не роняет предмет на землю при переполнении — если слотов не хватит, спавнер или Кирка просто исчезнут. Перед крупной выдачей инвентарь получателя стоит освободить.

Права

Всё завязано на одно право — superspawners.admin, по умолчанию у операторов, выдаётся любым плагином управления правами. Оно закрывает разом всю команду /spawners: выдачу спавнеров, выдачу Кирки, список типов и reload — отдельных прав на каждое действие нет. Игрокам без доступа к /spawners права не нужны вовсе — они просто получают готовый предмет и ставят его, вся магия дальше держится на PDC-метке предмета, а не на правах того, кто его поставил.

Настройка

  • settings — общий ритм плагина: tick-interval-ticks (по умолчанию 20 тиков = раз в секунду планировщик ПРОВЕРЯЕТ спавнеры; реальный ритм спавна каждого типа — его собственный interval-seconds), spawn-y-offset (на сколько блоков выше спавнера появляются мобы, по умолчанию 1), spawn-spread (разброс точки спавна по горизонтали в блоках, по умолчанию ±1; 0 — строго по центру блока).
  • kirkadisplay-name и custom-model-data Кирки (по умолчанию 690010); номера под сами спавнеры уже заняты диапазоном 690001–690006, для нового типа нужен свой уникальный номер вне этого списка.
  • spawner-types — сердце конфига: каждый тип — своя запись, ключ записи = id для команд. Поля: display-name, custom-model-data, interval-seconds, count-per-cycle, activation-range, max-nearby (0 — без локального капа) и список mobs (type + weight). Неизвестное имя моба, немобное существо или вес ≤ 0 — предупреждение в лог и пропуск именно этого моба, остальной набор грузится как есть; если валидных мобов не осталось совсем, тип загрузится, но спавнить будет нечего.
  • Новый тип — в конфиге уже лежит закомментированная заготовка «boss» (Разоритель 70% / Иссушитель 30%, интервал 30 с, 1 моб за цикл, радиус 24, кап 4) как пример устройства. Она неактивна, пока её не раскомментировать, не дать ей свой custom-model-data (например, 690007) и не выполнить /spawners reload — до этого момента это не седьмой набор, а просто шаблон в комментариях.
  • Reload и удаление типа — уже стоящие в мире спавнеры при reload не сбрасываются: они привязаны к типу по id и просто подхватывают новые параметры. Если тип целиком убрать из конфига, его спавнеры не ломаются — они «засыпают» (планировщик пропускает записи без определения типа) и оживают обратно, если тип вернуть.
  • messages — 16 ключей, все на русском, от префикса и ошибок прав до текстов ломки и выдачи Кирки; правятся напрямую в конфиге, без пересборки плагина.
  • license — встроенная защита от сливов: enabled, key, url, grace-hours. При старте плагин шлёт ключ на сервер валидации; если сервер лицензий недоступен, есть запас в grace-hours (по умолчанию 24) на кэше последней успешной проверки, а вот явный отказ (ключ неверен, занят другим IP, отозван) отключает плагин сразу, без грейса. Для приватного сервера защита выключается одним enabled: false.
Шесть наборов — от мирной фермы до тотема Заклинателя — держатся на одной идее: спавнер нельзя угнать яйцом, нельзя разобрать голыми руками и нельзя подделать переименованием. Забрать его можно только честно, Киркой Индианы, а донат-лестницу под него докручивают в конфиге без единого рестарта.