CloudCommandStaff: Командный посох

Правой кнопкой — и мир вокруг перестаёт быть предсказуемым. Один взмах решает, кто сегодня взлетит в небо, а кто просто ослепнет.

Что это

Командный посох — донат-предмет для Paper 1.19.4 от студии Cloud Delight, внутренний номер в линейке — ТЗ №54 (отсюда и диапазон модели под ресурс-пак: 54xxxx — у Cloud Delight так пронумерована вся серия «Staff»). Внешне это обычная палка со счётчиком зарядов, который виден прямо в описании предмета. Устроен посох как маленькая рулетка: правый клик тратит один заряд и запускает один из десяти заранее собранных наборов команд-эффектов — какой именно, каждый раз решает случай. Игрок не выбирает эффект и не целится заранее — только жмёт и смотрит на результат.

Как это работает

Клик и выбор набора

Срабатывает только основная рука — удар посохом во второй руке не считается и не удваивает эффект; реагируют оба вида ПКМ, по воздуху и по блоку, а сама палка при этом перестаёт вести себя как ванильная. Из всех включённых наборов плагин взвешенным случайным выбором берёт ровно один: у каждого набора свой вес, и чем он больше — тем чаще выпадает именно этот набор. Из коробки все десять весят одинаково, по единице, — значит и шанс на каждый ровно 1 к 10, без фаворитов.

Команды набора летят не от игрока, а от консоли — с правами оператора, в обход собственных прав игрока, — но в его контексте: «ближайший», «все игроки», «случайный» и относительные координаты считаются вокруг кастера, как будто он сам ввёл команду от рута. Если координата завязана на направление взгляда, а не просто на высоту, обёртка дополнительно фиксирует разворот кастера — иначе она считалась бы от направления консоли, то есть в никуда.

Счётчик: lore, actionbar и разбор посоха

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

Опознаётся посох по внутренней метке, а не по названию или материалу — смена облика в конфиге не сломает уже выданные экземпляры, они донашивают прежний материал, новый достаётся только посохам, выданным после правки. У палки по умолчанию нет прочности, поэтому убывающей шкалы на предмете нет — учёт держится в подписи и описании; материал с прочностью добавляет и полоску на самом предмете.

Когда заряды заканчиваются, один экземпляр рассыпается с сообщением в чат. Если в руке была стопка одинаковых посохов — потеряется только один: у остальных свой собственный счётчик, который эта потеря не трогает.

Защита кастера от собственного посоха

«Ближайший игрок» технически включает и самого кастера — расстояние до себя всегда ноль, так что без поправок посох в первую очередь наказывал бы того, кто его держит. Плагин лечит это на лету: перед запуском в каждый селектор, отбирающий игроков («ближайший», «все», «случайный», «любая сущность»), автоматически подставляется минимальная дистанция — по умолчанию 2 блока, и сам кастер выпадает из выборки. Если дистанция уже задана вручную — как в большинстве наборов — поправка её не трогает; если не задана, но есть другие условия отбора, минимальная дистанция просто добавляется к ним. Исключение одно — прямое обращение «сам кастер»: если набор осознанно должен бить по хозяину, поправка его демонстративно не касается. Сам радиус — не заклинание, а обычное число в конфиге: можно сузить, расширить или обнулить вовсе.

10 наборов команд

Ровно десять записей в конфиге, и из коробки у всех одинаковый вес — единица, то есть шанс на любой конкретный набор ровно 1 к 10. У каждого — своя реплика в чат после срабатывания и свой список эффектов; что выпадет — от безобидного дебафа до тротила и Иссушителя.

#Реплика в чатеЧто происходит
1«Всё вокруг ослепло»Слепота на 30 секунд у всего живого в радиусе 100 блоков от кастера — экран гаснет разом у всех вокруг, у игроков и мобов без разбора.
2«Ближайший игрок голодает»Ближайший игрок (2–15 блоков) получает голод такой силы, что сытость обнуляется почти мгновенно и держится так все 60 секунд.
3«Всех подбросило»Левитация на 30 секунд у всего живого в радиусе 100 блоков — толпу разом поднимает в воздух, мобов тоже.
4«Ближайшего подкинуло ввысь»Ближайшего игрока (2–15 блоков) телепортирует строго вверх на 100 блоков от текущей точки — без страховки, а падение с такой высоты в обычных условиях смертельно.
5«Взрыв у ближайшего»Ближайшему (2–15 блоков) дают резист шестого уровня на 5 секунд и тут же кладут под ноги заряженный тротил — разбор риска ниже.
6«Ближайшего телепортнуло»Самый сложный набор из десяти и один из самых рискованных — полный разбор ниже.
7«Орда зомби пробудилась»У каждого игрока в радиусе до 1000 блоков от кастера — практически у всех на сервере разом — материализуется зомби прямо на его точке, без предупреждения.
8«Иссушитель призван на 60 секунд»У случайного (не обязательно ближайшего) игрока в 2–15 блоках появляется Иссушитель; плагин запоминает, кого не было на карте до удара, и снимает именно новых — ровно через 60 секунд.
9«Ближайший усилен и ослаблен разом»Ближайший (2–15 блоков) на 30 секунд получает сопротивление, огнестойкость, поспешность, скорость и регенерацию четвёртого уровня — и тут же слабость того же уровня и той же длительности, ощутимо режущую урон в ближнем бою.
10«Ярость и хаос вокруг»Ближайший (2–15 блоков) получает силу шестого уровня, отравление и слепоту на 15 секунд, а всё живое в более широком радиусе — 20 блоков — на те же 15 секунд ловит медлительность и усталость от добычи.

Что просто щекочет нервы

Наборы 1, 2, 3, 9 и 10 не убивают напрямую — слепота, голод, левитация, смесь бафов и дебафов не выносят игрока в ноль сами по себе. Неприятно, местами обидно (особенно голод или слабость посреди боя), но без летального исхода как такового.

Что может по-настоящему убить

Наборы 4, 7 и 8 — честно, без прикрас, реальная угроза жизни. Бросок на 100 блоков вверх в наборе 4 не сопровождается никакой страховкой от падения: без тотема, элитры или иной защиты обратный полёт вниз для игрока смертелен. Орда из набора 7 материализуется у каждого игрока на сервере внезапно и в упор — для того, кто не в броне и без оружия под рукой, это настоящий бой без предупреждения. А Иссушитель из набора 8, хоть и живёт всего 60 секунд, за это время успевает и закидывать черепами, и наносить приличный урон вблизи — этого более чем достаточно, чтобы убить неподготовленного. В этот же список честно попадает и бросок из набора 6 — с отдельным нюансом, разбор чуть ниже.

Набор 5 — эффектный, но не смертельный

Выглядит страшнее всего: тротил в упор. На деле — почти безопасный трюк. Сопротивление шестого уровня на 5 секунд ставится до тротила, а штатный запал заряженной тротиловой глыбы — около 4 секунд, так что взрыв застаёт жертву ещё под защитой: урона по факту почти нет, зато взрывной волной картинно расшвыривает — сопротивление гасит урон, но не отменяет отдачу. Самый «бутафорский» взрыв из десяти.

Набор 6 — самый замысловатый

Три действия подряд. Сначала ближайшего игрока телепортирует далеко в направлении, куда в этот момент смотрел сам кастер, — точку назначения задаёт взгляд хозяина посоха, а не жертвы, и место приземления — как повезёт: хоть в воду, хоть на камни, хоть в пустоту. Затем вокруг кастера (а не вокруг телепортированного) расчищается воздушный куб 5×5×5 — единственная в десятке зачистка блоков, и именно на ней висит принудительная проверка привата и WorldGuard (подробности в следующем разделе): в защищённой точке зачистка тихо пропускается, телепорт всё равно срабатывает. Третьей командой снова выбирается ближайший к кастеру игрок в 2–15 блоках — и получает плавное падение. Проблема в том, что это, как правило, уже не тот, кого телепортировало: после такого броска жертва оказывается далеко за пределами этого радиуса, страховка достаётся случайному соседу кастера, а сам улетевший падает уже без неё. Несмотря на замысел «телепорт плюс мягкая посадка», по факту это один из самых рискованных наборов десятки, а не самый вежливый.

Веса, реплики и сами команды каждого набора — это конфиг, а не хардкод: не устраивает баланс — правишь текстовый файл, а не пересобираешь плагин.

Забота о чужих постройках: WorldGuard и CloudPrivates

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

Обе интеграции — мягкие зависимости: плагин не тянет за собой ни WorldGuard, ни CloudPrivates, а опознаёт их через отражение классов, если они реально стоят на сервере. Нет плагина — проверка просто не мешает. А если плагин есть, но версия незнакомая и ожидаемые методы не находятся, поведение двух интеграций расходится: CloudPrivates в такой ситуации трактуется консервативно — точка на всякий случай считается приватной, и деструктив блокируется; WorldGuard же, наоборот, просто перестаёт участвовать в проверке и ничего не блокирует. Асимметрия осознанная: лучше один раз перебдеть с чужим приватом, чем недобдеть с регионом, — а о самой несовместимости админ и так увидит предупреждение в консоли при старте.

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

Баланс и подача: как продавать посох

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

  • Вес каждого набора — главный рычаг баланса: поднять шанс безобидных наборов и приглушить взрывные для спокойного сервера, или наоборот — акцент на орде, тротиле и Иссушителе для хардкорного PvP, не трогая остальные девять записей и вид предмета.
  • default-uses — размер порции при выдаче без явного числа: логично держать разный запас под разные донат-пороги, а для разовых наград и ивентов всегда можно передать точное число зарядов прямо в команде выдачи.
  • Материал предмета — вопрос подачи, а не механики: скромная палка без видимой полоски держит интригу, материал с прочностью даёт наглядную убывающую шкалу прямо на предмете. Смена материала в конфиге не трогает уже выданные экземпляры — только те, что будут выданы после правки.
  • Защитные механизмы — список опасных команд, миры-исключения, страховка от удара по себе — снимают с админа необходимость лично разбирать каждую жалобу: посох спроектирован не портить спавн и чужие приваты без ручного контроля.
  • Живая перенастройка. Правки весов и наборов подхватываются командой без перезапуска сервера — баланс можно докручивать прямо во время наблюдения за игроками, по горячим следам первых реакций.

Команды

/cstaff give <игрок> [активации] выдаёт посох онлайн-игроку. Без третьего аргумента число зарядов берётся из default-uses конфига; с явным числом используется оно — например, /cstaff give Виталий выдаст посох с зарядами по умолчанию, а /cstaff give Виталий 25 — ровно с 25 активациями. Если в инвентаре нет места, посох упадёт под ноги игроку, а не потеряется молча. /cstaff reload перечитывает конфиг на лету, без перезапуска сервера. Обе команды понимают табуляцию: после give подсказываются ники игроков онлайн, а на месте числа активаций — типовые варианты. Работают и алиасы /commandstaff, и кириллический /посох.

Права

Всего одно право — commandstaff.admin (по умолчанию есть у операторов). Оно нужно только для выдачи посоха и перезагрузки конфига через /cstaff — без него команда откажет с сообщением об отсутствии прав. На само использование посоха право не требуется вовсе: кому выдали в руки, тот и активирует, вне зависимости от прав в целом.

Настройка

Материал, название, номер модели под ресурс-пак и текст описания с плейсхолдером остатка задаются в конфиге. Опознаётся посох по внутренней метке, а не по материалу или названию, так что смена облика ничего не сломает у уже выданных экземпляров.

  • Число зарядов по умолчанию при выдаче без явного количества.
  • Радиус самозащиты кастера от собственных селекторов — можно сузить, расширить или обнулить.
  • Список «опасных» команд, отдельные переключатели уважения WorldGuard и CloudPrivates, и своя принудительная проверка на уровне конкретного набора.
  • Список миров, где посох не работает вовсе — активация в них не тратится.
  • Все игровые сообщения — от «заряды кончились» и «ни один набор не включён» до подписи-счётчика над хотбаром и текста для заблокированных миров.
  • Сами десять наборов: команды, реплика, вес, включён или нет — переписывается всё; спецполя fill-check и wither-lifetime-seconds добавляются в любой набор просто по факту наличия. В конфиге уже лежит отключённый пример-заготовка одиннадцатого набора с пояснением по каждому полю.

Правки применяются командой /cstaff reload — без перезапуска сервера. Отдельно в конфиге живёт лицензионный блок: онлайн-проверка ключа с грейс-периодом на случай недоступности сервера лицензий; для приватного сервера защита выключается одним флагом.

Десять наборов — это не десять кнопок на выбор. Это десять причин держать руку на посохе и не знать заранее, что будет дальше.