Для управления товарами в магазине используются JSON файлы, которые необходимо создавать вручную в папке «.minecraft/config/oxygen/data/server/store/offers/». Текстуры для виджетов и иконок должны быть размещены в папке «.minecraft/config/oxygen/data/server/store/offers/textures/». Для перезагрузки данных во время игры можно использовать команду «/oxygenop store -reload-offers» (доступна операторам и консоли, только при значении «enable_store_management_ingame: true» в файле конфигурации Store).
Товары (описание и текстуры) синхронизируются с игроками автоматически и кэшируются на клиенте для оптимизации работы магазина.
Пример конфигурации можно взять тут. Вы можете скачать и поместить содержимое этой папки в корневую папку игры и протестировать всё самостоятельно.
Пример стуктуры JSON файла для описания товаров в магазине:
Файл конфигурации товаров представляет собой массив JSON объектов, где каждый объект содержит информацию об одном товаре. Store попытается загрузить содержимое всех JSON файлов в папке «.minecraft/config/oxygen/data/server/store/offers/» (включая вложенные папки), так что предлагается для каждой категории товаров создавать отдельный файл для удобства.
Для перезагрузки данных во время игры можно использовать команду «/oxygenop store -reload-offers», убедитесь что вы обновили «version_id» отредактированной сделки.
Порядок сделок в магазине зависит от их порядка в конфиге
Каждый товар представлен отдельным JSON объектом.
Идентификатор служит для сохранения ссылки на товар в системе подарков, так что если товар можно преобрести в подарок, то этот идентификатор не должен изменяться. Число должно быть уникальным относительно «persistent_id» и «version_id» других товаров.
В случае необходимости отредактировать товар (изменить описание, цену и т.д) для товара, который может быть куплен в подарок используется этот параметр. После внесения изменений его необходимо обновить, сохранив при этом уникальность относительно «persistent_id» и «version_id» других товаров. Обновление этого значения обеспечивает синхронизацию изменений с игроками.
Существуют три типа товаров: ITEM (набор предметов), COMMAND (выполнение команды от имени консоли) и SCRIPT (выполнение скрипта).
Категория определяет заздел, в котором будет отображаться товар в интерфейсе магазина. В качестве значения можно использовать значение «как есть» (прим. «Оружие») или ключ локализации для lang файлов (прим. «oxygen.store.category.weapon», c дальнейшим добавлением локализации для ключа).
Название будет отображаться в интерфейсе магазина.
Описание будет отображаться в интерфейсе магазина. Описание при отображении будет автоматически разделено на строки при необходимости, есть возможность вручную указать место переноса строки с помощью разделителя «\n».
Если указна стоимость «0», то товар можно получить бесплатно неограниченное количество раз. В этом случае рекомендуется настроить лимит «max_purchases» и/или «purchase_cooldown».
Если значение больше нуля, то оно будет использовано в качестве стоимости, а в интерфейсе магазина у виджета товара появиться индикация скидки.
Если необходимо снять товар с продажи, установите значение «false». Это лишит игроков возможности видеть товар в магазине и покупать его, но сохранит его в системе подарков.
Если товар можно купить в подарок другому игроку, установите «true».
Значение «- 1» означает отсутствие ограничений. При исчерпании лимита покупок игрок не сможет покупать товар для себя, в подарок или получать товар в качестве подарка.
Значение «0» означает отсутствие кулдауна. Во время действия кулдауна игрок не сможет покупать товар для себя, в подарок или принимать товар в качестве подарка.
Виджет может быть двух размеров: «BIG» (большой, 170 на 56 пикселей) и «SMALL» (маленький, 84 на 56 пикселей). Размер виджета определяет размеры текстуры для него. Размер текстуры должен быть кратным размеру виджета.
Каждый товар может иметь уникальную текстуру виджета (фона). Текстура должна быть расположена в папке «.minecraft/config/oxygen/data/server/store/offers/textures/». Текстуры могут быть расположены во вложенных папках, тогда название дополнительно должно содержать каталог (прим. «weapon/weapon_pack_1.png»). При отсутствии файла будет использована стандартная текстура «MISSING_TEXTURE».
Опционально. Иконки могут быть двух типов: «ITEM» (стандартный предмет) и «TEXTURE» (текстура с тултипом). Иконки позволяют дополнить виджет товара важной информацией - показать предметы, входящие в набор или описать товар с несколькими услугами.
Пример:
Структура:
Описание параметров:
Координаты выставляются вручную, это позволяет размещать иконки на виджете в любом месте. Размеры виджетов: большой - 170 на 56 пикселей, маленький - 84 на 56 пикселей.
Данные любого предмета могут быть получены в игре с помощью команды «/oxygenc core -item -to-json {название файла (в одно слово, без .json)}» (предмет должен быть в руке). Файл будет создан в папке «.minecraft/config/oxygen/data/client/core/itemstack/».
Пример:
Структура:
Описание параметров:
Координаты выставляются вручную, это позволяет размещать иконки на виджете в любом месте. Размеры виджетов: большой - 170 на 56 пикселей, маленький - 84 на 56 пикселей.
Текстура должна быть расположена в папке «.minecraft/config/oxygen/data/server/store/offers/textures/». Текстуры могут быть расположены во вложенных папках, тогда название дополнительно должно содержать каталог (прим. «icons/icon_64x64.png»). При отсутствии файла будет использована стандартная текстура «MISSING_TEXTURE».
Для переноса текста на следующую строку используйте разделитель «\n».
Существуют три типа товаров: ITEM (набор предметов), COMMAND (выполнение команды от имени консоли) и SCRIPT (выполнение скрипта). В зависимости от типа указанного в «type» этот объект должен содержать:
Набор предметов представляется в виде массива JSON объектов, содержащих данные предметов и количество каждого предмета.
Структура:
Описание параметров:
Данные любого предмета могут быть получены в игре с помощью команды «/oxygenc core -item -to-json {название файла (в одно слово, без .json)}» (предмет должен быть в руке). Файл будет создан в папке «.minecraft/config/oxygen/data/client/core/itemstack/».
Набор команд представляется в виде массива строк. Команды должны начинаться со слэша «/». Указатели: «@p» - ник игрока, «@pX» - координата игрока по X, «@pY» - координата игрока по Y, «@pZ» - координата игрока по Z, «@dim» - идентификатор измерения (числа int).
Для работы некоторых команд требуется включить командные блоки
Структура:
Скрипт должен быть расположен в папке «.minecraft/config/oxygen/data/server/store/offers/scripts/». Скрипты могут быть расположены во вложенных папках, тогда название дополнительно должно содержать каталог (прим. «misc/misc_1.ts»). Скрипт должен возвращать boolean значение «true» при успешном выполнении для успешного завершения операции покупки.
Примечание: Поддержка скриптов обеспечивается аддонами Scripting Adapter (WIP), однако Core имеет встроенный адаптер для ECMAScript (TypeScript, JavaScript) и для его активации нужно установить значение «enable_ecmascript_adapter: true» в конфиге «core.json».