Небо трещит, у горизонта разгорается зарево — и на землю с грохотом падает раскалённый шар: уголь, магма, обломки нижнего мира. Через мгновение сверху сыплются огненные шары, а у подножия метеорита ждут четыре сундука, запертых до срока. CloudMeteorite превращает случайную точку карты в место, где стоит рискнуть — и это не постановка, а то, что реально происходит на сервере, пока тикает таймер до разлочки.
CloudMeteorite — ивент-плагин для Paper 1.19.4, заявлен как дополнение линейки Cloud Ultra Anarchy+ и её фирменной лавкрафтианской тематики: метеорит подан не декорацией, а обломком чего-то древнего, рухнувшего с неба на голову серверу. Плагин сам поднимает шар из угля и магмы в случайной точке карты, запускает вокруг него огненный дождь, запирает лут в четырёх сундуках до истечения таймера — а затем сам убирает за собой, возвращая рельеф как было, вплоть до последнего блока.
Для сервера это готовый повод собрать игроков в одной точке: короткий, шумный ивент с понятной целью — добежать, пережить дождь и успеть открыть сундук. Никакой ручной раздачи наград, ручного восстановления рельефа и слежки за таймером — всё по расписанию, автоматически, и повторяется само. Дальше — по фазам, с цифрами из конфига.
Место падения плагин обычно выбирает сам — случайная точка в радиусе (по умолчанию 200 блоков) от заданного центра карты, всегда на поверхности: высота берётся по самому верхнему блоку в этой точке. Либо администратор задаёт точные координаты командой. Перед постройкой плагин снимает снапшот всего куба 9×9×9 — это 729 блоков (2×радиус+1 при радиусе шара 4) — вокруг центра, чтобы потом вернуть рельеф один в один, блок за блоком, вместе с его ориентацией.
Дальше — сама постройка. Внутри сферы радиусом 4 блока для каждой позиции: примерно в 20% случаев блок вообще не трогается (сквозь метеорит проглядывает то, что было — трава, камень, воздух), из оставшихся — около 5% превращаются в карманы лавы, а всё прочее становится обшивкой: уголь и магма пополам у самой поверхности, а глубже, в «ядре» — смесь угля, магмы и незеррака. В сумме получается не ровный шар, а обгоревшая, повреждённая на вид глыба со следами удара. Если на сервере стоит WorldEdit и в конфиге указан файл схематики — вместо генерации вставится готовая заготовка (отдельной настройкой решается, перезаписывать ли воздухом существующий рельеф); нет файла или плагина — CloudMeteorite тихо строит метеорит сам, без ошибок и без остановки ивента.
Тут же, в 7 блоках от центра (радиус шара + 3) по четырём сторонам света, вырастают 4 сундука — каждый на высоте своей точки, не обязательно вровень с самим метеоритом. Лут в них закладывается сразу, в момент постройки, а не в момент разлочки: сундук уже полон, просто открыть его раньше времени не даёт защита зоны.
В момент удара срабатывает целая пачка эффектов разом. Звук взрыва (по умолчанию — генерик-экспложн) с громкостью 1.5 и высотой тона 0.8 звучит для каждого игрока в мире метеорита — причём проигрывается он «у самого слушателя», так что слышно его одинаково громко всем в этом мире, а не только тем, кто рядом с ударом. На месте падения дополнительно вспыхивают 5 крупных взрывных частиц и рассыпаются 40 частиц лавы — а вот это уже видно только тем, кто физически близко, в обычной дальности прорисовки частиц.
Отдельно стоит сверить с кодом заголовок на экран, потому что название настройки вводит в заблуждение. В конфиге она подписана как «тайтл игрокам в зоне», а внутренний метод в коде называется «для игроков поблизости» — но по факту «☄ МЕТЕОРИТ!» с подсказкой «Беги в центр — там сундуки с лутом!» получает каждый игрок в мире метеорита, вообще без проверки расстояния (0.5 секунды на появление, 3 секунды на экране, 1 секунда на затухание). Боссбар с обратным отсчётом ведёт себя так же — вешается на всех, кто есть в мире, и каждую секунду добирает тех, кто зашёл или переместился в этот мир уже после старта. А сообщения в чат о старте, разлочке и завершении — это вообще бродкаст на весь сервер, во все миры разом, а не только в мир, где упал метеорит.
Нюанс: после разлочки боссбар и голограмма не переключаются на отдельный вид «открыто» сами по себе — боссбар так и показывает «0с», а голограмма на мгновение показывает разлоченный текст и тут же перезаписывается обратно тем же обратным отсчётом, замершим на нуле. Реальный статус в этот момент надёжнее смотреть через /meteorite info или по чат-сообщению о разлочке.
Одновременно с ударом начинается дождь: над площадкой 20×20 блоков вокруг метеорита, с высоты 30–50 блоков над рельефом, один за другим спавнятся огненные шары — новый каждые 30 тиков, то есть примерно раз в полторы секунды, и падают почти строго вниз с едва заметным случайным сносом. Блоков они не трогают: не поджигают, не выбивают воронок — это подавлено на уровне самой сущности, а взрыв дополнительно чистится приват-защитой. Весь урон достаётся только живым существам в 3 блоках от точки падения, и это не только игроки: попавший под руку зомби или чья-то корова огребут те же 4.0 урона — это 2 сердца, если считать по конвенции конфига, где 1.0 = половина сердца. Игрок с правом meteorite.bypass от этого урона полностью защищён.
При каждом падении есть независимый шанс 5% выбить бонусный предмет прямо на месте (таблица — ниже). За стандартные 15 минут дождя набегает около 600 шаров — то есть в среднем ожидаемо около 30 бонусных дропов за один ивент, ещё до того, как кто-то дотронется до сундука. Пока шар летит — за ним тянется шлейф из частиц пламени и дыма, это можно выключить в конфиге.
С момента удара и до самой уборки вокруг метеорита действует приват-регион — и хотя в конфиге он подписан как «куб», по факту это не совсем куб. При настройке по умолчанию (region.size: 10) регион уходит на 5 блоков от центра в каждую сторону по горизонтали — 11×11 блоков в плане, а вот вверх он идёт заметно дальше: не 5, а 5 + радиус шара (4) + 2 блока запаса, то есть на 11 блоков вверх от центра при стандартных настройках (итого 17 блоков в высоту) — с расчётом накрыть с запасом и сам шар, и голограмму над ним. Вниз регион уходит только на те же 5 блоков.
Внутри этого объёма игрокам без meteorite.bypass запрещено практически всё: нельзя ломать и ставить блоки, нельзя взаимодействовать вообще ни с одним блоком — не только с сундуками, а с любой дверью, кнопкой, печкой; не работают телепорт хорус-плодом и жемчуг Энда, а сундуки не открыть раньше разлочки. Взрыв внутри региона — хоть от собственных огненных шаров, хоть от случайного крипера или чужого тротила — блоков не портит, хотя сущности при этом урон получить всё ещё могут. Право meteorite.bypass снимает все эти ограничения разом, включая блокировку сундуков: с ним можно заглянуть внутрь и до официальной разлочки.
Полный цикл одного ивента — это фиксированная последовательность фаз:
chest.open-after-minutes) — дождь останавливается, сундуки разлочены, чат оповещёнcleanup.after-unlock-minutes = 5) — структура и сундуки исчезают, регион снят, рельеф восстановленevent.interval-minutes) — авто-таймер пробует запустить новый ивент самВ конфиге отдельно есть параметр fireball.duration-minutes с комментарием «совпадает с таймером открытия сундуков» — но по коду он нигде не читается: реальную длительность дождя целиком определяет chest.open-after-minutes, и менять для этого нужно именно его. Сам авто-таймер устроен просто: он тикает по фиксированному расписанию от момента старта сервера, не пересчитывая интервал от конца предыдущего ивента, и если на очередном тике ивент почему-то ещё активен — просто пропускает попытку и вернётся на следующем.
В каждом из четырёх сундуков — случайный набор из общей лут-таблицы: заполняются 12 из 27 ячеек (число настраивается), позиции внутри сундука перемешиваются случайно, а сами предметы выбираются независимо друг от друга — то есть один и тот же предмет вполне может выпасть в один сундук дважды. Вес определяет, как часто запись выпадает относительно остальных; в столбце «Шанс» ниже — доля от суммарного веса таблицы (115).
| Предмет | Вес | Шанс | Количество |
|---|---|---|---|
| Железный слиток | 30 | 26% | 3–16 |
| Бутылка опыта | 25 | 22% | 4–16 |
| Золотой слиток | 20 | 17% | 2–8 |
| Изумруд | 15 | 13% | 1–5 |
| Алмаз | 10 | 9% | 1–3 |
| Золотое яблоко | 8 | 7% | 1–2 |
| Незеритовый лом | 5 | 4% | 1–2 |
| Зачарованное золотое яблоко | 2 | 2% | 1 |
У огненных шаров — своя таблица, компактнее (суммарный вес — 73), и срабатывает она только при том самом 5%-м шансе дропа на каждое падение:
| Предмет | Вес | Шанс | Количество |
|---|---|---|---|
| Уголь | 40 | 55% | 1–4 |
| Железный слиток | 20 | 27% | 1–2 |
| Золотой слиток | 10 | 14% | 1 |
| Алмаз | 3 | 4% | 1 |
Обе таблицы принимают не только предметы, но и записи типа «команда»: вместо материала указывается консольная команда с плейсхолдером %player% — например, чтобы выдать что-то из другой системы поощрений сервера. В сундучной лут-таблице это действительно работает: команда срабатывает один раз — для того, кто первым откроет конкретный сундук, то есть максимум 4 срабатывания за ивент, по одному на сундук, а не по одному на игрока. А в таблице огненных шаров command-запись бессмысленна и всегда молча пропускается: падающему шару просто некого подставить в %player%. В базовом конфиге ни одной активной command-записи нет — только закомментированные примеры для затравки, из коробки оба источника лута выдают исключительно предметы.
CloudMeteorite опирается на два чужих плагина, но не требует ни одного из них — оба идут «мягкой» зависимостью. Найдётся WorldEdit — можно подготовить свою схематику метеорита и вставлять её вместо процедурной генерации, получив уникальную форму глыбы под свой сервер. Найдётся DecentHolograms — над метеоритом повиснет голограмма с текстом из конфига, причём для «заперто» и «открыто» заданы отдельные шаблоны строк с плейсхолдером %time%. Не найдётся ни один из двух — CloudMeteorite тихо переключается на встроенные средства и пишет в лог при запуске, что именно нашёл, а ивент идёт как обычно, без единой ошибки в консоли.
Всё управление — через одну команду /meteorite (работает и русский алиас /метеорит), доступную только тем, у кого есть meteorite.admin.
| Команда | Что делает | Пример |
|---|---|---|
/meteorite start [x z] | Запустить ивент; без координат — случайное место по настройкам, с обоими координатами — точный центр | /meteorite start 500 -300 |
/meteorite stop | Остановить ивент досрочно и сразу всё убрать | /meteorite stop |
/meteorite reload | Перечитать config.yml | /meteorite reload |
/meteorite info | Статус: активен ли ивент, где центр, заперты ли сундуки, идёт ли дождь, сколько до открытия | /метеорит info |
По координатам есть тонкость: нужны сразу оба числа, x и z. Если они не парсятся как числа — команда явно откажет с подсказкой по синтаксису; а если указано только одно число вместо двух — команда молча откатится на случайное место, как будто координаты не задавали вовсе. Попытка запустить уже активный ивент или остановить неактивный вернёт понятную ошибку в чат, а не тишину.
С reload есть менее очевидный момент: команда всегда рапортует об успехе в чат, и сырые значения из config.yml действительно перечитываются сразу. Но обе лут-таблицы и авто-таймер обновляются из кэша только в том случае, если на момент reload ни один ивент не активен — правки лута лучше вносить и перечитывать между ивентами, а не во время них.
stop и естественное завершение — не одно и то же для игроков, хотя итог одинаков. При штатном окончании в чат уходит сообщение о том, что структура растворилась сама; при досрочной остановке — отдельное сообщение об остановке администратором. А вот уборка — сундуки, структура, регион, боссбар, голограмма — в обоих случаях одинаковая и полная.
meteorite.admin — доступ ко всем подкомандам /meteorite (по умолчанию — у операторов)meteorite.bypass — полный иммунитет к зоне ивента: игнорирует приват-защиту (ломать, ставить, взаимодействовать, телепорт), не получает урон от огненного дождя и открывает сундуки в любой момент, даже до официальной разлочки (по умолчанию — у операторов)Место падения стоит держать в уже освоенной, доступной части карты: слишком дальний край — и добежать за 15 минут не успеет никто, а слишком близко к спавну или чьей-то стройке — и на 20 минут кто-то получит у себя во дворе регион с полным запретом на взаимодействие. Для этого и нужны spawn.center-x/z и spawn.radius — разброс можно держать строго в пределах давно обжитой зоны, не трогая фронтир.
Раз тайтл, боссбар и чат-оповещение бьют по всему миру без привязки к дистанции, это готовый инструмент собрать в одной точке даже сильно расползшийся по карте анархи-сервер: пропустить объявление физически невозможно, где бы игрок ни строился в этот момент. Лавкрафтианская подача линейки Cloud Ultra Anarchy+ — обломок чего-то древнего, рухнувший с неба, а не метеор из учебника — ложится в это естественно: сама механика ничего не навязывает, а вот собственные объявления в чате или таблички у спавна можно писать уже под эту тему.
120 минут по умолчанию — ритм, который стоит сверить с фактической посещаемостью: на тихом сервере ивент рискует превратиться в забытое разовое событие, на плотном — в дождь, который толком не заканчивается. И раз всё убирается само, держать ивент на автозапуске надёжнее, чем каждый раз запускать вручную.
Конфиг открыт полностью и сгруппирован по смыслу:
event.auto-enabled, event.interval-minutesspawn.world, spawn.center-x/z, spawn.radiusstructure.radius (размер шара) и schematic.file / schematic.paste-air — альтернатива в виде готовой схематикиregion.sizechest.open-after-minutes, loot-slotsloot и fireball.drop-loot, построчно: материал (или команда), вес, минимум и максимум количестваfireball.zone-size, damage, radius, spawn-interval-ticks, item-drop-chancecleanup.after-unlock-minutesПосле правок — /meteorite reload. Как уже сказано выше, сырые значения подхватываются сразу, а вот лут-таблицы и авто-таймер — только если в этот момент ни один ивент не активен.
CloudMeteorite — не картинка на пять секунд, а законченный цикл: спавн, риск, награда, уборка, и снова тишина до следующего раза. Настроил цифры под ритм своего сервера один раз — и дальше метеорит падает сам, по расписанию, бьёт объявлением по всему миру и не оставляет за собой ни единого сломанного блока.