Skip to content

pnCases 1.5.1

Choose a tag to compare

@Dy6HiLa Dy6HiLa released this 29 Jul 21:12
· 28 commits to master since this release

pnCases 1.5.1

Версия 1.5.1 — большое обновление системы кейсов, анимаций, витрин и интерфейсов. Кейсы стали самостоятельными YAML-конфигурациями, Machine получил новую структуру меню, добавлены новые анимации и темы витрины, а хранение наград и пользовательских настроек стало надёжнее.

Что нового

Самостоятельные кейсы в cases/*.yml

  • Убрана привязка кейсов к заранее заданным типам вроде money или luckperms.
  • Каждый кейс создаётся командой /pncases createcase <id> и хранится в отдельном файле cases/<id>.yml.
  • В одном кейсе можно свободно сочетать предметы, деньги Vault, поинты PlayerPoints, группы и права LuckPerms, а также персональные команды.
  • Имя файла является внутренним ID кейса, а display-name отвечает за отображаемое название в GUI, голограммах, ключах и сообщениях.
  • Новый кейс сразу получает одноимённый ключ без суффикса _key.
  • /givekey, /takekey, /setcase, /delcase и автодополнение работают с актуальными ID кейсов и ключей.
  • Исправлено удаление файла кейса и его привязанных блоков через /pncases delcase <id>.
  • Команда /pncases setcase <id> привязывает выбранный кейс к блоку без копирования чужого шаблона.

Новая архитектура конфигурации кейса

  • blocks расположен в начале файла, а списки слотов сохраняются в компактном формате [0, 1, 2].
  • Конфигурация разбита на понятные секции: голограмма, витрина, GUI, broadcast, стоимость, анимация и награды.
  • Виртуальный ключ и цена открытия теперь определяются самим кейсом: всегда используется один ключ с ID кейса, поэтому лишние cost.type, cost.key и cost.amount удалены.
  • Покупка ключа за опыт вынесена из плоских buy_xp_* в понятную секцию cost.xp-purchase.
  • Убраны лишние технические поля витрины из создаваемых файлов: interval_ticks, radius, height и speed используют внутренние безопасные значения.
  • Удалён дублирующий параметр idle-particles.effects: включение витрины теперь управляется одним параметром enabled.
  • В начале нового файла выводится единая подробная подсказка по плейсхолдерам, типам наград и всем доступным редкостям.
  • Убраны повторяющиеся комментарии-заголовки перед каждой секцией.
  • Обычное сохранение больше не создаёт рядом лишние .bak-файлы. Резервная копия .broken.bak создаётся только при обнаружении повреждённого YAML.
  • Запись YAML выполняется через временный файл с проверкой и атомарной заменой.

Настройки GUI внутри каждого кейса

  • Кнопка кейса перенесена из общего gui.yml в cases/<id>.yml -> gui.button.
  • Каждый кейс может иметь собственные материал, Base64-текстуру, название и lore основной кнопки.
  • Старое поле gui.open-item автоматически переносится в gui.button.
  • Устранено предупреждение о якобы отсутствующем gui.open-item.
  • Сохраняются пустые строки в конце lore, поэтому оформление больше не обрезается.
  • item_data больше не мешает явно заданным name и lore.
  • Название кнопки, ключа и голограммы корректно обновляется после изменения display-name.
  • Для состояния нехватки ключей добавлены настраиваемые gui.insufficient-keys.name и gui.insufficient-keys.lore.
  • Добавлен gui.preview_enabled:
    • true — ЛКМ показывает содержимое, ПКМ открывает кейс;
    • false — и ЛКМ, и ПКМ сразу открывают кейс.
  • Переключатель просмотра содержимого доступен в Machine.

Настраиваемая история и разметка слотов

  • Пустой элемент истории настраивается для каждого кейса через gui.history.empty.
  • Старое поле gui.history.empty-item автоматически переносится в новую секцию.
  • Иконку пустой истории можно изменить предметом с курсора в Machine.
  • Разметка меню позволяет назначать слоты основной кнопки, выбора анимации, истории, декора и пустого пространства.
  • Обязательные роли при переносе корректно меняются местами и больше не создают дубликаты.
  • Если выбор анимации отключён и слот 49 освобождён, его автоматически занимает история.
  • При повторном включении пользовательского выбора слот возвращается кнопке анимации.
  • Исправлен пустой 50-й слот в стандартной разметке нового кейса.

Редкости и предпросмотр наград

  • Добавлены редкости COMMON, UNCOMMON, RARE, EPIC, LEGENDARY и MYTHIC.
  • Название, цвет, символ и свечение каждой редкости настраиваются в gui.yml -> preview.rarities.
  • Цвет и символ объединены в одном поле name, например &d✹ Мифическая.
  • В заголовке создаваемого кейса перечислены все допустимые ID редкостей.
  • Предпросмотр показывает реальную вероятность выпадения без технического веса.
  • Из публичного lore убраны внутренний тип награды, команды и служебные пояснения.
  • Кнопка «Содержимое кейса» получила отдельную Base64-иконку и короткое RGB-название без lore.
  • Стрелки страниц полностью скрываются, если все награды помещаются на одной странице.
  • Для нескольких страниц используются Base64-кнопки назад, вперёд и недоступного направления.

Персональные сообщения и broadcast

  • Сообщение об успешной выдаче задаётся непосредственно в конкретной награде через rewards[].message.
  • Удалены общие успешные сообщения reward.default, reward.luckperms, reward.vault и reward.playerpoints из messages.yml.
  • Если message у награды отсутствует, лишнее сообщение игроку не отправляется.
  • Системные ошибки провайдеров и неверных предметов по-прежнему настраиваются в messages.yml.
  • Broadcast перенесён из общего messages.yml в каждый файл кейса.
  • Для каждого кейса broadcast можно отдельно включить или выключить через broadcast.enabled.
  • Строки задаются в broadcast.lines и поддерживают {player}, {case}, {case_id} и {reward}.

Тип награды PERSONAL

  • Добавлен тип награды PERSONAL, выполняющий персональную консольную команду.
  • В командах доступны {player} и {uuid}.
  • Команда сохраняется вместе с отложенной наградой в SQLite, MySQL и MongoDB.
  • Для JDBC-хранилищ добавлена автоматическая миграция поля command.
  • В комплект добавлен cases/test.yml с примерами ITEM, VAULT, PLAYERPOINTS, LUCKPERMS, PERSONAL и кастомных Base64-голов.

Анимации открытия

Новые анимации

  • Добавлена «Дыхание дракона»: крупный дракон из частиц облетает кейс, снижается и выдыхает пламя, из которого появляется награда.
  • Добавлен «Голодный мимик»: сундук оживает, проглатывает ложные награды и выдаёт выигранную.
  • Обе новые анимации отмечены меткой NEW в меню выбора.
  • Полностью удалена старая анимация CAULDRON — «Астральный разлом».

Новая архитектура анимаций

  • Современные реализации для Minecraft 1.21+ перенесены в animation/main, совместимые — в animation/legacy.
  • Для Minecraft 1.16.5 принудительно используется совместимый «Круг фортуны».
  • Для Minecraft 1.17–1.20 используется отдельный совместимый режим без загрузки классов Display Entities.
  • Все открытия работают через единый жизненный цикл AnimationRun.
  • Контекст открытия централизованно отслеживает задачи, временные сущности, listener-ы и изменённые блоки.
  • Завершение, ошибка запуска, выход игрока, выгрузка мира и выключение плагина используют одну очистку.
  • Добавлен watchdog, который завершает зависшее открытие и не оставляет кейс заблокированным.
  • Звуки анимаций перенесены в код и приведены к единому безопасному диапазону громкости.

Единое отображение награды

  • Все современные анимации используют единый визуальный предмет и подпись награды.
  • Убран отдельный title с названием награды по центру экрана.
  • Название остаётся над вращающимся предметом и следует за ним до завершения.
  • Исправлены лишние и зависшие TextDisplay, появлявшиеся под блоком кейса.
  • Для отображения используется настоящий визуальный предмет награды, включая Base64-голову.
  • Количество частиц в момент выпадения уменьшено: предмет и его название больше не перекрываются финальным эффектом.

Защита сцены

  • Пока идёт анимация, посторонние игроки мягко отталкиваются от кейса в радиусе 5 блоков.
  • Открывающий игрок удерживается за пределами радиуса 3 блоков.
  • Защита отключается сразу после завершения или отмены открытия.

Полностью новая витрина кейса

  • Старые стили заменены полноценными темами витрины.
  • Доступны:
    • «Арканный ритуал»;
    • «Разлом пустоты»;
    • «Штормовая клетка»;
    • «Огненный феникс»;
    • «Ядовитая кобра»;
    • «Ледяная корона»;
    • «Плач душ»;
    • «Зов левиафана»;
    • «Небесные крылья»;
    • «Драконья орбита».
  • Темы получили отдельные силуэты, движение, траектории и цветовые композиции.
  • Феникс, левиафан и дракон перемещаются вокруг кейса; крылья взмахивают; статичным сценам сохранена устойчивая композиция.
  • Витрина больше не создаёт предмет или сундук над блоком — отображается только выбранная анимация частиц.
  • Оставлена одна кнопка включения витрины и одна кнопка выбора темы без дублирующего переключателя эффектов.
  • После изменения в Machine обновляется только витрина выбранного кейса, а не все кейсы сервера.
  • Старые служебные display-сущности витрин очищаются при загрузке и выключении.

Новый Machine и дизайн GUI

  • Machine полностью перестроен на отдельные понятные экраны: основные настройки, меню кейса, анимация, голограмма, витрина, покупка за опыт и разметка.
  • Удалён лишний экран «Быстрые настройки».
  • Повторяющиеся иконки заменены уникальными Base64-текстурами.
  • Кнопки «Вернуться» и «Выйти» используют единую красную Base64-иконку без лишнего lore.
  • Основные кнопки, категории, анимации, темы витрины и системные действия получили собственные Base64-иконки.
  • Заголовки Machine и выбора анимации используют чёрный цвет &0; пользовательские заголовки самих кейсов остаются настраиваемыми.
  • Lore Machine приведён к единому RGB-дизайну с разделами «Основная информация», «Текущие параметры» и «Действие».
  • Плейсхолдеры голограммы отображаются в Machine уже подставленными, а не буквальным текстом {display-name}.
  • В gui.yml оставлены только изменяемые пользовательские тексты, lore предпросмотра и оформление редкостей.
  • Слоты, навигация, системные иконки, звуки и дизайн Machine теперь находятся в коде.

Выбор анимаций

  • Анимации разделены на «Обычные» и «С мобами».
  • Разделы доступны и игрокам, и администратору в Machine.
  • Категории и кнопка возврата используют Base64-головы.
  • Убраны служебные строки о категории, технических эффектах и внутреннем способе отображения.
  • Каждая анимация получила RGB-название, собственную иконку и понятное визуальное описание.
  • Выбор игрока хранится отдельно для каждого сочетания «игрок + кейс».
  • Исправлена ошибка, из-за которой разные кейсы использовали одну общую выбранную анимацию.

Плавное и безопасное обновление GUI

  • Сервисы анимации открытия и обновления слотов вынесены в общую библиотеку pnLibrary для повторного использования в других плагинах.
  • GUI появляется от центра к краям, а поддерживаемые сервером заголовки раскрываются плавно.
  • Быстрое закрытие и повторное открытие больше не оставляет инвентарь частично пустым: незавершённая сессия сначала восстанавливает все предметы.
  • Отложенное обновление проверяет, что у игрока всё ещё открыт именно тот инвентарь, для которого оно создавалось.
  • При изменении настройки обновляются только действительно изменившиеся слоты.
  • С ProtocolLib дополнительно отправляется отдельный пакет SET_SLOT с отслеживанием containerId и stateId.
  • Bukkit-инвентарь остаётся основным состоянием, поэтому без ProtocolLib используется безопасное штатное обновление.
  • Убраны мигание, повторное раскрытие всего меню и одновременное обновление соседних Base64-кнопок.

Исправления

Отложенные награды и хранение

  • Pending-награда записывается до запуска анимации и не может быть перезаписана другим открытием.
  • Исправлена блокировка следующего открытия сообщением о необходимости сначала получить отложенную награду.
  • Активная анимация не позволяет обработчику входа преждевременно выдать её pending-награду.
  • При ошибке сохранения стоимость безопасно возвращается, если отсутствие записи подтверждено.
  • Если состояние хранилища определить нельзя, открытие останавливается без повторной выдачи.
  • Старая однозначно определяемая PERSONAL-награда без сохранённой команды может быть восстановлена из актуальной конфигурации.
  • Настройки выбранной анимации сохраняются по ID кейса в SQLite, MySQL и MongoDB.

Кейсы, шаблоны и голограммы

  • При применении настроек кейса обновляются не только награды, но и связанные визуальные параметры.
  • После изменения конкретного кейса обновляются его голограмма и витрина без пересоздания остальных.
  • Исправлено сохранение нового display-name во всех меню и подсказках команд.
  • Исправлены удаление кейса, очистка его ключа и обновление списка загруженных кейсов.
  • Конфликтующие привязки блоков обнаруживаются до применения новой конфигурации.
  • При ошибке YAML старые рабочие кейсы остаются активными вместо частичной перезагрузки.
  • FancyHolograms и DecentHolograms используют единый жизненный цикл и безопасный выбор провайдера AUTO.

Команды и сообщения

  • Панель /pncases получила отдельный блок состояния с версией, поддерживаемыми серверами, обновлением и Discord без скрытого hover.
  • Команды в панели стали интерактивными: нажатие подставляет выбранную команду в строку чата.
  • Убрана большая статическая служебная секция command-menu из YAML.
  • Исполнитель команд и автодополнение объединены в одном классе.
  • Автодополнение показывает только существующие кейсы и реально используемые ключи.
  • Удалён неиспользуемый primary из messages.yml.
  • config.yml сокращён до базы данных, провайдера голограмм и символов наград.
  • Удалён неиспользуемый case-files.auto-export.