«Трофейная охота начнётся через 300 сек! Пиши /hunt join — записаться.» — и весь сервер на ближайшие полчаса делится на два лагеря: тех, у кого золотой трофей на голове, и тех, кто идёт его снимать.
Хороший PvP-ивент не нужно объяснять — его чувствуют. Рёв эндер-дракона на весь сервер, обратный отсчёт, и вот уже двое-трое игроков стоят с горящей целью над головой, а остальной сервер бросает стройки и бежит в лес. CloudTrophyHunt — именно такой ивент: простые правила, живой азарт и полная настройка под баланс вашего сервера. Плагин собран под Paper 1.19.4, студия Cloud Delight.
«Трофейная охота» — раунд открытой охоты на нескольких игроков. Админ (или расписание) запускает ивент, часть записавшихся становится «Счастливчиками» — им на голову садится предмет-трофей, который нельзя снять руками. Пока трофей на голове, он капает золото и опыт владельцу, а весь сервер точно знает, за кем бежать: координаты счастливчиков доступны по одной команде. Убил счастливчика — трофей и его доход переходят тебе. Формат закрывает то, чего не хватает многим ванильным серверам: у PvP появляется повод собраться, у экономики — управляемый источник золота, а у игроков — общая история на весь вечер вместо тихого фарма по углам.
Под капотом — простая машина состояний: ожидание (IDLE) → запись участников (SIGNUP) → охота (RUNNING) → снова ожидание. Каждый переход контролирует плагин сам — зависнуть между состояниями ивент не может даже при рестарте сервера или отключении плагина на середине охоты.
Админ с правом hunt.admin пишет /hunt start — но только если ивент сейчас в покое: запустить поверх уже идущего не выйдет, плагин просто ответит, что охота уже идёт. Открывается запись: по серверу разлетаются сразу два объявления (о старте охоты и приглашение записаться), плюс рёв эндер-дракона слышен всем онлайн-игрокам разом — тихим этот момент не бывает. Окно записи по умолчанию 300 секунд (5 минут), в конфиге можно поставить и меньше, но плагин никогда не даст меньше 5 секунд. Ровно на середине окна прилетает напоминание с оставшимся временем — если, конечно, половина окна не короче 3 секунд: совсем короткие охоты проходят вообще без напоминания. Каждый желающий пишет /hunt join. Присоединиться можно и позже, пока охота уже идёт полным ходом: такие игроки не станут счастливчиками сразу, но тут же попадают в пул на замену, если трофей освободится. Если к закрытию записи не набралось ни одного участника, охота тихо отменяется отдельным сообщением, а плагин возвращается в режим ожидания — авто-расписание при этом не сбивается и сработает в своё время как ни в чём не бывало.
Когда запись закрывается, из записавшихся (кто ещё онлайн) случайно выбирается от lucky-min до lucky-max счастливчиков — по умолчанию от 2 до 3, число каждый раз новое, не всегда максимум. Если участников набралось меньше, чем нужно, счастливчиками станут все, кто есть. Если в конфиге по ошибке выставить максимум меньше минимума, плагин не упадёт с ошибкой — молча использует минимум как потолок. Каждого выбранного телепортирует в новую точку, на голову садится трофей, а на экране крупно всплывает «ТЫ СЧАСТЛИВЧИК» с подсказкой бежать от охотников — под праздничный звук. Прежний шлем сохраняется ровно один раз, до того как наденется трофей, — и с важной оговоркой: если на голове уже висел осиротевший трофей с прошлого раза, он не сохранится как «шлем», иначе при окончании охоты игрок получил бы обратно трофей вместо настоящей брони.
Плагин узнаёт трофей по служебной метке в данных предмета, а не по имени, — переименовать вещь и обмануть систему не выйдет. Снять его нельзя ни обычным кликом, ни свапом через цифру или офф-хенд, наведённым на слот шлема, ни перетаскиванием курсором. Выбросить тоже нельзя: активный трофей просто возвращается с сообщением об отказе, а вот случайно осиротевший трофей у игрока, который счастливчиком уже не считается, при выбросе тихо удаляется — чтобы такие обломки не копились на земле. Если предмет всё же пропал со слота шлема (закрытие инвентаря, конфликт с другим плагином, что угодно) — отдельная проверка раз в секунду, пока идёт охота, возвращает трофей на голову автоматически. Снять его получится только одним способом — умереть.
Каждое ограничение включается и выключается в конфиге отдельно, и все они игнорируются игроками с правом hunt.admin — иначе админ не смог бы даже остановить собственный ивент.
block-commands счастливчику доступны только команды из белого списка (по умолчанию единственная — /hunt leave). Проверка идёт по префиксу, так что разрешение на /hunt leave заодно пропускает и любые её варианты с аргументами следом.Убить счастливчика может кто угодно, в любой точке карты. На землю трофей не падает — он исключается из дропа целиком и уходит прямиком победителю вместе со статусом; сам убийца никуда не телепортируется, он и так стоит на месте боя. Настоящий шлем жертвы, отложенный в момент выбора, не теряется: если у сервера включён keepInventory, он возвращается прямо на голову, потому что инвентарь после смерти и так остаётся на месте; если выключён — шлем добавляется в список дропа и падает вместе с остальными вещами, а не исчезает бесследно. Если убийца ещё не был счастливчиком, он получает трофей без телепорта — заслужил на месте. Если убийца уже носил свой трофей, второй ему не выдаётся — число активных счастливчиков просто уменьшается на одного, и охота с каждой такой смертью естественно стягивается к финалу. Если счастливчик погиб без убийцы — упал в лаву, разбился, покончил с собой — трофей никому не переходит, вместо этого плагин наугад выбирает замену из оставшихся участников, кто ещё не носит трофей.
Через total-minutes (по умолчанию 30, минимум 1) ивент завершается сам: у всех онлайн-счастливчиков снимается трофей и возвращается прежний шлем, сервер получает финальное объявление под отдельный звук, состояние сбрасывается в ожидание. Команда /hunt stop запускает ровно ту же последовательность досрочно, а не просто обрывает охоту молча.
Если счастливчик выходит с сервера, ему успевают вернуть настоящий шлем и снять статус до того, как соединение разорвётся, — изменения корректно сохранятся в файле игрока. Он выбывает из участников, сервер узнаёт об этом отдельным сообщением, а замена подбирается тут же, без пауз. При повторном заходе логика симметричная: если по данным плагина игрок всё ещё счастливчик, но трофея на голове почему-то нет — он наденется заново; если игрок счастливчиком не считается, но зашёл с трофеем на голове (осиротевшим после рестарта или сбоя) — трофей снимается. Выключение плагина или остановка сервера работают по той же страховке: все трофеи у онлайн-игроков корректно снимаются перед выгрузкой, зависших золотых тыкв на головах не остаётся. Отдельный крайний случай для админов: если последний счастливчик погиб без убийцы, а свободных участников на замену не осталось, охота не обрывается аварийно — она просто продолжает идти с нулём активных счастливчиков до истечения таймера или ручной остановки.
Пока трофей на голове, счастливчик стабильно зарабатывает — это и есть приманка для тех, кто идёт записываться.
| Параметр | Значение по умолчанию |
|---|---|
| Интервал начисления | каждые 5 секунд |
| Золото за тик (через Vault) | 50 |
| Опыт за тик | 10 XP |
Начисление видно сразу над хотбаром (action bar) — золото и опыт отдельной строкой на каждый тик. Vault — мягкая зависимость: нет Vault или эконом-плагина под ним — золото просто не начисляется (в строке над хотбаром покажет ноль), а опыт всё равно идёт своим чередом. Число золота в сообщении показывается целым, если сумма без остатка (50, а не 50.0), и с дробной частью, если она задана в конфиге. Выплата идёт только если трофей в этот момент действительно на голове — отдельная подстраховка на случай доли секунды рассинхрона. Проверка, что трофей на месте, и собственно начисление золота с опытом — два разных таймера: первая тикает раз в секунду всегда, вторая — по своему интервалу из конфига.
lucky-min и lucky-max в единицу — получится напряжённая охота на одного. На крупном — 2-3 и больше, чтобы одновременно шло несколько драк, а не одна свалка вокруг единственной цели./hunt leaders под рукой, чтобы озвучивать зрителям, где сейчас горячо.rtp-command подключает выбор счастливчика и возврат из региона к вашей системе домов, спавнов или арен вместо чистого рандома — удобно, если хотите держать драки в заданной PvP-зоне, а не по всей карте./hunt reload безопасно применять прямо во время идущей охоты — текущий раунд не прерывается, а конфиг (тексты, ограничения, расписание) обновляется без рестарта и без вывода игроков из игры.| Команда | Что делает | Доступ |
|---|---|---|
/hunt join | записаться в участники | hunt.use |
/hunt leave | покинуть участие / сбросить трофей | hunt.use |
/hunt leaders | координаты всех счастливчиков | hunt.use |
/hunt start | запустить ивент | hunt.admin |
/hunt stop | остановить ивент | hunt.admin |
/hunt reload | перезагрузить конфиг без рестарта | hunt.admin |
Те же команды доступны через алиасы /trophyhunt и /охота, с автодополнением по табу. Команда без аргументов (или с неизвестным аргументом) не молчит, а показывает список доступных действий и живой статус: текущее состояние ивента и число записавшихся — админские пункты в этом списке видны только тем, у кого есть право на них.
| Право | Описание | По умолчанию |
|---|---|---|
hunt.admin | управление ивентом: start/stop/reload | op |
hunt.use | участие: join/leave/leaders | true (все) |
Игроков с hunt.admin ограничения счастливчика не касаются — командный лимит и прочие запреты на них не действуют, чтобы админ всегда мог управлять ивентом изнутри, даже будучи выбранным счастливчиком.
trophy. Без ресурс-пака предмет выглядит обычной тыквой, и это нормально.lucky-min/lucky-max), время записи (signup-seconds) и общая длительность охоты (total-minutes) — в разделе event.income, дробные значения золота допустимы.restrictions.rtp-command; запасной случайный телепорт с заданным миром, центром и радиусом — rtp-fallback, если своя команда пуста или не сработала.schedule; по умолчанию 0 — выключено, ивент стартует только вручную командой.messages.license — онлайн-проверка ключа при каждом включении плагина, с запасом в grace-hours (по умолчанию 24 часа) на случай, если сервер лицензий недоступен: тогда плагин работает по последнему успешному кэшу, а не отключается сразу. Для своего сервера достаточно поставить enabled: false — проверка отключится полностью./hunt reload — без рестарта сервера и без остановки уже идущей охоты.Трофей на голове не спрячешь и не снимешь — можно только отобрать. Дальше сервер разбирается сам.