Skip to content

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

Choose a tag to compare

@overdyn overdyn released this 10 Aug 21:42
· 5 commits to dev since this release

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 для кнопок.

Скачать