CloudSpheres — система сфер: корпус, камни эффектов и Заклинатель

Один предмет в левой руке — и вместо разового баффа у игрока постоянно работающий билд: сила, скорость и воскрешение разом на одном артефакте. CloudSpheres — не зачарование поверх ванильных лимитов, а отдельная система прокачки: дроп с мобов и боссов, крафт на верстаке, NPC-кузница заклинаний. Внутри — 8 эффектов со своей шкалой размеров, 11 уникальных камней-статусов и 5 ступеней качества сферы, которые всё это ограничивают. Плагин самописный, под Paper 1.19.4, с защитой от дюпа, гибким конфигом и мягкой интеграцией с MythicMobs.

Что это

В центре системы — сфера: предмет на базе heart_of_the_sea, на котором копится несколько эффектов и статусов разом. Не расходник и не разовое зелье — сфера работает постоянно, пока лежит в офф-хенде, а её сила растёт по мере того, как игрок находит камни, повышает качество и заказывает у Заклинателя новые заклинания. Билд игрок собирает сам, камень за камнем.

У предмета два состояния. Пустой корпус — обычный стакающийся предмет. Как только на сферу наложен первый эффект или статус, она получает уникальный серийник и перестаёт быть «просто вещью» — фоновый антидюп раз в 30 секунд сканирует инвентари онлайн-игроков и удаляет дубли по серийнику, а лишний экземпляр в стаке готовой сферы срезает до одной штуки.

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

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

  • Скрафтить корпус сферы на верстаке: 8 золотых блоков по кругу и звезда незера в центре.
  • Добыть камни эффектов и осколки уникальных камней — падают с мобов и боссов с небольшим шансом.
  • Прийти к NPC «Заклинатель» и собрать схему 3×3: в центр — сфера, по кольцу — 8 одинаковых камней.

Рецепт ванильный, работает на любом верстаке; флагом в конфиге его можно отключить целиком, если корпус должен доставаться только дропом или наградой.

Эффекты

Размер камня — это и есть уровень эффекта, и не у всех восьми типов есть все пять размеров. Восемь одинаковых камней у Заклинателя объединяются в один камень размером больше — до потолка типа. Цвет камня всегда совпадает с эффектом.

ЭффектЧто даётРазмеры
СилаУсиление (Strength)1–5
СкоростьСкорость передвижения1–5
СпешкаСпешка (Haste)1–5
ЖивучестьПрилив здоровья (Health Boost)1–5
ЗащитаСопротивление урону1–3
Огонь1 ур. — огнестойкость; 2 ур. — плюс атаки поджигают цель1–2
Ихтиандр1 ур. — водное дыхание; 2 ур. — плюс грация дельфина1–2
НасыщениеНасыщение (Saturation)1

Сила

Классическое Усиление: урон в ближнем бою растёт от I до V. Размер камня — прямой амплификатор зелья, без скрытых множителей.

Скорость

Скорость передвижения, пять размеров от I до V — самый прямолинейный эффект из восьми, без побочных механик.

Спешка

Спешка добычи, пять уровней. Хорошо ложится в связку с Силой на одну сферу для фарма, если качество позволяет держать оба разом.

Живучесть

Прилив здоровья — сердца сверх обычных десяти, пять размеров. Не лечит текущее здоровье, а поднимает потолок максимума, пока сфера в руке.

Защита

Сопротивление урону на уровень камня, но шкала короче остальных — только три размера.

Огонь

Размер здесь не сила эффекта, а переключатель механики: амплификатор всегда нулевой. 1 уровень — огнестойкость. 2 уровень добавляет боевую надстройку: удар владельца поджигает цель на 100 тиков по умолчанию (5 секунд, значение меняется в конфиге). Максимум — 2 размера.

Ихтиандр

Тоже без амплификатора. 1 уровень — водное дыхание, 2 уровень добавляет «грацию дельфина» — ускоренное плавание. Максимум 2 размера.

Насыщение

Насыщение — шкала из одного размера. Камень либо есть на сфере, либо нет: объединять 8 в 1 здесь просто некуда.

Уникальные камни-статусы

Уникальный камень собирается из 8 одинаковых осколков и накладывается на сферу целиком, без размеров и уровней — хватает одного, чтобы статус заработал.

КаменьСвойство
МягкостиПолностью убирает урон от падения
РадиусаЭффекты сферы передаются союзникам в радиусе 3 блоков
ЯростиЗдоровье владельца ниже 50% — все эффекты сферы усиливаются на 1 уровень
ВоскрешенияОдноразовый: при смертельном уроне восстанавливает 30% здоровья, как тотем, и рассыпается
ЭндаЭндер-жемчуг не тратится при броске
ХаризмыВраждебные мобы не атакуют владельца — статус спадает, как только владелец сам ударит моба
ВампиризмаУбийство другого игрока восстанавливает 100% здоровья
Повелителя ТьмыЗдоровье ниже 25% — призывает бессмертного союзного иссушителя (не портит блоки), который исчезает при здоровье выше 30%; сам владелец невосприимчив к иссушению
ИммунитетаСнимает слепоту, тошноту, замедление, отравление, иссушение, усталость и голод
КазниУ противника осталось не больше 10% здоровья — мгновенная смерть, правило действует и между игроками
СтаиПризывает союзную стаю волков (по умолчанию трёх), пока сфера в левой руке — волки защищают владельца и атакуют врагов

Камень мягкости

Полностью и безусловно отменяет урон от падения — событие урона гасится на лету. Ни порога высоты, ни шанса.

Камень радиуса

Раз в такт пересчёта (по умолчанию раз в секунду) сфера раздаёт свои эффекты — не особые камни, именно восемь обычных — всем союзникам-игрокам в радиусе 3 блоков по умолчанию; отдельный флаг умеет ограничить раздачу игроками той же scoreboard-команды.

Камень ярости

Здоровье владельца ниже порога (по умолчанию 0,5, то есть 50%) — все текущие эффекты сферы получают бонус к уровню, по умолчанию +1. Полностью динамично: здоровье поднялось выше половины — бонус снят сам на следующем пересчёте.

Камень воскрешения

Одноразовый тотем в кармане. Смертельный удар (кроме падения в Пустоту — иначе получится петля смертей) отменяется, здоровье восстанавливается до 30% от максимума по умолчанию (не меньше 1 хп), снимаются огонь и негативные Иссушение/Отравление, играют частицы и звук тотема — а камень тут же рассыпается и пропадает со сферы. Одна зарядка, дальше нужен новый.

Камень Энда

Бросок эндер-жемчуга не тратит его — жемчуг остаётся в инвентаре, пока сфера в левой руке. Сопровождается частицами портала и звуком эндер-сундука.

Камень харизмы

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

Камень вампиризма

Срабатывает только на честном фраге игрока: убил другого игрока — здоровье восстанавливается до 100% от максимума по умолчанию. На мобов не реагирует.

Камень повелителя Тьмы

Здоровье владельца ниже 25% по умолчанию — рядом появляется бессмертный союзный Иссушитель без гравитации и боссбар-полоски, висит в 3 блоках над головой и каждые 2 тика перенаводится на ближайшую вражескую сущность в 25 блоках, игнорируя других иссушителей и самого Заклинателя. Пропадает — с дымом и звуком смерти — когда здоровье поднимется выше 30% по умолчанию, либо камень снят, либо владелец вышел или умер; разрыв 25/30% нужен против мигания призыв-исчезновение на границе. Владелец полностью защищён от «своего» иссушителя, взрывы черепов не портят блоки.

Камень иммунитета

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

Камень казни

После удара, если у цели осталось не больше 10% здоровья по умолчанию, на следующий такт идёт контрольная проверка — вдруг подлечилась — и если порог всё ещё не превышен, здоровье обнуляется мгновенно. Отдельный флаг решает, действует ли казнь на игроков — по умолчанию да, то есть и в PvP.

Камень стаи

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

Размер и качество сферы

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

КачествоЭффектовОсобых
Обычная10
Необычная21
Редкая22
Эпическая32
Легендарная33

Поднимается качество у Заклинателя: сфера в центр, «Ядро качества» в кольцо — лимит слотов растёт на ступень, а наложенные эффекты и статусы остаются на месте. Ядро (звезда фейерверка) падает с мобов отдельной, ещё более скупой строкой шанса либо выдаётся командой напрямую. Цвет имени сферы меняется вместе с качеством — от серого «Обычная» до золотого «Легендарная». Админ может сразу заспавнить корпус нужного качества командой выдачи, минуя всю цепочку апгрейдов.

НПС «Заклинатель»

Заклинатель — NPC на базе иллагера-заклинателя (Evoker): без ИИ, неуязвимый, без коллизии (можно пройти сквозь него), со свечением и кружащей магической аурой из частиц. Стоит там, где поставит админ, персистентен и не пропадает по дальности — но сделан на базе ванильного враждебного моба, поэтому на сложности Peaceful пропадает вместе со всеми монстрами; нужна сложность Easy и выше. Мобы не выбирают его целью, урон по нему всегда отменяется. Позиция ставится и убирается одной командой на месте игрока, хранится в конфиге и переживает перезапуск сервера.

Правый клик открывает GUI-схему: сундук на 54 ячейки, где под камни отведено девять слотов — центр и кольцо из восьми вокруг него, всё остальное решётка из стеклянных панелей плюс табличка с правилами, кнопка «ЗАКЛИНАТЬ» и слот живого превью. Превью обновляется на лету при каждом изменении сетки и показывает призрачную копию будущего результата или барьер с причиной отказа («уже есть эффект», «лимит эффектов», «уже максимальный размер») — ещё до нажатия кнопки. Раскладывать и забирать камни можно только по одному: шифт-клик, двойной клик и перенос числовыми клавишами заблокированы нарочно, а закрытие окна возвращает игроку всё, что осталось в центре и кольце.

Четыре расклада схемы

Кнопка «Заклинать» сама распознаёт операцию по содержимому центра и кольца:

ЦентрКольцо (8 слотов)Результат
Сфера8 одинаковых камней эффекта (тот же тип и размер)Наложить эффект нужного размера
СфераРовно 1 уникальный каменьНаложить статус
СфераРовно 1 «Ядро качества»Поднять качество на ступень
Пусто8 одинаковых камней эффекта или 8 одинаковых осколковОбъединить в камень размером выше / собрать уникальный камень

Каждый расклад проверяется на месте: нельзя наложить эффект, который на сфере уже есть, — только другой тип. Нельзя превысить лимит слотов текущего качества — Заклинатель называет цифру лимита прямо в сообщении об отказе. Нельзя объединить камень, уже уткнувшийся в потолок размера своего типа. Наложение эффекта или статуса подтверждается фиолетовым сообщением, звуком зачарования и частицами зачарования с тотемом; объединение и подъём качества звучат иначе — удар наковальни и левел-ап с магическими частицами; неудача — тусклый стук и красное сообщение с причиной.

Осколки и объединение

Осколки — разменная монета уникальных камней: 8 одинаковых, собранные в кольцо схемы с пустым центром, превращаются в один полноценный уникальный камень. Материал у всех осколков один (аметистовый осколок), различаются только именем и текстурой под конкретный тип. Падают отдельной, более редкой строкой шанса — своим дропом, отдельно от камней эффектов.

Камни эффектов объединяются той же схемой «пусто в центре + 8 одинаковых»: восемь камней размера N дают один камень размера N+1, до потолка типа. Для эффектов со шкалой до пяти (Сила, Скорость, Спешка, Живучесть) камень пятого размера, докрафченный честно с нуля, требует 8 камней четвёртого размера, под них — 64 третьего, под те — 512 второго, а в основании — 4096 крошечных камней первого размера. На практике это находки с мобов вперемешку со слияниями, а не чистый фарм одного размера.

Дроп с мобов и боссов

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

ДропС обычного мобаС помеченного босса (×25)
Камень эффекта (размер 1, случайный тип)1%25%
Осколок (случайный тип)0,4%10%
Ядро качества0,2%5%

Обычный дроп срабатывает только с враждебных мобов — мирные существа камней не роняют, даже случайно погибнув от игрока. Тег босса это ограничение снимает: помеченная сущность роняет камни, даже если формально не относится к враждебным, — боссом можно объявить хоть кастового мифик-моба, хоть уникальную сущность стороннего ивента. Дроп можно ограничить конкретными мирами — по умолчанию действует на всех картах.

Интеграции

CloudSpheres мягко зависит от MythicMobs — без него плагин работает как есть, без единой ошибки. Хук собран через рефлексию, а не прямую зависимость сборки: при старте плагин проверяет, установлен ли MythicMobs, и если да — находит его менеджер мобов через отражение классов. Если MythicMobs стоит, все его мобы автоматически считаются боссами и дают повышенный шанс дропа без единой строчки настройки. Боссом можно пометить и любую другую сущность вручную — по персональному ключу в её памяти, и по умолчанию плагин уже понимает метку BossArena.

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

РезультатШанс
Камень эффекта (случайный тип, размер смещён к малым)55%
Осколок уникального камня20%
Ядро качества13%
Готовый уникальный камень9%
Корпус сферы3%

Размер камня в первой строке — не равномерное случайное число: розыгрыш стартует с размера 1 и с шансом 30% на каждом шаге поднимается ещё на ступень, так что подавляющее большинство наград — младшие размеры.

Как собрать билд

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

  • Разведчик-саппорт: полезный эффект (например, Скорость) + Камень радиуса — баффы автоматически расползаются на союзников в 3 блоках.
  • PvP-финишер: Сила или Скорость высокого размера + Камень казни + Камень вампиризма — казнь добивает просевшего ниже 10% здоровья, вампиризм тут же лечит владельца за фраг.
  • Соло-выживание на грани: Камень ярости + Камень воскрешения + Камень повелителя Тьмы — три спасательные механики на разных порогах здоровья, не мешают друг другу: ниже 50% растут эффекты, ниже 25% приходит защитник, смертельный удар в любой момент гасит Воскрешение.
  • Фарм-сфера: Спешка + Живучесть, и Мягкость третьим слотом, если качество позволяет.

Билд на четыре эффекта разом не соберёшь: больше трёх основных не даёт ни одно качество — либо урезать список, либо тащить сферу до Легендарной.

Команды

КомандаЧто делает
/sphere give <игрок> core [качество]Выдать корпус сферы; без параметра — Обычная
/sphere give <игрок> stone <эффект> <размер>Выдать камень эффекта нужного типа и размера
/sphere give <игрок> unique <тип>Выдать готовый уникальный камень
/sphere give <игрок> shard <тип> [кол-во]Выдать осколки уникального камня, до 64 за раз
/sphere give <игрок> quality [кол-во]Выдать «Ядро качества», до 64 за раз
/sphere give <игрок> random [качество]Случайная награда по весам — для аирдропов, боссов, ивентов
/sphere npc setПоставить Заклинателя на текущей позиции
/sphere npc removeУбрать Заклинателя
/sphere listСписок эффектов, уникальных камней и размеров в чат
/sphere bookВыдать книгу-каталог «Каталог Сфер» — справочник по всей системе
/sphere reloadПеречитать конфиг без перезапуска сервера

Пример: /sphere give Steve stone strength 3 — средний камень Силы; /sphere give Steve core legendary — пустой корпус легендарного качества, без единого ядра. Алиасы команды: /spheres, /sfera, /сфера, /сферы.

Права

ПравоПо умолчаниюЧто открывает
sphere.adminopАдмин-команды: give, npc, reload
sphere.usetrue (у всех)Взаимодействие с Заклинателем (правый клик по NPC)

Проверка прав в коде уже, чем кажется по описанию: sphere.use реально проверяется только на клике по Заклинателю. Команды /sphere list и /sphere book не проверяют вообще никакое право и доступны любому игроку без исключений.

Настройка

Почти вся механика вынесена в конфиг и применяется командой /sphere reload без перезапуска сервера. Числа порогов и шансов, разобранные выше по каждому камню, — это дефолты того же файла, каждое можно подправить точечно.

  • Визуал: переключатели зачар-блеска, кружащей ауры вокруг владельца и общего тумблера всех частиц и звуков — на слабом сервере эффекты упрощаются одной настройкой.
  • Крафт: рецепт корпуса отключается целиком отдельным флагом, если нужен только дроп и ивенты.
  • Лимиты слотов: блок «limits» в конфиге на реальные лимиты не влияет — они зашиты в таблицу качества (см. выше), это наследие старой версии баланса.
  • Антидюп: включение проверки и период скана онлайн-инвентарей (по умолчанию 30 секунд).
  • Дроп: шансы и множитель босса разобраны в таблице выше, плюс список миров и автопризнание мобов MythicMobs боссами.
  • Баланс камней: тик пересчёта, длительность обновления, тики поджига, радиус и условие раздачи союзникам, порог и бонус ярости, проценты воскрешения/казни/вампиризма, три параметра Повелителя Тьмы, список эффектов под Иммунитетом, число волков камня стаи, правила харизмы.
  • Ресурспак: все камни и сама сфера уже размечены CustomModelData на ванильных материалах поверх одного базового номера — своя текстура вешается поверх без единой правки конфига.
Категория предметаМатериалCustomModelData
Сфера / корпус сферыheart_of_the_seaбазовый номер
Камень эффекта, любой тип и размерсвой на тип (редстоун, сахар, светопыль и другие)база + 100 × (номер эффекта + 1) + размер
Уникальный каменьсвой на тип (мембрана фантома, эхо-осколок и другие)база + 900 + номер типа
Осколокamethyst_shardбаза + 950 + номер типа
Ядро качестваfirework_starбаза + 970
CloudSpheres — это не одно зачарование, а целая экономика вокруг одного предмета: дроп, крафт, кузница-Заклинатель и своя система редкости, которая честно считает лимиты, узнаёт боссов по любой метке и не даёт задюпать результат.

Сундук со сферами — бесплатное дополнение к CloudSpheres. Отдельно не продаётся: покупая CloudSpheres, вы получаете и его.

CloudSphereChest — Сундук со сферами (входит в комплект)

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

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

Что это

Плагин ставит на карту сундук в теме Лавкрафта и Ктулху: фиолетово-чёрная подсветка, кольцо частиц «дыхания дракона», луч в небо над обычным блоком CHEST. Магии в блоке нет — это ванильный сундук без подмены модели, эффект держит связка менеджера ивента, приват-зоны и лут-таблицы вокруг него. Сменить облик можно только ресурспаком; поле custom-model-data в конфиге под это зарезервировано, но в коде не используется — конфиг сам предупреждает об этом комментарием.

Сундук появляется сам по таймеру или мгновенно по команде и ждёт, пока его не откроют единственно верным способом — Сферическим ключом. Плагин собран под Paper 1.19.4; автором в plugin.yml значится Виталий.

Механика ключа

Ключ должен лежать именно в основной руке: код всегда проверяет getItemInMainHand() и не смотрит в оффхенд — если ключ лежит там, клик по сундуку его не засчитает. Сам ключ — не название и не текстура, а метка внутри предмета: PersistentDataContainer с ключом spherechest:sphere_key. Переименовать в наковальне случайный tripwire hook и выдать его за ключ не выйдет — детектор проверяет именно PDC-метку, а не имя или lore.

Правый клик по ивент-сундуку никогда не открывает ванильный интерфейс — плагин отменяет это всегда, даже без ключа: игрок получает только сообщение «нужен Сферический ключ», заглянуть внутрь до вскрытия нельзя. С ключом происходит бросок: ключ тратится всегда, вне зависимости от исхода — из стопки снимается одна штука, а если он был последним, рука пустеет. И только после списания решается, повезло или нет: шанс задаёт event.unlock-chance (по умолчанию 0.25, то есть 25%).

Полный цикл ивента

Всё отсчитывается от паузы между ивентами — event.interval-minutes, по умолчанию 120 минут, считая не от анонса, а от момента, когда предыдущий ивент реально завершился (вскрытием или истечением). Точка следующего спавна выбирается сразу, в начале паузы, — сервер 105 минут молчит, прежде чем о ней объявить.

  • За 15 минут (announce.lead-minutes) до появления — первый бродкаст на весь сервер с координатами и временем ожидания.
  • Дальше — два обновления таймера с шагом announce.update-minutes (по умолчанию 5 минут): на отметках «10 минут» и «5 минут» до появления.
  • По истечении 15 минут сундук встаёт в точке, выбранной ещё в начале паузы.
  • Точка спавна — случайная в квадрате вокруг центра (spawn.center-x/z), а не в круге: смещение по X и Z независимо в пределах ±spawn.radius (по умолчанию 200) — то есть зона 400×400 блоков, а не круг радиусом 200 (в коде это прямо помечено как упрощение). Высота — верхний непустой блок колонны плюс один, так что на воде сундук встанет прямо на глади.
  • Окно на вскрытие — event.duration-minutes, по умолчанию 60 минут. Ключ можно пробовать сколько угодно раз, сколько угодно разным игрокам: лимита на попытки или кулдауна между ними нет.
  • Каждая попытка — независимый бросок с шансом event.unlock-chance (по умолчанию 25%).
  • Успех — сундук мгновенно наполняется лутом и открывается победителю, приват снимается в ту же секунду, но блок стоит ещё cleanup.after-open-seconds (по умолчанию 300 секунд, 5 минут) — время досмотреть добычу.
  • Если 60 минут прошли, а вскрыть не удалось, сундук пропадает сам, сервер получает сообщение о неудаче, и пауза до следующего ивента отсчитывается заново.

Голограмма над сундуком (нужен DecentHolograms) показывает статус: в ожидании — обратный отсчёт через %time%, пока сундук активен — подсказку использовать ключ. Нюанс: висит она не над будущей точкой спавна, а над центром зоны (spawn.center-x/z) — это постоянный ориентир, а не подсказка, куда бежать.

Лут: типы записей, веса, что выпадает

Успешное вскрытие заполняет сундук: инвентарь сначала очищается, затем по loot-slots (по умолчанию 12, диапазон 1–27) идёт столько же взвешенных бросков по всей таблице. Одна и та же запись может выпасть несколько раз подряд, другая — ни разу. Предметы ложатся не подряд слева направо, а в заранее перемешанный список из 27 ячеек — по паре первых слотов не угадать, что попалось.

Записи трёх типов. material — обычный предмет с диапазоном количества (min–max). command — консольная команда с подстановкой %player%, которая не занимает слот вообще: эффект приходит игроку напрямую, в обход инвентаря. key — ещё один Сферический ключ, кладётся как обычный предмет. Отсюда момент: если среди 12 бросков несколько раз выпадет command-запись, физических предметов в сундуке окажется меньше двенадцати — команда «съедает» бросок, но не слот.

ЗаписьКатегорияВесШанс за бросок
sphere give coreСфера, пустой корпус30~12%
sphere give randomСфера со случайным эффектом20~8%
Сферический ключКлюч10~4%
Алмаз ×1–3Ценное15~6%
Изумруд ×1–4Ценное12~5%
Зачарованное золотое яблокоЦенное, редкое3~1%
Золотое яблоко ×1–2Ценное10~4%
Бутылка опыта ×5–20Ценное20~8%
Гнилая плоть ×2–8Тематический «мусор»25~10%
Кость ×2–6Тематический «мусор»20~8%
Нить ×3–10Тематический «мусор»18~7%
Отравленный картофель ×1–3Тематический «мусор»15~6%
Слиток железа ×2–8Тематический «мусор»25~10%
Слиток золота ×1–4Тематический «мусор»18~7%

Показательная деталь конфига: слитки железа и золота лежат в том же блоке комментариев, что гнилая плоть и картофель, — «тематический мусор». На фоне алмазов и сфер это балласт, не награда. Список, веса и loot-slots — обычные поля, набор из поставки лишь пример.

Звук, свет и огласка — три разных радиуса

Кольцо из 24 точек «дыхания дракона» вращается вокруг сундука, луч END ROD тянется на 30 блоков вверх — оба эффекта, как все частицы в Minecraft, видны только вблизи и дальностью не настраиваются. А вот три канала оповещения — чат, звук и титул — работают на разных радиусах, и это не всегда очевидно из простого описания ивента.

  • Чат. Анонсы, обратный отсчёт, победа и истечение времени идут через серверный бродкаст — на весь сервер целиком, включая другие миры, а не только spawn.world.
  • Звук. Рёв дракона при спавне и звон удачи при вскрытии звучат для каждого игрока в том же мире, что и сундук, — вне зависимости от расстояния: звук проигрывается у координат самого слушателя, а не сундука, так что затухания по дистанции нет вовсе.
  • Титул на экране. Единственный эффект с настоящим радиусом: заголовок с координатами при спавне получают только игроки в пределах effects.title-radius (по умолчанию 80 блоков) от точки появления.

Отсюда заметная асимметрия именно в провале попытки. Текст о неудаче («ключ рассыпался в прах») видит только сам неудачник — приватным сообщением, без бродкаста в чат. Но вопль эндермена в этот момент слышит весь мир целиком, а не только тот, кто стоит у сундука: крик разлетается по всей карте анонимно, и лишь игроки поблизости увидят своими глазами, кто именно попытал удачу и остался ни с чем.

Связь с CloudSpheres

Часть добычи — не предмет, а команда, которую плагин выполняет от консоли сервера следующим тиком после удачного броска. По умолчанию в таблице две такие записи: sphere give %player% core (пустой корпус сферы без эффекта, вес 30) и sphere give %player% random (случайная сфера со случайным эффектом, вес 20) — вместе около пятой части всех бросков лут-таблицы. %player% подставляется автоматически на ник вскрывшего, команда обходит инвентарь сундука полностью — сфера прилетает игроку напрямую через плагин Spheres.

Показательно, что сам CloudSpheres нигде не заявлен зависимостью — ни жёсткой, ни мягкой: в softdepend плагина числятся только WorldEdit и DecentHolograms. CloudSphereChest просто вызывает команду sphere по имени, полагаясь, что она где-то зарегистрирована; если CloudSpheres не установлен, консоль получит ошибку неизвестной команды, а остальной ивент отработает как ни в чём не бывало — сфера просто не долетит. Получается витрина-компаньон: сферы попадают в оборот не тихой строчкой в меню выдачи, а разовым событием — хотя связка между плагинами держится на честном слове конфига, не на зависимости.

Зона и защита

Приват — куб вокруг блока сундука, сторона которого зависит от region.size (по умолчанию 15). Считается через полуразмер: size ÷ 2 с округлением вниз (15 ÷ 2 = 7), а куб — ±7 блоков по всем осям от сундука, то есть 15×15×15 при значении по умолчанию. Нечётное число даёт ребро ровно таким же; чётное — всегда на блок больше (14 и 15 дают одинаковый куб, 16 — уже 17×17×17).

Внутри куба ProtectionListener блокирует разрушение и установку блоков, клики (кроме самого сундука — тем занимается отдельный листенер), вёдра, а из взрывов — блочных и от существ — вычёркивает задетые блоки из списка на снос, не отменяя взрыв целиком. Право spherechest.bypass (по умолчанию у op) снимает все запреты.

Защита не висит постоянно: включается ровно в момент появления блока и снимается сразу при завершении ивента. В фазе анонса (те 15 минут) её ещё нет — строить или ломать в будущей точке спавна можно свободно. После успеха — обратная картина: приват снимается мгновенно, а блок остаётся ещё cleanup.after-open-seconds (300 секунд по умолчанию) — всё это время это обычный, незащищённый сундук, который можно и разбить, а не только докрыть кликом. Несколько минут после победы — честная гонка за тем, что не забрал победитель.

Как провести: сценарии

  • Фоновый цикл на автопилоте. Оставить event.auto-enabled: true и не трогать — плагин сам держит ритм: анонс, спавн, час на вскрытие, пауза, по кругу. Стоит заранее сверить центр и радиус зоны спавна, чтобы точка не улетела в океан или за границы обжитой территории: высота берётся по верхнему блоку колонны, а это может быть и вода. Центр — заодно точка, над которой висит голограмма ожидания.
  • Ивент здесь и сейчас. /spherechest start без координат — мгновенный спавн в случайной точке зоны, минуя 15-минутный анонс. /spherechest start 250 -400 — то же самое, но в конкретной точке: например, у только что отстроенной локации или посреди отдельного события. Если в этот момент уже шла фаза ожидания автоивента, ручной запуск сбрасывает её расписание — второй сундук поверх первого не встанет, плагин откажет и попросит сперва stop.
  • Ключ как приз. /spherechest key ИмяИгрока 3 выдаёт ключи в обход обычной находки сундука — удобная награда за отдельный конкурс: игрок получает не гарантированный лут, а именно попытки, каждая всё равно с тем же шансом 25%, так что элемент риска остаётся даже в подарке.
  • После ручной остановки — не забыть про автоцикл. /spherechest stop глушит текущий ивент и вместе с ним весь таймер автозапуска: следующий цикл сам не подхватится, потому что пересчёт паузы прописан только в точках «успех» и «истёк срок», а не в ручной остановке. Чтобы вернуть автопилот, нужно либо довести до конца ещё один ивент — любым исходом, оба варианта сами перезаведут таймер, — либо перезагрузить плагин или сервер.

Команды

КомандаЧто делает
/spherechest start [x z]Запустить ивент мгновенно — с указанными координатами или в случайной точке зоны
/spherechest stopПринудительно завершить активный ивент (и заодно заглушить автотаймер, см. сценарии выше)
/spherechest reloadПеречитать конфиг и лут-таблицу без рестарта сервера
/spherechest key <игрок> [n]Выдать игроку Сферический ключ (по умолчанию один, максимум 64 за раз)
/spherechest infoСтатус: активен ли сундук, его точка и мир, сводка по региону, включён ли автоивент, текущий шанс вскрытия

Короткие алиасы — /sc и /schest. Пример: /sc key Виталий 5 выдаст пять ключей игроку Виталий, а /sc start 100 -50 поставит сундук на X=100 Z=−50 — высота посчитается по рельефу. Без аргументов команда печатает список подкоманд. Все подкоманды, включая info, требуют право spherechest.admin — без него плагин откажет ещё до разбора аргументов.

Стоит помнить, что info в режиме ожидания не считает реальное время до следующего спавна — команда лишь отсылает свериться с event.interval-minutes в конфиге. Живой обратный отсчёт по %time% показывает только голограмма, если стоит DecentHolograms.

Права

  • spherechest.admin — доступ ко всем подкомандам /spherechest (по умолчанию — у op)
  • spherechest.bypass — игнорирует приват-защиту зоны вокруг сундука, пока ивент активен (по умолчанию — у op)

Настройка и совместимость

Плагин собран под Paper 1.19.4 (api-version: "1.19"). DecentHolograms не обязателен, но включает голограмму-таймер, если стоит, — плагин сам проверяет её наличие при старте. WorldEdit числится мягкой зависимостью в plugin.yml, но в коде не вызывается — историческая заготовка. Оба не нужны, чтобы ивент запускался и работал целиком.

В конфиге меняется почти всё, что видит игрок: event (авто-запуск, интервал, шанс, длительность), spawn (мир, центр, радиус зоны), announce (когда и как часто анонс), region (размер приват-куба), cleanup (время после вскрытия), key (материал, имя, lore ключа), loot-slots и loot (сама таблица), effects (голограмма, частицы, звуки на фазу, радиус и текст титула). В java-полях кэшируются только размер региона и лут-таблица — их явно пересобирает reload; остальное читается из конфига на лету, так что один /spherechest reload обновляет всё разом, без рестарта.

Лицензионная проверка встроена так же, как у прочих плагинов Cloud Delight, и стоит первой строкой при запуске плагина — раньше инициализации любых менеджеров. При license.enabled: true плагин шлёт POST на license.url с ключом и именем плагина, ждёт ответ до 5 секунд; если сервер лицензий недоступен или отвечает ошибкой — в ход идёт локальный кэш в папке плагина, но не дольше license.grace-hours (по умолчанию 24 часа) с последней успешной проверки. Явный отказ сервера — ключ неверен, занят другим IP, отозван — отключает плагин сразу, без грейс-периода. Для приватного сервера защита выключается одной строкой: license.enabled: false.

CloudSphereChest превращает обычный лут в событие на весь сервер: анонс, обратный отсчёт, честный риск потерять ключ впустую — и добыча тому, кто добежал и рискнул первым.