Исправлено:Изменено:
- Ошибка при включении плагина на серверах Folia версии 26.3.
- Предмет магазина со второй страницы продолжал отображаться при возвращении на первую страницу, если свободный слот на первой странице был занят заполняющим предметом.
- Ошибка NPE при загрузке данных игрока на серверах, работающих за прокси в offline-режиме.
- Сообщение о сохранении динамических цен теперь выводится как отладочное и может быть отключено.
В этом обновлении изменён способ работы ESGUI с базами данных MySQL и PostgreSQL (поддержка PostgreSQL добавлена впервые). Эта часть плагина не обновлялась несколько лет, поэтому я не хотел переписывать её с нуля, чтобы не создавать новые проблемы.
Теперь плагин в полной мере использует систему пула соединений драйвера. Это должно повысить производительность на крупных серверных сетях, где несколько серверов одновременно подключаются к одной базе данных и создают высокую нагрузку на неё.
Стресс-тесты проводились на локальной сети Velocity с двумя серверами, каждый из которых продавал около 100 000 предметов в час через AutoSellChests с включёнными DynamicPricing и ограничением запасов. При этом кэш отображения был отключён. Проблем с производительностью не обнаружено.
Добавлено:Изменения и исправления:
- Добавлена поддержка баз данных PostgreSQL.
- Добавлена поддержка синхронизации RotatingShops через MySQL/PostgreSQL. Теперь ротацию предметов можно синхронизировать между серверами одной сети.
- Документация: Sections | EconomyShopGUI wiki
- Добавлена поддержка параметра update-interval для товаров магазина. Он позволяет обновлять название и описание предмета через заданные интервалы, например, если они содержат голограммы.
- Документация: Sections | EconomyShopGUI wiki
- Команда /shop search теперь также позволяет искать предметы по названиям зачарований и зелий.
- Команда /sellall <item> теперь также поддерживает пользовательские ID предметов из совместимых плагинов.
- Если скоро должна произойти ротация RotatingShop, магазин теперь перезагружается у игроков, которые просматривают его в данный момент. Это предотвращает покупку предметов из предыдущей ротации.
- Значительно снижена нагрузка на SQL при одновременной работе с магазинами на крупных и загруженных серверах. Для этого используются снимки данных, даже если кэш отображения отключён.
- При использовании SQLite пакетные SQL-запросы теперь выполняются в очереди вместо создания отдельной задачи для каждого пакета. Это предотвращает создание сервером чрезмерного количества асинхронных задач.
- Исправлена ошибка ClassCastException в Minecraft 26.3 при продаже предметов с пользовательскими данными компонентов.
- Добавлена поддержка установки опции предмета bedrock-texture для элементов навигационной панели, элементов опций и элементов разделов.
- Оптимизировано создание описаний предметов, когда per-player-languages отключён в config.yml.
- Исправлена ошибка при запуске, возникавшая при разном количестве конфигураций в папках sections и shops.
- Исправлена ошибка, из-за которой нажатие на элемент навигационной панели без действия для пагинируемого предмета в JsonShopForms вызывало ошибку и закрывало меню у игроков Bedrock.
- Исправлена ошибка StackOverflow на серверах Spigot 26.3.
- Форматы валют в config.yml теперь также могут содержать символы в верхнем или нижнем регистре.
- Возможно, исправлена ошибка при входе игрока с AuthMe/пиратской версии игры, появившаяся в последней версии.
Изменено:
- Добавлена поддержка MC 26.3 и все новые 117 предметов добавлены в базу данных
- Добавлена поддержка дополнений зачарований
- Для каждого предмета можно использовать enchanted-variants: true, чтобы добавить зачарованные варианты к базовому предмету. При продаже такого предмета в магазин стоимость каждого зачарования добавляется к цене продажи базового предмета
- Теперь эта функция включена по умолчанию в магазинах оружия, инструментов и брони, но глобально отключена по умолчанию в config.yml (для её включения необходимо пересоздать отдельные файлы секций этих магазинов)
- Стоимость зачарований берётся из enchant-costs.yml, где можно настроить стоимость зачарований, добавляемую к базовым предметам
- Стоимость может быть фиксированной или рассчитываться в процентах от цены базового предмета
- Уровни зачарований могут использовать множитель от рассчитанной стоимости первого уровня зачарования или фиксированную денежную сумму
- Ссылка на вики: https://wiki.gpplugins.com/economyshopgui/file-configuration/config.yml#enchanted-variants
- Теперь варианты повреждённых предметов также можно включать или отключать отдельно для каждого предмета магазина
- Добавлена опция fixed-stack-size для отдельных предметов, которая позволяет изменять количество предметов на экране покупки/продажи только с заданным шагом
- В отличие от опции stack-size, которая лишь устанавливает предварительно выбранный размер стопки, при этом игрок всё ещё может выбрать любое количество
- Добавлена консольная команда для непосредственного открытия экрана транзакции для игрока: /shop <section> <player> <item> <buy/sell>
- Названия меню, сообщения команд/транзакций и описание предметов теперь также могут отображаться на языке игрока с помощью плейсхолдеров %translation-%
- Для работы этой функции необходимо отдельно включить параметр use-player-locale в config.yml (по умолчанию отключён)
- Если сообщение не переведено на язык игрока или файл языка отсутствует, будет использоваться язык по умолчанию из config.yml или английский
- Ссылка на вики: https://wiki.gpplugins.com/economyshopgui/file-configuration/config.yml#per-player-localization
- Добавлена поддержка Bedrock Form UI для магазинов (требуются Geyser и Floodgate)
- Формы Bedrock отображаются только игрокам с Bedrock
- Добавлена настройка, позволяющая показывать формы Bedrock только на устройствах с сенсорным экраном, таких как iOS или Android
- Добавлена поддержка JsonShopForms для Bedrock, благодаря которой обычные формы выглядят как сетка
- Подробнее: GPPlugins - Premium Minecraft Plugins
- Поддерживаются любые размеры инвентаря (в отличие от стандартных инвентарей Geyser, которые поддерживают только половинный или полный размер)
- Инвентарь больше не отображается некорректно на устройствах с маленьким экраном
- Простая поддержка пользовательских текстур GUI (аналогично шрифтам-глифам ItemsAdder/Nexo в заголовках)
- Простая поддержка пользовательских текстур предметов
- Предметы поддерживают размеры стопок и индикаторы прочности, в отличие от обычных форм, использующих обычные изображения предметов в качестве иконок
- Используется сеточное отображение вместо списка, как в обычных формах
- Поддерживаются 3D-иконки блоков благодаря пользовательскому рендереру иконок (как в обычных сундуках)
- При открытом магазине над игроком больше не отображается парящий сундук
- Добавлена возможность отдельно задавать заголовок инвентаря для игроков Bedrock на уровне секции, страницы магазина и каждого меню
- Например, это позволяет использовать разные UI-оверлеи в зависимости от заголовка для игроков Bedrock по сравнению с интерфейсом для Java-игроков
- Ссылка на вики: Sections | EconomyShopGUI wiki
- Добавлена поддержка отдельных текстур Bedrock для каждого предмета магазина
- Используется для задания текстуры предмета при использовании прокси-серверов
Исправлено:
- CoinsEngine переименован в ExcellentEconomy во внутренних компонентах
- Провайдеры экономики в конфигурации, несколько цен покупки/продажи предметов и переопределения формата валюты автоматически обновятся с CoinsEngine на ExcellentEconomy при обновлении плагина
- Обновлены языковые файлы из Crowdin. Спасибо всем участникам, которые помогали с переводами: EconomyShopGUI Project Activity Stream
- Добавлены файлы перевода на традиционный китайский и китайский (Гонконг)
- lang-cz.yml переименован в lang-cs.yml (при обновлении будет переименован автоматически)
- lang-jp.yml переименован в lang-ja.yml (при обновлении будет переименован автоматически)
Для разработчиков:
- Предметы, у которых был указан только item_name без пользовательского имени, отображались в сообщении о транзакции с названием материала, даже если в конфигурации была включена настройка use-item-name
- Исправлена проверка наличия определённых данных компонентов предмета на серверах 1.20.5+
- Добавлены API-методы для записи транзакций во внешних плагинах в базу данных EconomyShopGUI
- Добавлены API-методы для открытия экрана транзакции для определённого предмета у конкретного игрока
- Методы #purchase/sellItem(), добавленные начиная с API v1.11.0-b.1, объявлены устаревшими. Вместо них рекомендуется использовать новые методы с дополнительным параметром transactionType, предназначенным для записи транзакций
- Исправлено исключение Modifier Manager при отключении плагина.
- Исправлен экспорт логов через /eshop logs, который не работал, пока кэш транзакций не был загружен вручную с помощью плейсхолдера, например /papi parse --null %esgui_FIRST_most_sold_item_current_MONTH%.
- Исправлено экранирование слов между <> в плейсхолдерах в описании предметов магазина при использовании Paper Meta.
- Исправлена работа кэша плейсхолдеров для новых плейсхолдеров предметов.
Добавлено
- Добавлена глобальная задержка между кликамив GUI.
- Настраивается в конфигурации.
- Значение по умолчанию — 125 мс.
- Добавлена поддержка требований по предметам заданий для BetonQuest и BeautyQuests.
- Добавлена поддержка SilkSpawners_v2 API v3.
- Добавлена прямая поддержка экономики VaultUnlocked в качестве провайдера мультивалютной системы.
- Категории магазинов теперь можно автоматически скрывать из главного меню, если у игрока нет необходимых прав, с помощью настройки hide-if-no-perms в конфигурации раздела магазина.
- Добавлены плейсхолдеры для отдельных товаров магазина, отображающие количество покупок и продаж за определённый период времени.
- Добавлены персональные плейсхолдеры, отображающие количество покупок и продаж конкретного товара данным игроком за выбранный период.
- Добавлена возможность продавать предметы независимо от их прочности.
- Цена продажи автоматически рассчитывается с учётом процента оставшейся прочности.
- Множитель стоимости настраивается в config.yml.
- Функцию можно включать и отключать отдельно для каждого раздела магазина.
- При обновлении плагина функция по умолчанию отключена, чтобы не изменить поведение уже существующих магазинов. При новой установке она включается автоматически.
Изменено
- Плейсхолдеры статистики покупок и продаж с периодами WEEK и MONTH теперь используют последние 7 и 30 дней, а не текущую календарную неделю или месяц.
- Исправлены ситуации, при которых плейсхолдеры со временем WEEK или MONTH могли не отображать данные.
- Если это возможно, меню магазинов теперь обновляются динамически, без полного переоткрытия GUI, что устраняет мерцание при переключении страниц.
- Это работает для магазинов без уникальных заголовков или плейсхолдеров для отдельных страниц.
- Теперь игроки могут свободно перемещать предметы в своём инвентаре, пока открыт интерфейс магазина.
Исправлено
- Исправлена проблема, из-за которой плейсхолдеры вида %esgui_buy_price_<section>.<itemIndex>% не работали в описании предметов на серверах 1.20.4 и ниже, поскольку CraftBukkitвоспринимал их как URL.
- Теперь вместо . можно использовать символ >, чтобы избежать подобных проблем и в других плагинах.
- Исправлена ошибка NPE, возникавшая при нажатии ПКМ по товару с ограниченной продажей.
- Исправлен эксплойт в новой стандартной конфигурации, связанный с бирками (Name Tags).
- Исправлена ошибка NPE, возникавшая, если игрок заходил на сервер до завершения отложенной загрузки плагина при инициализации модификаторов команд.
- Исправлена работа плейсхолдера %material-name% в удобочитаемом формате для предметных валют при выборе другой валюты через переопределение формата.
- Исправлена продажа спавнеров из RoseStacker.
- Исправлена ошибка NPE, возникавшая при возврате назад из редактора GUI после изменения цены товара с использованием динамического ценообразования.
- Исправлена ошибка, из-за которой продажа предметов через SELL_ALL в GUI магазина игнорировала установленный лимит продажи (появилась в предыдущем обновлении).
- Исправлена ошибка, из-за которой кнопка «Назад» на второй, третьей, четвёртой и последующих страницах подразделов всегда возвращала в главное меню.
- Исправлена загрузка поддержки MiniMessage на серверах Spigot и Leaf.
- Обновлён хук SpawnerLegacy.
- Исправлено округление цен при динамическом ценообразовании с большим максимальным запасом товара.
- Исправлена ошибка, из-за которой удаление модификаторов секции у игрока применялось только к первому предмету в разделе до выполнения команды /sreload.
Исправления:
- Добавлена поддержка Minecraft 26.2.
- Добавлена поддержка Adventure lib 5.1.
- Добавлено действие SET amount для предметов в окне транзакций.
- Добавлена поддержка спавнеров для встроенного провайдера спавнеров Purpur.
- Добавлена опция конфигурации для ручного отключения Vault prefix/suffix (например, при использовании чат-плагина, который уже их обрабатывает).
- Опция DiscordSRV-channel теперь может принимать ID канала (полезно при использовании эмодзи в названии канала).
Для разработчиков:
- Исправлена проблема, из-за которой клик по onlyForGeyserPlayers fill-элементу срабатывал у Java-игроков, даже если предмет не отображался.
- Проведена очистка и улучшение кода.
- Добавлены API-методы #sellItem и #purchaseItem для покупки/продажи предметов через единый вызов с автоматической проверкой и обновлением свойств/лимитов.