Skip to content

Releases: pnFolder/pnClans

Каналы обновлений определяются только по тегу

Choose a tag to compare

@github-actions github-actions released this 25 Aug 21:36
81c26a9

Каналы обновлений определяются только по тегу

Обновление упрощает логику каналов: pnClans больше не зависит от GitHub-флага Pre-release и определяет STABLE/BETA/ALPHA только по тегу версии.

Новое

  • Добавлена независимая от GitHub Pre-release классификация каналов обновлений.

Улучшено

  • Упрощено определение канала: vX.Y.Z считается STABLE, vX.Y.Z-beta.N — BETA, vX.Y.Z-alpha.N — ALPHA.
  • GitHub-флаг prerelease теперь влияет только на отображение релиза на GitHub и не влияет на работу автообновления pnClans.

Исправлено

  • Исправлен случай, когда beta/alpha-релиз с правильным тегом игнорировался после ручного снятия GitHub-флага Pre-release.
  • Исправлен случай, когда канал релиза мог зависеть одновременно от тега и состояния GitHub-флага.

Важно

1.2.2-beta.2 публикуется как GitHub Prerelease для совместимости с уже выпущенным 1.2.2-beta.1. Начиная с этой версии галочку Pre-release можно включать или выключать без влияния на канал обновления.

Настраиваемые интерфейсы и безопасные обновления

Choose a tag to compare

@github-actions github-actions released this 25 Aug 21:23
0555c9e

Настраиваемые интерфейсы и безопасные обновления

Администраторы получают более предсказуемую конфигурацию, безопасные миграции и каналы обновлений, а игроки — исправленные и более гибко настраиваемые клановые интерфейсы.

Новое

  • Добавлены каналы обновлений STABLE, BETA и ALPHA.
  • Добавлен параметр updateChannel с русским описанием назначения каждого канала.
  • Добавлен выбор самой новой допустимой версии по SemVer внутри выбранного канала.
  • Добавлена автоматическая публикация GitHub prerelease для версий -beta.N и -alpha.N.
  • Добавлена скрытая настройка autoUpdate: при отсутствии ключа автоматическое обновление включено; для отключения администратор может вручную добавить autoUpdate: false.
  • Добавлена метрика выбранного канала обновлений.
  • Добавлен MenuConfigValidator, который проверяет обязательные GUI-ID, материалы, слоты, названия, описания и списки слотов.
  • Добавлен общий ConfigValidator для опасных и противоречивых значений магазина, квестов, битв и казны.
  • Добавлены резервные .bak-копии старых quests.yml и battles.yml перед schema migration.
  • Добавлены конфигурируемые параметры быстрых операций казны: суммы, слоты, timeout ввода и слова отмены.
  • Добавлены конфигурационные меню noClanMenu, clanColorMenu и treasuryHistoryMenu.
  • Добавлены отдельные GUI-ID для заблокированного слота и декоративных элементов кланового сундука.
  • Добавлены отдельные GUI-ID предупреждений об активной битве при выходе или роспуске клана.

Для игроков

  • Улучшен экран игрока без клана: оформление теперь берётся из конфигурации, а не создаётся непосредственно в UX-коде.
  • Улучшено меню визуальной метки соклановцев: цвета, состояния, материалы, названия и описания управляются конфигурацией.
  • Улучшена история казны: карточки операций и навигация используют конфигурационные шаблоны и ID.
  • Улучшены меню участников, прав пользователя, ролей, рейтинга и улучшений: удалены пустые fallback-предметы, которые могли отображаться как обычный STONE без названия и описания.
  • Улучшено клановое хранилище: заблокированные слоты и декоративные элементы теперь имеют собственные конфигурационные шаблоны.
  • Улучшены сообщения создания клана и настройки визуальной метки: пользовательские тексты и звуки перенесены в стандартную Action-конфигурацию.

Для администраторов

  • menus.yml теперь автоматически дополняется отсутствующими items.<id>, а не только отсутствующими верхнеуровневыми разделами.
  • Backfill сравнивает существующий menus.yml с чистыми дефолтами MenusConfig(), поэтому отсутствующие ID не теряются после десериализации старого файла.
  • После backfill конфигурация повторно загружается в тот же запуск, поэтому новые ключи доступны сразу без второго рестарта.
  • Существующие значения администратора не заменяются при добавлении новых полей и GUI-ID.
  • Неизвестные addon-ключи и большая часть структуры существующего YAML сохраняются вместо полного пересоздания файла.
  • /clan admin reload использует тот же безопасный путь загрузки, миграции, backfill и валидации, что и запуск сервера.
  • Старые кастомные built-in квесты сохраняются при обновлении схемы и не заменяются дефолтными определениями.
  • Кастомный display клановых битв сохраняется при schema migration.
  • При проблеме обязательного GUI-ID сервер выводит точный путь вида menus.yml.<menu>.items.<id> вместо молчаливого создания пустого предмета.
  • Настройки казны больше не являются декоративными: быстрые суммы, слоты, timeout и cancel inputs реально используются интерфейсом.
  • Удалён дополнительный захардкоженный звук казны; обратная связь управляется через Actions из конфигурации.

Улучшено

  • Улучшена интеграция PlayerPoints: reflection теперь подбирает совместимую перегрузку give, take и look по типам аргументов, а не только по имени и количеству параметров.
  • Улучшена безопасность миграций конфигурации: перед изменением старой схемы сохраняется исходный файл, а пользовательские значения восстанавливаются поверх новых defaults.
  • Улучшена конфигурационная архитектура GUI: пользовательские элементы используют экземпляры GuiItemConfig по стабильным ID вместо локальных названий, lore, материалов и слотов в UX-классах.
  • Улучшена валидация entrySlots: проверяются диапазоны и повторяющиеся слоты.
  • Улучшена обработка отсутствующих шаблонов: GUI больше не подменяет их безымянными default-предметами.
  • Улучшена система обновлений: проверка новых версий выполняется независимо от наличия старого checkUpdates, а канал определяет допустимый уровень релиза.

Исправлено

  • Исправлена миграция quests.yml, которая могла перезаписать изменённые администратором встроенные квесты новыми дефолтами.
  • Исправлена миграция battles.yml, которая могла сбросить кастомизированное отображение битв.
  • Исправлен backfill, который раньше не доходил до отдельных ключей внутри items:.
  • Исправлен случай, когда userPermissionsMenu.permission отсутствовал как самостоятельный ключ и скрытно наследовался из другого меню.
  • Исправлены пустые GuiItemConfig() fallback в редакторе ролей, правах ролей, рейтинге кланов и меню улучшений.
  • Исправлено хранение части lore подтверждения выхода и роспуска клана непосредственно в Kotlin-коде.
  • Исправлена ситуация, когда новые настройки могли физически не появиться в существующем YAML и оставались доступны только через Kotlin-defaults.
  • Исправлена совместимость новых конфигурационных изменений со сборками Java 21 и Java 25.

Удалено / заменено

  • Удалены дополнительные Supplemental* loaders и второй параллельный способ чтения конфигурации.
  • Удалены скрытые fallback-шаблоны GUI, которые маскировали отсутствующие ID.
  • Удалена генерация старого checkUpdates как пользовательского переключателя проверки обновлений.
  • Удалена генерация autoUpdate из обычного конфига; отсутствие параметра теперь означает включённое автообновление.
  • Заменено полное переписывание части YAML при backfill на точечное добавление отсутствующих полей и ID.

Важно

Это BETA-сборка для проверки новой конфигурационной архитектуры и миграций. Перед обновлением рекомендуется сохранить папку plugins/pnClans; автоматические .bak создаются для старых quests.yml и battles.yml, но ручная резервная копия всё равно полезна.

По умолчанию используется канал BETA, поэтому сервер будет получать новые стабильные и beta-релизы. Канал STABLE получает только стабильные версии, а ALPHA — любые опубликованные alpha, beta и stable-сборки. Draft-релизы игнорируются.

В этом beta-релизе закрыта проблема отсутствующих обязательных GUI-ID и пустых fallback-предметов. Полный перенос абсолютно всех оставшихся динамических фрагментов старых интерфейсов в конфигурацию продолжится в следующих beta-сборках.

pnClans v1.2.1 — Stability Update: Shop, Quests & Battle Lobby

Choose a tag to compare

@github-actions github-actions released this 25 Aug 18:21
b129b28

pnClans v1.2.1 — Stability Update: Shop, Quests & Battle Lobby

Кратко

v1.2.1 — стабилизационный релиз после большого обновления v1.2.0. Основной фокус версии — клановый магазин, квесты, организованные клановые битвы, MMR и конфигурация.

Главная задача обновления — убрать опасные сценарии частичных покупок и потерянных наград, сделать битвы понятными и управляемыми через полноценный Battle Lobby, отделить официальный боевой MMR от обычного PvP и перенести новые изменяемые параметры и сообщения в конфигурацию.

После знакомства с обновлением присоединитесь к Discord: https://discord.gg/TFdnyvMft. В канале «Отзывы» можно оставить общий отзыв, сообщить о баге или предложить идею для следующей версии.

Для игроков

  • Добавлен полноценный Battle Lobby после принятия кланового вызова.
  • Принятие вызова больше не запускает бой мгновенно и не телепортирует случайный состав на арену.
  • Игроки могут самостоятельно войти в боевой состав или выйти из него.
  • Стороны подтверждают готовность через состояние READY.
  • После готовности обеих сторон запускается настраиваемый обратный отсчёт перед переносом на арену.
  • Если выбранный участник выходит с сервера или состав меняется, готовность сбрасывается и старт отменяется до повторного READY.
  • Составы больше не формируются автоматически по алфавиту из первых онлайн-участников клана.
  • Улучшено меню клановых битв: отображаются состояния lobby, countdown, составы, READY/WAIT, соперник, счёт и доступное следующее действие.
  • Улучшена защита friendly fire: теперь учитываются не только прямые удары игрока, но и снаряды, выпущенные игроком.
  • Обычные PvP-убийства в мире больше не изменяют официальный клановый MMR.
  • MMR теперь изменяется через организованные клановые битвы, что делает рейтинг значительно устойчивее к фарму обычных убийств.
  • Требования магазина по квестам теперь проверяют завершение квеста в текущем цикле, а не одно историческое завершение навсегда.
  • Покупки в клановом магазине получили более точные причины отказа вместо одного общего сообщения.
  • При проблемах с валютой, журналом покупок или наградой магазин теперь сообщает более корректный результат и не продолжает опасную операцию вслепую.
  • Награды квестов больше не теряются только потому, что нужный получатель временно офлайн: ожидающая выдача сохраняется и обрабатывается при доступности игрока.

Для администраторов

  • Существенно расширена настройка battles.yml.
  • Добавлена настройка времени жизни Battle Lobby.
  • Добавлена настройка длительности countdown перед стартом боя.
  • Добавлена настройка автоматического включения организаторов вызова в первоначальный состав.
  • Добавлена настройка сохранения инвентаря при смерти в организованной битве.
  • Добавлена отдельная настройка сохранения уровня и опыта.
  • Добавлена настройка friendly fire внутри организованных битв.
  • Добавлена настройка принудительного удержания участников внутри радиуса арены.
  • Добавлена настройка технического поражения, когда у стороны не остаётся онлайн-участников.
  • Добавлен настраиваемый порог подсветки соперников с близким MMR.
  • Расширена конфигурация отображения Battle GUI: материалы, состояния, READY/WAIT, форматы счёта, причины пустого списка, действия и тексты интерфейса.
  • Новые игровые сообщения Battle Lobby перенесены в messages.yml и используют стандартную Action-систему pnClans.
  • Добавлены отдельные сообщения для открытия lobby, входа/выхода из состава, READY, countdown, изменения состава, офлайн-участника, истечения времени, ошибки арены, отмены старта, ошибки телепортации и других состояний.
  • Добавлены конфигурируемые сообщения для новых общих отказов и отключённых модулей, которые раньше местами выводились напрямую из кода.
  • Добавлен безопасный backfill новых параметров: существующие YAML-файлы дополняются недостающими ключами без намеренного сброса уже загруженных пользовательских значений.
  • shop.enabled теперь проверяется непосредственно сервисом покупки, а не только видимостью кнопки GUI.
  • Повреждённый shop-purchases.json больше не сбрасывается молча в пустое состояние. Магазин закрывает покупки до исправления файла и перезагрузки, чтобы не обнулить дневные лимиты.
  • Запись дневного лимита покупки выполняется до выдачи необратимых наград.
  • Сохранение shop-purchases.json выполняется через временный файл и атомарную замену, когда файловая система это поддерживает.
  • Перед списанием валюты магазин предварительно валидирует детерминированные награды: материалы, сериализованные предметы, enchantments, console commands, barter/chance-конфигурацию.
  • Возврат валюты теперь имеет реальный результат успеха/ошибки для Clan Points, Vault и PlayerPoints.
  • Ошибка возврата денег больше не игнорируется молча и отдельно журналируется.
  • Добавлен новый quest-rewards.json — журнал доставки наград квестов.
  • Завершение квеста теперь не фиксируется, если невозможно надёжно записать информацию о будущей выдаче награды.
  • Награды квестов используют состояния PENDING, CLAIMING, DELIVERED и FAILED, чтобы уменьшить риск дублей после сбоя или рестарта.
  • Неоднозначная награда, которая могла быть выдана непосредственно перед аварийным завершением сервера, не повторяется автоматически: сервер пишет подробную ошибку для ручной проверки вместо потенциального дюпа.

Клановый магазин

Исправлено

  • Убрано опасное поведение, при котором валюта могла быть возвращена после уже частично выданной необратимой награды, создавая возможность бесплатной частичной покупки.
  • Добавлено различие между полной ошибкой награды и ситуацией, когда выдача уже началась (REWARD_PARTIAL).
  • Если выдача ещё не началась, магазин может безопасно вернуть валюту и снять зарезервированный лимит покупки.
  • Если выдача уже началась, автоматический refund не выполняется, чтобы не создавать дюп; ситуация подробно записывается в лог.
  • Ошибка сохранения purchase ledger больше не остаётся незамеченной после списания средств.
  • Исправлена проверка успешности refund через Vault и Clan Points.
  • Добавлена проверка фактического результата возврата через PlayerPoints.
  • Добавлена предварительная валидация статической награды и настраиваемых Actions до списания валюты.
  • Повреждение purchase ledger теперь переводит магазин в безопасный режим вместо молчаливого обнуления лимитов.

Добавлено

  • Причины отказа SHOP_DISABLED, LEDGER_FAILED, REFUND_FAILED, REWARD_FAILED и REWARD_PARTIAL.
  • Резервирование дневной покупки до выполнения необратимых Actions.
  • Безопасное снятие резерва, если награда не начала выполняться и средства были возвращены.
  • Более подробное серверное журналирование проблем покупки.

Клановые квесты

Исправлено

  • Прогресс обычного шага квеста теперь откатывается в памяти, если saveClan() завершился ошибкой.
  • Завершение квеста больше не сохраняется раньше, чем создана надёжная запись доставки его награды.
  • Награда для LEADER больше не зависит от того, находится ли лидер онлайн непосредственно в момент завершения.
  • Для ACTOR, если конкретный actor отсутствует, используется безопасный fallback на лидера клана, когда это возможно.
  • Клановые очки и Action-награды теперь отслеживаются отдельно по состояниям доставки.
  • Требования магазина к повторяемым квестам больше не остаются открытыми навсегда после единственного исторического завершения.

Добавлено

  • Долговечная очередь выдачи наград quest-rewards.json.
  • Выдача ожидающих наград при запуске и при входе игрока.
  • Защита от автоматического повторения неоднозначно выданной награды после crash/restart.

Клановые битвы

Изменено

Старый цикл:

Challenge -> Accept -> автоматический выбор первых online-игроков -> мгновенный teleport -> Battle

Новый цикл:

Challenge -> Accept -> Battle Lobby -> выбор состава -> READY обеих сторон -> Countdown -> Teleport -> Battle -> Result -> Return

Добавлено

  • Отдельное состояние Battle Lobby.
  • Ручной состав каждой стороны.
  • Вход и выход игрока из боевого состава.
  • READY каждой стороны.
  • Настраиваемый countdown.
  • Сброс READY при изменении состава.
  • Проверка выбранных участников непосредственно перед стартом.
  • Отмена старта, если участник вышел с сервера.
  • Отдельное резервирование арены для lobby до начала боя.
  • Настраиваемые сообщения всех этапов lobby.
  • Новые состояния и placeholders для GUI битв.

Удалено / заменено

  • Удалён автоматический выбор первых онлайн-участников клана по алфавиту.
  • Удалён мгновенный старт организованной битвы сразу после принятия вызова.
  • Удалено автоматическое изменение MMR за обычные PvP-убийства и смерти в открытом мире (+10 / -5).
  • Официальный MMR оставлен за организованными клановыми битвами.

Конфигурация

Версия продолжает переход pnClans к configuration-driven архитектуре.

  • messages.yml отвечает за игровые сообщения и Action-уведомления.
  • battles.yml отвечает за механику и отображение клановых битв.
  • Новые изменяемые значения Battle Lobby не зафиксированы в сервисной логике без возможности настройки.
  • При обновлении недостающие новые ключи могут быть добавлены автоматически через backfill.
  • Существующие пользовательские значения не должны намеренно заменяться дефолтными только из-за появления новой версии схемы.

Полный перенос всех старых меню и старых сообщений плагина в configuration-driven формат не является частью v1.2.1 и будет продолжен отдельно, чтобы не смешивать стабилизационный релиз с большим UI/config рефакторингом.

Технические изменения

  • CI теперь проверяет и собирает pnClans отдельно под Java 21 и Java 25.
  • Release содержит два самостоятельных Shadow JAR.
  • Улучшена обработка Projectile в проверке friendly fire.
  • Добавлена защита от продолжения покупки при неисправном purchase ledger.
  • Добавлена долговечная модель выдачи наград квестов с защитой от повторной выдачи.
  • Улучшена диагностика ошибок магазина и квестовых наград.
  • Сохранена совместимость текущего публичного API v5; этот стабилизационный релиз не требует очередного повышения API-версии.

Совместимость

  • Minecra...
Read more

pnClans v1.2.0 — Pink Alliance: квесты и клановые битвы

Choose a tag to compare

@overdyn overdyn released this 12 Aug 00:48

pnClans v1.2.0 Pink Alliance

Кратко

Версия расширяет клановые квесты, добавляет организованные битвы на аренах и вводит подробную статистику участников. Новые интерфейсы оформлены в общей стилистике pnClans и объясняют цели, прогресс, награды, условия боя и доступные действия.

После знакомства с обновлением присоединитесь к Discord: https://discord.gg/TFdnyvMft. Оставьте в канале «Отзывы» общий отзыв, сообщение о баге или ошибке либо идею для развития плагина.

Для игроков

  • Расширен каталог с 3 до 17 встроенных квестов.
  • Реализован общий прогресс квестов с зависимостями и автоматическими наградами.
  • Переработано меню квестов с фильтрами, страницами, состояниями, прогрессом и подробным описанием каждой цели.
  • Добавлены клановые битвы с вызовом соперника, подтверждением, ареной, ограниченной областью, лимитом убийств и таймером.
  • Добавлены команды /clan battle, /clan battle <клан>, /clan battle accept <challenge-id> и /clan battle decline <challenge-id>.
  • Добавлена команда /clan stats [игрок] [day|week|month|all] для просмотра убийств, смертей и K/D участника текущего клана.
  • Добавлена статистика участника за день, текущую неделю, текущий месяц и всё время.
  • Добавлено предупреждение о техническом поражении перед роспуском клана во время активной битвы.

Для администраторов

  • Расширен файл quests.yml для настройки циклов, клановых очков, получателей наград и оформления квестов.
  • Добавлен файл battles.yml для настройки арен, точек появления, радиуса, длительности, размера составов, MMR и клановых очков.
  • Установлено значение enabled: false по умолчанию в battles.yml до явной настройки и проверки арены.
  • Добавлено требование pnclans.admin для всех команд /clan admin; право по умолчанию доступно операторам сервера.
  • Добавлена поддержка всех команд /clan admin из консоли.
  • Добавлено требование ClanPerms.Action.START_BATTLE для отправки, принятия и отклонения вызова.
  • Добавлена команда /clan admin info <clan> для просмотра состояния клана.
  • Добавлена команда /clan admin stats <player> [day|week|month|all] для просмотра статистики участника.
  • Добавлена команда /clan admin mmr <add|remove|set> <clan> <amount>.
  • Добавлена команда /clan admin bank <add|remove|set> <clan> <amount> с алиасом treasury.
  • Добавлена команда /clan admin points <add|remove|set> <clan> <amount>.
  • Добавлена команда /clan admin level set <clan> <1..5>.
  • Добавлена команда /clan admin member remove <player> с защитой лидера от случайного удаления.
  • Добавлена команда /clan admin quest reset <clan> <quest-id>.
  • Добавлена команда /clan admin battle stop <clan> [winner-clan].
  • Добавлены команды /clan admin save и /clan admin reload.
  • Добавлено журналирование административных изменений в консоль сервера.
  • Добавлено приглашение в Discord в конце успешного запуска плагина с предложением создать тему на форуме или написать в чат.

Для разработчиков

  • Повышена версия публичного API с 4 до 5.
  • Подключена отправка отменяемых ClanQuestProgressEvent и ClanQuestCompleteEvent.
  • Добавлено поле actor в события прогресса и завершения квеста.
  • Сохранены прежние JVM-конструкторы событий квестов через @JvmOverloads.
  • Добавлены публичные типы ClanQuestProgress, ClanBattle и ClanBattleEndReason.
  • Расширен интерфейс Clan: добавлены battleWins, battleLosses, questProgress и setQuestProgress().
  • Добавлены отменяемые события ClanBattleChallengeEvent и ClanBattleStartEvent.
  • Добавлено итоговое событие ClanBattleEndEvent.
  • Добавлен источник транзакций ClanPointsSource.BATTLE.
  • Добавлено клановое право ClanPerms.Action.START_BATTLE.
  • Добавлено значение BATTLES для OpenGuiAction.
  • Добавлена причина отказа ClanOperationRejection.PERSISTENCE_FAILED для операций, которые не удалось сохранить.
  • Добавлены PlaceholderAPI-ключи %pnclans_battle_wins% и %pnclans_battle_losses%.
  • Добавлены PlaceholderAPI-алиасы %pnclans_wins% и %pnclans_losses%.
  • Добавлены внутренние ключи {clan_battle_wins} и {clan_battle_losses} для сообщений и GUI.
  • Добавлено сохранение прогресса квестов в JSON и SQLite.
  • Добавлено сохранение суммарных побед и поражений в битвах в JSON и SQLite.
  • Добавлено сохранение ежедневной статистики убийств и смертей в JSON и SQLite.

Добавлено

  • Добавлены цели квестов для вступлений, домов, казны, магазина, участия в битвах, побед, убийств и урона на арене.
  • Добавлены однократные, ежедневные и недельные циклы пользовательских квестов по UTC.
  • Добавлены получатели ACTOR, LEADER и ONLINE_MEMBERS для настраиваемых Action-наград.
  • Добавлено начисление rewardPoints непосредственно клану независимо от получателя Action-наград.
  • Добавлен подбор соперников с учётом онлайна, активных матчей и ожидающих вызовов.
  • Добавлено резервирование арены за одним активным матчем.
  • Добавлено удержание участников внутри настроенного радиуса арены.
  • Добавлен возврат участников на исходные позиции после боя, выхода из клана или следующего входа на сервер.
  • Добавлено сохранение инвентаря, уровня и опыта после смерти в клановой битве.
  • Добавлена защита участников битвы от урона союзников и посторонних игроков.

Изменено

  • Переработаны названия и описания новых предметов и кнопок по общей палитре и структуре GUI pnClans.
  • Изменено расположение карточек квестов: они занимают только внутренние слоты декоративной рамки.
  • Установлено расположение карточек соперников только во внутренних слотах декоративной рамки.
  • Изменён подсчёт требований уровней: повторные циклы учитываются как отдельные завершения.
  • Изменены зависимости квестов: однажды завершённый квест постоянно открывает следующий.
  • Изменено поведение quests.yml с enabled: false: прогресс и награды останавливаются, а требования магазина и уровней отключаются.
  • Изменено меню магазина: обязательные квесты показываются перед финальной строкой действия.
  • Изменены убийства на арене: они обновляют общую статистику и обычные PvP-квесты, но не применяют базовые изменения MMR и clanPointsPerPlayerKill поверх боевых наград.
  • Изменено сохранение игрового времени: административное сохранение создаёт контрольную точку и не завершает активную сессию игрока.
  • Изменены карточки участников для явного обозначения формата убийств и смертей и расчёта периодов по UTC.

Исправлено

  • Исправлена миграция существующего quests.yml без поля schemaVersion.
  • Исправлена проверка обязательных квестов при покупке товара.
  • Исправлена проверка завершений квестов при повышении уровня клана.
  • Исправлено значение kicked в ClanMemberLeaveEvent при исключении участника.
  • Исправлена нормализация регистра идентификаторов клановых домов.

Совместимость

  • Сохранена загрузка существующих данных кланов: новые счётчики получают 0, а новые карты прогресса и статистики остаются пустыми.
  • Сохранена совместимость старых конструкторов событий квестов для уже собранных аддонов.
  • Требуется обработать ClanPointsSource.BATTLE в аддонах с исчерпывающим when по источникам очков.
  • Проверена сборка pnClans и примера аддона для Java 21 и Java 25.

Миграция

  1. Создайте резервную копию всей папки plugins/pnClans, включая базу данных, данные сундуков и YAML-конфигурации.
  2. Замените JAR плагина и выполните первый запуск без игроков на сервере.
  3. Оставьте enabled: false в battles.yml, укажите точный мир, безопасные точки challenger и defender и подходящий radius, затем проверьте арену перед включением битв.
  4. Проверьте встроенные квесты, награды и пользовательские идентификаторы в обновлённом quests.yml.
  5. Проверьте все значения conditions.requiredQuests в shop.yml: каждый идентификатор должен существовать в quests.yml.
  6. Перенесите новые строки главной сводки, карточек состава и требований уровней из стандартного menus.yml версии 1.2.0, если используется существующий настроенный файл.
  7. Перенесите разделы quests, battles и upgrade.insufficientQuests из стандартного messages.yml, если требуется изменить встроенные тексты и звуки.
  8. Перекомпилируйте аддоны против API 5, если они используют новые типы, события или поля.

Важно

При миграции quests.yml заменяются весь раздел display и квесты со встроенными идентификаторами. Сохраняются квесты с дополнительными пользовательскими идентификаторами.

При миграции battles.yml заменяется раздел display, а значение enabled, правила и арены сохраняются. Обязательно проверьте старое значение enabled до входа игроков.

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

Действия, выполненные до обновления, не засчитываются в квесты: существующие кланы начинают с нулевого прогресса.

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

Перезагрузка конфигурации блокируется во время активной битвы. Сначала завершите матч обычным способом или командой /clan admin battle stop.

Успешная команда /clan admin reload очищает все ожидающие боевые вызовы.

Изменение storageType через /clan admin reload не переключает активное хранилище. Для смены JSON и SQLite требуется полный перезапуск сервера; данные автоматически между хранилищами не переносятся.

Используйте для арен отдельный защищённый регион или мир. pnClans ограничивает участников радиусом и блокирует прямой PvP с посторонними, но не заменяет полноценный плагин защиты регионов.

Получатель LEADER для Action-награды срабатывает только тогда, когда лидер находится онлайн. Клановые rewardPoints начисляются независимо от онлайна лидера.

pnClans v1.1.5 - Аудит безопасности, исправления и оптимизация

Choose a tag to compare

@overdyn overdyn released this 10 Aug 21:42

pnClans v1.1.5 — аудит безопасности, исправления и оптимизация

Релиз содержит исправления, найденные при полном аудите проекта. Основной функционал кланов сохранён.

Безопасность

  • Удалён встроенный Discord webhook и автоматическая отправка stack trace, config.yml, menus.yml и messages.yml во внешний сервис.
  • ErrorReporter теперь работает локально через стандартный лог сервера, с подавлением повторяющихся ошибок и корректным shutdown.
  • Автообновление отключено по умолчанию для новых конфигураций.
  • Автообновление использует только официальный репозиторий pnFolder/pnClans, HTTPS и доверенные GitHub asset-хосты.
  • Автообновление выбирает JAR под Java 21 или Java 25, ограничивает размер загрузки, проверяет plugin.yml и выполняет атомарную замену файла.
  • Команда /clan теперь проверяет pnclans.use.
  • Права GuiItemConfig.permission проверяются при отображении и повторно при клике.
  • Добавлена защита от кликов и drag-событий по GUI, уже отменённых другими плагинами.
  • Доступ к клановому хранилищу централизованно проверяет членство, право OPEN_CHEST и настройку хранилища.
  • Нельзя открыть хранилище через обходной OpenGuiAction без проверки сервиса.
  • Сериализация предметов ограничена 54 слотами и максимальным размером payload.

Исправления корректности

  • Исправлена обработка NaN и бесконечных значений в операциях казны.
  • Vault больше не приводит к необработанному исключению при отсутствии экономики.
  • При неудачном зачислении средств игроку баланс казны восстанавливается.
  • Событие ClanSavedEvent отправляется только после успешного сохранения.
  • JSON, chest-файлы, магазинный ledger и shop.yml записываются через временный файл с атомарной заменой.
  • SQLite-соединение закрывается при выключении плагина.
  • Изменения ролей не позволяют создать нескольких лидеров.
  • Передача лидерства откатывается, если второй шаг операции не выполнен.
  • При отменённом удалении участника GUI больше не показывает ложное сообщение об успешном исключении.
  • Удаление дома требует DELETE_ANY, а не только право установки дома.
  • При расформировании клана событие вызывается до возврата средств из казны.
  • Пользовательские права ролей и персональные overrides сохраняются в JSON и SQLite.
  • В редакторе персональных прав разделены эффективное право и наличие персонального override.
  • Справочное меню использует данные клана открывшего его игрока, а не первого клана на сервере.
  • Перезагрузка сначала сохраняет данные, закрывает старые GUI и только затем перечитывает конфигурации и кланы.

Оптимизация

  • Убран подробный лог полного состава клана из частого пути синхронизации подсветки.
  • Синхронизация подсветки после сохранения клана объединяется в одну операцию на тик.
  • Начисление очков активности не обрабатывает один и тот же клан повторно в одном тике.
  • Клановый чат больше не выполняет Bukkit-операции из async-потока: отправка переносится на серверный поток.
  • Удалена неиспользуемая зависимость KGui из shaded JAR.
  • Размер итогового JAR уменьшен.

Сборка и файлы

  • pnClans-1.1.5-java21-all.jar — для Java 21.
  • pnClans-1.1.5-java25-all.jar — для Java 25.
  • Устанавливайте только один файл.
  • Оба JAR собраны из одного исходного кода и имеют одинаковую функциональность.

Проверка

  • test и build для Java 21: успешно.
  • test и build для Java 25: успешно.
  • Пример clan-missions-addon: успешно собран против Java 25 API JAR.
  • Java 21 bytecode: major version 65.
  • Java 25 bytecode: major version 69.

Важно после обновления

  • Если ранее использовалось автоматическое обновление, проверьте значение autoUpdate в config.yml.
  • Старый webhook, который присутствовал в предыдущих версиях проекта, необходимо отозвать/удалить в Discord: удаление из нового JAR не отзывает уже опубликованный секрет из истории Git.
  • При использовании кастомных GUI проверьте заданные permissions для кнопок.

Скачать

pnClans v1.1.4 - Оптимизация и чистка кода

Choose a tag to compare

@overdyn overdyn released this 10 Aug 20:52

pnClans v1.1.4 — оптимизация и чистка кода

Что изменилось

  • Убран подробный диагностический INFO-лог из синхронизации подсветки соклановцев. Ранее он формировал и записывал полный список участников при каждом обновлении, создавая лишнюю нагрузку на диск и консоль.
  • Оптимизирован сервис начисления очков за активность: один и тот же клан не обрабатывается повторно в рамках одного серверного тика, даже если онлайн несколько его участников.
  • Поведение подсветки, начисления очков, лимитов и сохранения данных не изменено.
  • Сохранены два варианта сборки для разных версий Java.

Файлы

  • pnClans-1.1.4-java21-all.jar — для Java 21.
  • pnClans-1.1.4-java25-all.jar — для Java 25.

Устанавливайте только один файл.

Проверка

  • Сборка Java 21 прошла успешно.
  • Сборка Java 25 прошла успешно.
  • Пример аддона успешно собран против Java 25 API JAR.
  • Функциональность предыдущего релиза сохранена: кланы, GUI, роли, права, казна, хранилище, дома, чат, PvP, подсветка, очки, магазин, награды, квестовый каталог и API 4.

Загрузка

pnClans v1.1.3 - Java 21 и Java 25

Choose a tag to compare

@overdyn overdyn released this 10 Aug 16:16

pnClans v1.1.3 — два JAR для Java 21 и Java 25

В этом релизе один и тот же pnClans собран в двух вариантах. Выберите только один JAR в зависимости от Java на сервере.

Какой файл использовать

Файл Требуемая Java Для чего
pnClans-1.1.3-java21-all.jar Java 21 или новее Рекомендуемый вариант для серверов на Java 21
pnClans-1.1.3-java25-all.jar Java 25 или новее Вариант для серверов на Java 25

Не устанавливайте оба файла одновременно. Это два варианта одного плагина, а не два разных плагина.

Что изменилось

  • Добавлена параметризованная сборка через -PjavaTarget=21 или -PjavaTarget=25.
  • Java 21 JAR собран с JVM bytecode major version 65.
  • Java 25 JAR собран с JVM bytecode major version 69.
  • Оба файла являются shaded JAR и содержат все необходимые встроенные зависимости pnClans.
  • Обновлены пример аддона и ADDON_API.md: аддоны можно компилировать против Java 21 или Java 25 API JAR.
  • Функциональность плагина одинаковая в обоих вариантах: подсветка соклановцев, клановые очки, магазин, награды, квестовый каталог, API 4, события и миграции из v1.0.6 описаны в полном changelog релиза v1.1.2.

Сборка из исходников

.\gradlew.bat clean build "-PjavaTarget=21" --no-daemon
.\gradlew.bat build "-PjavaTarget=25" --no-daemon

Результаты:

build/libs/pnClans-1.1.3-java21-all.jar
build/libs/pnClans-1.1.3-java25-all.jar

Обновление

  1. Проверьте версию Java командой java -version.
  2. Удалите старый JAR pnClans из папки plugins.
  3. Положите туда только подходящий файл из этого релиза.
  4. Не меняйте данные кланов и конфигурацию: формат данных и функциональность не изменились.

Полное описание подсветки, магазина, клановых очков, наград, API 4, событий, миграции и ограничений находится в релизе v1.1.2.

pnClans v1.1.2 - Полное обновление: подсветка, очки, магазин, квесты, API 4

Choose a tag to compare

@overdyn overdyn released this 10 Aug 13:14

pnClans v1.1.2

Полное обновление после v1.0.6

Релиз собран для:

  • Paper API 1.21.11
  • Java 25
  • Paper 1.18+

Добавлено:

  • подсветка соклановцев;
  • клановые очки;
  • клановый магазин;
  • каталог квестов;
  • публичный API 4;
  • улучшенная персистентность данных.

Подсветка соклановцев

Добавлены два режима отображения:

  • ARMOR — виртуальная цветная броня поверх настоящей;
  • GLOW — светящийся контур вокруг соклановца.

Доступно 9 цветов:

AQUA, BLUE, DARK_AQUA, GREEN, RED, GOLD, YELLOW, LIGHT_PURPLE, WHITE.

Настройки доступны через меню клана:

  • выбор режима;
  • включение и выключение подсветки;
  • выбор цвета;
  • сброс настроек к стандартным.

Подсветка отображается только участникам одного клана.

Синхронизация выполняется при:

  • входе и выходе игрока;
  • возрождении;
  • смене мира;
  • создании и сохранении клана;
  • расформировании клана;
  • запуске сервера.

Реализация использует PacketEvents, встроенный в JAR с relocation. Ошибка подсветки не прерывает игровой процесс.

Новые права:

  • TOGGLE_COLOR;
  • TOGGLE_HIGHLIGHT_MODE.

Новая настройка:

clanHighlightColors:

Клановые очки

Добавлена новая валюта клана:

  • баланс Clan.points;
  • журнал операций pointsLogs;
  • дневной лимит активности.

Начисление очков

За убийства игроков:

clanPointsPerPlayerKill: 10

За убийства мобов:

clanPointsPerMobKill:
  ZOMBIE: 1
  SKELETON: 1
  CREEPER: 2
  SPIDER: 1
  WITHER: 50
  ENDER_DRAGON: 100

За активность участников:

  • 1 очко по умолчанию за 10 минут;
  • защита от AFK;
  • дневной лимит по умолчанию — 100 очков на клан.

Активностью считаются движение, чат, команды, взаимодействие и нанесение урона.

Состояние очков сохраняется между перезапусками.

Плейсхолдеры:

  • %pnclans_points%;
  • {clan_points}.

API очков:

  • ClanPoints.award();
  • ClanPoints.spend().

Источники операций: PLAYER_KILL, MOB_KILL, ACTIVITY, QUEST, SHOP, ADMIN.

Типы операций: AWARD, SPEND, ADMIN_ADJUSTMENT.


Клановый магазин

Добавлен новый раздел магазина в главном меню.

  • кнопка магазина — слот 30;
  • 6 рядов;
  • 21 слот товаров;
  • категории и сортировка настраиваются;
  • поддерживаются редкости товаров;
  • добавлена постраничная навигация;
  • отображаются балансы всех валют.

Файл конфигурации:

shop.yml

Версия схемы:

schemaVersion: 8

Стандартные категории: Все товары, Еда, Оружие, Ресурсы, Редкое.

Стандартные редкости: common, valuable, rare, legendary.

Условия покупки

Поддерживаются минимальный уровень клана, минимальное количество участников, необходимые квесты, дневной лимит клана и общий дневной лимит сервера.

Способы оплаты

  • CLAN_POINTS — очки казны клана;
  • VAULT — монеты игрока;
  • PLAYER_POINTS — бонусные очки игрока.

Перед покупкой проверяются актуальная цена, доступность валюты, разрешения игрока и ограничения товара.

После /clan reload старое окно покупки не позволит купить товар по устаревшей цене.

Награды

Поддерживаются:

  • !item_give;
  • !item_reward;
  • !console_command.

Плейсхолдеры наград: {player}, {player_name}, {product}, {quantity}, {clan}.

Предметы больше 64 единиц автоматически разбиваются на стаки. Если инвентарь заполнен, предметы выпадают рядом с игроком.

Если награда не может быть выдана, покупка отменяется, а средства возвращаются игроку.

Сообщения магазина

Поддерживаются success, insufficientFunds, currencyUnavailable, noPermission, shopChanged, requirementsNotMet, clanLimitReached, globalLimitReached, cancelled.


Квесты

Добавлена кнопка «Клановые квесты» в главном меню.

Файл конфигурации:

quests.yml

Типы целей:

  • PLAYER_KILL;
  • MOB_KILL;
  • ACTIVITY_INTERVAL.

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

Стандартные квесты:

  • «Охота на соперников» — 25 убийств игроков;
  • «Чистка территории» — 250 мобов;
  • «Активный клан» — 50 активных интервалов.

Quest engine пока не реализован. События ClanQuestProgressEvent и ClanQuestCompleteEvent ещё не вызываются. Товары с requiredQuests будут отклоняться.


Публичный API 4

Версия API:

PnClansProvider.API_VERSION = 4

Добавлены разделы api.points, api.operations и api.gui.

Новые операции клана:

  • changeRole;
  • transferLeadership;
  • changeSetting;
  • setHome;
  • deleteHome;
  • openChest.

Новые события:

  • ClanMemberJoinEvent;
  • ClanMemberLeaveEvent;
  • ClanMemberRoleChangeEvent;
  • ClanSettingChangeEvent;
  • ClanHomeSetEvent;
  • ClanHomeDeleteEvent;
  • ClanChestOpenEvent;
  • ClanTreasuryTransactionPreEvent;
  • ClanTreasuryTransactionEvent;
  • ClanShopPurchasePreEvent;
  • ClanShopPurchaseEvent;
  • ClanQuestProgressEvent;
  • ClanQuestCompleteEvent.

Новые типы: ClanPoints, ClanPointsTransaction, ClanPointsTransactionType, ClanPointsSource, ClanHighlightColor, ClanHighlightType, ClanShopCurrency, ClanOperationResult, ClanOperationRejection.

Аддоны, использующие API pnClans, необходимо перекомпилировать против API 4.


Исправления

  • исправлено сохранение убийств, смертей и игрового времени;
  • исправлено сохранение клановых очков и дневных лимитов;
  • восстановлена кнопка Зала славы;
  • исправлено пересечение слотов магазина и квестов;
  • исправлено исчезновение имени и lore у предметов;
  • исправлена подсветка GUI на Paper 1.21.11;
  • исправлена обработка кликов по инвентарю игрока;
  • награды больше не обрезаются размером одного стака;
  • исправлен возврат средств при ошибке выдачи награды;
  • исправлена покупка после /clan reload;
  • каталог магазина обновляется без повторного открытия меню.

Совместимость

  • Paper API 1.21.11;
  • Java 25;
  • Paper 1.18+;
  • api-version: 1.16.

PacketEvents встроен в JAR с relocation:

ua.inventorytype.pnclans.libs

Необязательные интеграции: Vault, PlaceholderAPI и PlayerPoints.


Миграция с v1.0.6

  1. Сделайте резервную копию папки plugins/pnClans/.
  2. Обновите Java до 25.
  3. Замените JAR на pnClans-1.1.2-all.jar.
  4. Перезапустите сервер.
  5. Проверьте созданные shop.yml и quests.yml.
  6. Если используется собственный menus.yml, добавьте mainMenu.items.shop и mainMenu.items.quests.
  7. Перекомпилируйте аддоны против API 4.
  8. Проверьте способы оплаты, награды и requiredQuests.

Важно

!console_command выполняется от имени консоли. Используйте такие команды только в доверенном shop.yml.

Серверы с другими плагинами подсветки, glow или scoreboard должны проверить совместимость.

Скачать

pnClans-1.1.2-all.jar

Paper 1.21.11 / Java 25

pnClans 1.0.6 — Настраиваемый клановый чат

Choose a tag to compare

@Dy6HiLa Dy6HiLa released this 07 Aug 14:19

Что добавлено

  • Клановый чат получил два способа общения: через отдельную команду или через символ в начале сообщения.
  • На серверах с командным режимом сообщение в клан можно отправить командой, например: /cc Привет, клан!.
  • На серверах с режимом префикса достаточно начать обычное сообщение с выбранного символа, например: !Привет, клан! или #Привет, клан!.
  • Администратор сервера может выбрать наиболее удобный способ общения для своего проекта.

Что изменено

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

Улучшения

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

pnClans 1.0.5 — Метка соклановцев: два типа, один переключатель, новый дизайн меню

Choose a tag to compare

@overdyn overdyn released this 06 Aug 21:44

Что нового

✦ Два типа метки соклановцев

  • Броня — виртуальная кожаная броня в цвете клана (перехват EntityEquipment).
  • Подсветка — светящийся контур вокруг игрока (команды ScoreboardTeams + флаг glow в EntityMetadata), цвет = цвет клана.
  • Тип сохраняется в данных клана (highlightType) и выбирается в меню.

✦ Единый переключатель вместо набора режимов

  • Вместо режимов OFF/ALWAYS/PvP — один общий статус Включена / Выключена: выключена — ни броня, ни подсветка не показываются.
  • Старые данные мигрируют автоматически: ALWAYS/PvP-режимы → включено, OFF → выключено.

✦ Полностью переработанное меню «Метка Соклановцев»

  • Единый стиль проекта: HotWorld-декор, подписи секций, лоры «Состояние / Описание / Переход».
  • Симметричная раскладка 6×9: тип → статус → цвет (палитра из 9 цветов), кнопка сброса, фирменная кнопка «Вернуться назад».
  • Плейсхолдеры {clan_highlight_status}, {clan_highlight_type} в настройках.

🛠 Исправления

  • Починен синхронизатор метки: убрана тяжёлая NMS-рефлексия (getEntityMetadata), которая молча роняла syncClan — переключение в меню теперь реально работает.
  • Буфер пакетов больше не пишется вручную — PacketEvents 2.13.1 перекодирует сам.
  • Детальный лог синхронизации: участники, онлайн, статус, тип, активность.

⚠️ Примечание

  • При обновлении с версий до 1.0.5 удалите menus.yml (или замените {clan_highlight_mode} на {clan_highlight_status} вручную), чтобы пункт «Метка соклановцев» в настройках отображался корректно.

📸 Скриншоты

Тип: Броня
Тип: Подсветка
Меню: Броня
Меню: Подсветка
Меню: Общий вид


📦 Бинарный файл: pnClans-1.0.5-all.jar