Один крик в чате — и пол-сервера срывается с места: одни несутся туда, где с неба сыплются монеты, другие ищут крышу от кислотного дождя. CloudRainEvents добавляет два готовых погодных ивента — монетный дождь и кислотный дождь с безопасными секторами; оба запускаются одной командой, настраиваются целиком в config.yml — без единой строчки кода — и работают на Paper 1.19.4, без модов и ресурспаков.
Плагин ставит вовлечение на автомат: либо награждает деньгами через Vault, либо гонит игроков с открытых полей под крышу — вместо тихого фарма сервер получает движение. Оба сценария можно дёргать вручную под конкретный ивент, либо повесить на авто-расписание и забыть — дальше сервер шумит сам.
В основе — два сценария, которые умеют переплетаться в один.
Запускать можно вручную — под ивент, конкурс или просто ради шума в чате, — либо доверить авто-расписанию: тогда оба события повторяются сами, без администратора у консоли.
Команда /rain coin поднимает золотой столб частиц над случайной точкой региона либо над заданными координатами и на coin.duration-seconds секунд (по умолчанию 60) открывает денежный кран.
Пока дождь идёт, каждый игрок в радиусе coin.radius (по умолчанию 30 блоков) от центра каждые coin.interval-ticks тиков (по умолчанию 20 — раз в секунду) получает случайную сумму между coin.money-min и coin.money-max (по умолчанию 5–25, округляется до копеек) через экономику Vault. Радиус считается только по горизонтали: заплатит и игрок в шахте под точкой, и игрок на платформе над ней. Игроков в режиме наблюдателя выплаты не касаются. Каждая выплата всплывает в экшн-баре — «+сумма упало с неба».
Дождей может идти сразу несколько: плагин не проверяет, не запущен ли уже другой — ручной /rain coin можно выпустить хоть пять раз подряд в разные точки, плюс отдельные монетные дожди плагин сам поднимает в безопасных секторах кислотного (см. ниже). Каждый — независимый таймер со своей зоной; единственное общее — авто-расписание монетного дождя не запустит новый, пока жив хоть один, свой ручной или секторный.
Плотность золотого ливня задаёт coin.particle-count (по умолчанию 40 частиц за кадр), а сам кадр рисуется каждые 5 тиков — 4 раза в секунду, жёстко в коде, конфигом не меняется. Частицы вылетают в случайной точке внутри того же радиуса и на высоте 9–14 блоков над землёй, отчего и выглядит, будто монеты правда падают с неба, а не бьют из-под ног. Частица по умолчанию — FALLING_DUST (хлопья текстуры блока), можно заменить на END_ROD, TOTEM, CRIT и другие; но у блочных частиц (FALLING_DUST, BLOCK_CRACK, BLOCK_DUST, BLOCK_MARKER) текстура всегда золотого блока — это зашито в коде, другую руду через конфиг не подставить. Неверное имя частицы тихо откатывается на FALLING_DUST, без записи в лог — в отличие от кислотного дождя, который на ту же ошибку ещё и пишет предупреждение (см. далее).
Тумблер coin.weather включает игроку персональный дождь на экране, когда тот входит в зону, — один раз, не мигая каждую секунду, — и снимает при выходе за радиус. Если событие кончилось раньше, чем игрок вышел из зоны, погоду вернут при завершении. На остальных игроков эта картинка не влияет — у каждого своя, локальная.
Монетный дождь платит через любую экономику, подключённую к Vault (он в softdepend, жёсткой зависимости нет). Если Vault не найден или провайдер экономики не зарегистрирован, плагин не падает и не сыплет ошибками: пишет предупреждение один раз при старте и работает дальше как визуальный ивент — частицы и локальная погода остаются, начислений просто не будет. Тонкость: экшн-бар «+сумма упало с неба» показывается в любом случае, цифра настоящая — просто без Vault она нигде не оседает, деньги в кошелёк не попадают. Стоит держать в уме на сервере без экономики, чтобы не объяснять игрокам «а где мои деньги».
Команда /rain acid запускает грозу на весь мир на acid.duration-seconds секунд (по умолчанию 90). Повторно вызвать её поверх уже идущей нельзя — плагин ответит, что дождь уже идёт; сначала /rain stop либо дождаться конца.
Каждые acid.interval-ticks тиков (по умолчанию 20 — раз в секунду; дальше — «цикл урона») под удар попадает любое живое существо под открытым небом — не только игроки, а все LivingEntity: мобы, животные, жители деревень. Плагин щадит только игроков в творческом и наблюдательском режиме — остальных защищает лишь крыша или безопасный сектор. «Открытое небо» — когда над блоком под существом нет ничего выше по столбу до неба; одного блока крыши над головой хватает, чтобы спрятаться.
Режим задаёт acid.mode. damage (по умолчанию) — прямой урон, acid.damage: 2 — ровно одно целое сердце за цикл по игровой шкале (1.0 = полсердца). poison — вместо урона накладывает «Отравление» длительностью acid.poison-duration (по умолчанию 100 тиков, 5 секунд) и усилением acid.poison-amplifier (0 = Poison I). Пока существо под открытым небом, эффект перенакладывается на каждом цикле и не даёт себе истечь; добежавший до укрытия ещё дотерпит остаток последнего заряда — несколько секунд яда достанутся уже в безопасности. Справочно, из ванильной механики Minecraft: «Отравление» не действует на нежить (зомби, скелетов, иссушителей) — если она тоже должна страдать наравне со всеми, надёжнее выбрать damage, а не poison.
Отдельным тумблером включается порча посевов — acid.crops-toggle (по умолчанию выключено): на каждом цикле урона плагин с шансом acid.crop-chance (по умолчанию 0,35) на игрока под открытым небом пытается потоптать до 4 грядок за раз — в квадрате 17×17 вокруг него (±8 блоков), каждая из 4 попыток берёт свою случайную точку и ищет блок с состоянием роста в колонне (верхний блок земли, либо на блок выше или ниже). Мобы посевы не топчут, только игроки под кислотой. Для тихого сервера тумблер лучше не трогать; для харкорного выживания под открытым небом — самое то.
Подача под стать содержанию. При старте — заголовок «☣ КИСЛОТНЫЙ ДОЖДЬ» на весь экран (тайминги появления/показа/исчезновения — 10, 60 и 20 тиков, настраиваются отдельно) и зловещий звук (по умолчанию AMBIENT_CAVE); оба видят и слышат только те, кто был в мире в момент старта — присоединившийся позже титр и звук не застанет. Сверху весь дождь висит зелёный BossBar с обратным отсчётом, обновляется раз в секунду, сам подхватывает зашедших и убирает вышедших — в отличие от титра, его увидят все, кто в мире, в любой момент.
Над каждым игроком по всему миру идёт персональный зелёный «дождь» из частиц — по умолчанию 40 за кадр в радиусе 12 блоков, кадр каждые 10 тиков (дважды в секунду); тип, плотность, радиус и частота настраиваются в acid.visuals. По умолчанию частица — VILLAGER_HAPPY (зелёные звёздочки), можно заменить на DUST — цветная пыль зелёного оттенка, покрупнее. При попадании — вспышка частиц на жертве и, только у пострадавшего игрока, звук шипения (по умолчанию BLOCK_LAVA_EXTINGUISH) — без спама на весь сервер.
Границы секторов красятся сами: зелёными искрами, если внутри идёт монетный дождь, частицами компоста, если сектор просто безопасный, — по цвету сразу видно, куда бежать в первую очередь. В центре каждого сектора — зелёный столб-маркер от земли ввысь, заметный издалека, независимо от типа сектора. Разметка обновляется каждые 15 тиков и от acid.visuals.particle-type (которым красится дождь над игроками) не зависит — оба цвета зашиты в коде. Настоящее зелёное небо без ресурспака движок не даёт, а грозу с молниями (acid.visuals.thunder) можно включить отдельно — по умолчанию выключена, идёт просто пасмурный шторм.
Пока идёт кислотный дождь, по региону вокруг центра карты (region.center-x/center-z, region.radius) раскидано от 0 до 10 квадратных безопасных секторов — число задаёт acid.sector-count (по умолчанию 6, потолок в коде — 10; можно поставить и 0 — тогда укрыться негде, кроме самодельной крыши), сторона квадрата — acid.sector-size (по умолчанию 50 блоков). Внутри урона и отравления нет вообще, и это не площадка, а колонна: защита работает на любой высоте — хоть в подвале, хоть на башне, лишь бы X и Z попадали в квадрат.
Расположение секторов не фиксировано — каждый /rain acid раскидывает их заново, случайным углом и расстоянием в пределах region.radius. Обжитого «вечного бункера» не будет: карту укрытий читаешь заново при каждом запуске, если включён acid.announce-sectors (по умолчанию да) — тогда координаты и размер секторов печатаются в чат сразу при старте.
В части секторов (acid.safe-coin-count, по умолчанию 2 из всех) плагин сам поднимает монетный дождь — без отдельного объявления, только пометкой «[+ монетный дождь!]» в списке. Стоит учитывать нестыковку длительностей по умолчанию: монетный дождь в укрытии живёт свои стандартные 60 секунд (coin.duration-seconds), а кислота — 90 (acid.duration-seconds). Если не подправить, последние полминуты шторма сектор остаётся безопасным, но уже бесплатным — деньги перестают капать раньше, чем кончается угроза снаружи.
schedule.coin-every-minutes и schedule.acid-every-minutes — независимые таймеры в минутах, 0 отключает автозапуск. Ни один не полезет поверх уже идущего события того же типа: акидный молча пропускает тик, если кислотный дождь уже льёт, а монетный — если активен хоть один монетный дождь где угодно, включая те, что подняты внутри секторов кислотного. Если сейчас идёт кислотный дождь с двумя денежными укрытиями внутри, плановый монетный дождь в это время вообще не выстрелит — подождёт следующего тика.
/rain reload перечитывает config.yml и пересобирает оба таймера с нуля — но уже запущенный дождь донашивает старые настройки до конца, новые подхватят только следующие события. Таймеры считаются в тиках (минуты × 60 × 20), так что смена расписания на лету не сбивает отсчёт — он просто пересоздаётся заново от текущего момента.
Голая механика — только конструктор; вот несколько готовых сборок под конфиг.
acid.mode: damage, acid.sector-count занизить до 2–3, acid.sector-size — до 20–25: тесные редкие секторы, в паре из них деньги. Толкает игроков лбами за место под крышей.acid.sector-count: 0: безопасных секторов нет вовсе, спасает только своя крыша.schedule.acid-every-minutes: 0 (кислоту не трогаем), включаем только schedule.coin-every-minutes: риска ноль, сервер сам сыплет деньгами раз в N минут./rain coin world X Z точными координатами: деньги ровно на месте конкурса построек или у сцены, а не где попало по региону.acid.mode: poison вместо damage: не мгновенная потеря здоровья на голом месте, а нарастающая угроза, от которой есть пара секунд, чтобы добежать.acid.crops-toggle: кислотный дождь начинает бить не только по игрокам, но и по фермам под открытым небом, и теплица превращается из декора в необходимость.| Команда | Что делает |
|---|---|
/rain coin [world] [x z] | Монетный дождь: без аргументов — случайная точка региона, можно указать мир и координаты |
/rain acid | Кислотный дождь и безопасные секторы в основном мире |
/rain stop | Остановить все дожди разом, снять шторм |
/rain reload | Перечитать config.yml на лету, без рестарта сервера |
Примеры вызова:
/rain coin — монетный дождь в случайной точке основного мира./rain coin world — то же самое, но явно в мире world./rain coin world 120 -340 — точно над координатами 120, -340 в мире world./rain acid — кислотный дождь на весь основной мир; мир этой команде не задать, берётся первый из worlds./rain stop — гасит разом кислоту и все монетные дожди, снимает шторм./rain reload — подтягивает изменения config.yml без рестарта сервера.Работает и по-русски: /дождь — алиас /rain, один в один со всеми подкомандами.
Всё висит на одном узле — rain.admin (по умолчанию только у op), без разделения по подкомандам: у кого есть доступ к «дождю», тот может и деньги посыпать, и кислоту устроить, и всё остановить разом. Выдайте узел модераторам или ивент-мастерам любым permissions-плагином — а вот точечно ограничить доступ только до coin или только до acid средствами самого плагина не получится.
Все числа, частицы, звуки и тексты живут в одном config.yml — не зашито в коде почти ничего, кроме пары констант вроде частоты кадра монетных частиц и обводки секторов (см. выше). Список миров — worlds, первый в списке всегда основной: в нём проходят /rain acid, авто-расписание и случайные точки монетного дождя. region.center-x/center-z и region.radius (по умолчанию 300 блоков) задают большой круг, внутри которого выбираются и точки монетного дождя, и позиции безопасных секторов — не путать ни с coin.radius (радиус выплат вокруг уже выбранной точки), ни с acid.sector-size (размер самого сектора).
Все тексты — префикс, титры кислотного дождя, строки секторов, экшн-бар — переопределяются в блоке messages с цветовыми кодами &; текст BossBar задаётся отдельно, в acid.visuals.bossbar-title, куда на лету подставляется обратный отсчёт. Неверное имя звука просто выключает эффект (как и осознанное значение NONE), а неверное имя частицы откатывается на значение по умолчанию — в кислотном дожде ещё с предупреждением в лог, в монетном — молча.
Два погодных ивента на одной команде: один сталкивает игроков за деньги, другой — за крышу над головой. Секторы каждый раз новые, укрытие не вечное, а деньги в нём — тем более. Всё, что видно на экране и что происходит по расписанию, живёт в одном config.yml.