CloudRainEvents — дождь, который двигает весь сервер

Один крик в чате — и пол-сервера срывается с места: одни несутся туда, где с неба сыплются монеты, другие ищут крышу от кислотного дождя. CloudRainEvents добавляет два готовых погодных ивента — монетный дождь и кислотный дождь с безопасными секторами; оба запускаются одной командой, настраиваются целиком в config.yml — без единой строчки кода — и работают на Paper 1.19.4, без модов и ресурспаков.

Плагин ставит вовлечение на автомат: либо награждает деньгами через Vault, либо гонит игроков с открытых полей под крышу — вместо тихого фарма сервер получает движение. Оба сценария можно дёргать вручную под конкретный ивент, либо повесить на авто-расписание и забыть — дальше сервер шумит сам.

Что это: два ивента дождя

В основе — два сценария, которые умеют переплетаться в один.

  • Монетный дождь (№38) — над зоной поднимается столб золотых частиц, а игроки в радиусе периодически получают деньги через Vault.
  • Кислотный дождь (№38.1) — по всему миру идёт гроза, все живые существа под открытым небом получают урон или отравление, но на карте появляются безопасные секторы — и в части из них уже запущен тот самый монетный дождь.

Запускать можно вручную — под ивент, конкурс или просто ради шума в чате, — либо доверить авто-расписанию: тогда оба события повторяются сами, без администратора у консоли.

Монетный дождь: деньги с неба

Команда /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

Монетный дождь платит через любую экономику, подключённую к 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.