pnClans v1.1.5 - Аудит безопасности, исправления и оптимизация
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 для кнопок.