Плагин GUI Магазин Экономика MollyAuction [NGVKauction] [1.2.1]

Изменения с NGVKauction 1.1 до MollyAuction 1.2.1
Добавлено:
  • Переименование в MollyAuction с автоматическим переносом старых данных.
  • Частичный выкуп предметов с выбором количества.
  • История последних 100 сделок — /ah history.
  • Уведомления о продажах за время отсутствия игрока.
  • Продление лотов с настраиваемой стоимостью.
  • Комиссия за выставление: процент и фиксированная сумма.
  • Автообновление открытых меню.
  • Кнопка «Забрать всё» в хранилище.
  • Снятие чужих лотов администратором через Shift + ПКМ с возвратом предметов продавцу в хранилище.
  • Чёрный список по названию, описанию и CustomModelData.
  • Поддержка PlaceholderAPI в оформлении и MiniMessage.
  • Выбор валюты: Vault или PlayerPoints. Для PlayerPoints Vault больше не нужен.
  • Сохранение отложенных выплат при отказе экономики.
  • Сохранение покупок в хранилище при полном инвентаре.
  • Право mollyauction.limit.<число> для настройки лимита лотов.
  • Проверка цен, комиссий, интервалов, размеров меню и пересечений слотов.
  • Автоматическая загрузка драйвера MySQL.
  • Сборка под Java 17 и API Paper 1.20.4 вместо Java 21 и API Paper 1.21.4.
Исправлено:
  • Ошибки округления при частичном выкупе и расхождение цены в меню с суммой списания.
  • Выбор другого лота при клике по устаревшему списку.
  • Некорректный возврат предметов с метаданными при заполненном инвентаре.
  • Игнорирование отказов списания комиссий и начисления продавцу.
  • Нарушение порядка сохранения и удаления лотов.
  • Раздельное сохранение покупки: остаток лота, история, предмет покупателя и задолженность продавцу теперь записываются одной SQL-транзакцией.
  • Конфликты покупки, истечения срока и продления.
  • Потеря уведомлений при выходе игрока до доставки.
  • Ошибки миграции данных и обновления схемы БД.
  • Обход запрета продажи через старые права и учёт запрещённых прав лимитов.
  • Ошибки страниц, настроенных кнопок GUI и совместного использования HEX с MiniMessage.
Ключевые нововведения:

  • Полноценная асинхронная база данных: Хранилище активных и просроченных лотов переведено на SQLite / MySQL через HikariCP. Синхронная запись файлов с главного потока полностью удалена, что исключает микрофризы сервера при операциях с аукционом.
  • Фоновая проверка срока лотов: Истекшие товары теперь автоматически перемещаются в хранилище (/ah storage) в асинхронном таймере с настраиваемым интервалом (expiration-check-interval-seconds), не дожидаясь ввода команд игроками.
  • Встроенный автомигратор: Плагин самостоятельно адаптирует файлы предыдущей версии при первом запуске:
    • messages.yml автоматически переименовывается в lang.yml с сохранением пользовательских переводов.
    • Старый файл data.yml переносится в базу данных и архивируется в data.yml.converted.
    • В config.yml автоматически добавляются новые параметры (config-version: '1.1', размер пула подключений БД и интервалы).
Исправления ошибок и безопасности:

  • Устранена уязвимость в инвентаре: Исправлен баг, из-за которого Shift-клик по предмету в собственном инвентаре при открытом меню аукциона принудительно отправлял команду выставления на продажу.
  • Утечки памяти: Состояния страниц, категорий и сортировки игроков перенесены из статических коллекций непосредственно в объект меню (InventoryHolder), что полностью исключает утечки оперативной памяти.
  • Потокобезопасность: Все внутренние списки товаров заменены на потокобезопасные структуры (ConcurrentHashMap, CopyOnWriteArrayList), предотвращая ошибки ConcurrentModificationException при высокой нагрузке.
  • Удалены конфликты слушателей: Устранено дублирование обработки кликов и перетаскиваний в GUI.
ВерхНиз