Магазин мебели FreeMinecraftModels
Для экономики только с покупками установите registerCraftingRecipes: false в config.yml и перезапустите сервер. Корректные включённые записи останутся в каталоге магазина, но будут удалены из крафта Bukkit и меню доступных для крафта предметов /fmm. По умолчанию настройка равна true.
FreeMinecraftModels поставляется с опциональным магазином на базе Vault, в котором игроки могут покупать крафтящиеся реквизиты за внутриигровую валюту. Магазин отключён по умолчанию — он регистрируется только когда явно включён и доступен экономический провайдер Vault.
Быстрая настройка
- Установите Vault и совместимый с Vault экономический провайдер (EssentialsX, CMI и т. п.).
- Запустите сервер один раз, чтобы создался
plugins/FreeMinecraftModels/shop_config.yml. - Установите
enabled: trueвshop_config.yml. - Перезапустите сервер или успешно завершите
/fmm reload; магазин регистрируется при полной инициализации. - Выполните
/fmm shopв игре, чтобы убедиться, что меню открывается.
Если не выполнено какое-либо условие, подкоманда магазина остаётся незарегистрированной, поэтому её обработчик не использует настраиваемое сообщение об отключении. Если магазин включён, но отсутствует Vault или его экономический провайдер, FMM записывает конкретное предупреждение.
Как это работает
- Магазин читает рецепты из
plugins/FreeMinecraftModels/recipes/. - Магазин показывает загруженные рецепты с
isEnabled: trueиshopEnabled: true. Рецепты загружаются как единый каталог: синтаксическая ошибка YAML, два включённых файла рецептов для одногоmodel_idили рецепт, отклонённый сервером, приводят к сбою всего каталога, а не к выпадению одной записи, поэтому проверяйте консоль после/fmm reload. Регистрация создаёт и проверяет рецепт и при отключённом крафте - Каждая запись использует бумажный предмет с внешним видом модели, если он доступен, строкой цены, приглашением к покупке и ID модели. Покупка выдаёт бумажный предмет размещения модели; этот путь не создаёт авторское оружие по его
material:и зачарованиям - Клик по записи вызывает
PurchaseHandler, который проверяет баланс игрока через Vault, списывает цену и выдаёт игроку предмет размещения. Предметы, не помещающиеся в инвентарь, роняются под ноги игроку.
Права
| Право | По умолчанию | Описание |
|---|---|---|
freeminecraftmodels.shop | true | Требуется для открытия магазина. По умолчанию true, чтобы каждый игрок мог смотреть |
Одно лишь это право не включает магазин — всё равно требуется enabled: true в shop_config.yml и рабочий экономический провайдер.
shop_config.yml
См. страницу конфигурации для полной справки по ключам. Основные ключи:
enabled— главный переключатель (по умолчаниюfalse)defaultPrice— значение для рецептов безshopPrice; неположительное значение заменяется на100.0. Его изменение не заменяет уже сохранённые цены рецептовmenuTitle,priceLoreFormat,clickToBuyLoreFormat— визуальный стильmessages.*— пять настраиваемых сообщений обратной связи
Все строки сообщений поддерживают цветовые коды & и плейсхолдеры, перечисленные в справке по конфигурации.
Поля в рецептах
Каждый рецепт в plugins/FreeMinecraftModels/recipes/<model_id>.yml несёт два специфичных для магазина поля:
isEnabled: true
model_id: "wooden_chair"
shape:
- "L L"
- "LLL"
- "L L"
ingredients:
L: OAK_LOG
shopEnabled: true
shopPrice: 250.0
| Поле | По умолчанию | Поведение |
|---|---|---|
shopEnabled | true | При false рецепт скрыт от покупки. Крафт по-прежнему зависит от включения рецепта и registerCraftingRecipes |
shopPrice | defaultPrice из shop_config.yml | Стоимость в валюте Vault при клике игрока по предмету |
Конструктор /fmm craftify записывает оба поля при сохранении, так что настройка цены сводится к правке текста в файле рецепта и последующему /fmm reload.
Исходы покупки
PurchaseHandler различает семь исходов. Первым пяти соответствуют настраиваемые сообщения в shop_config.yml; два сообщения о сбое выдачи фиксированы:
| Исход | Срабатывает когда | Ключ сообщения |
|---|---|---|
SUCCESS | Списание прошло успешно и предмет поместился в инвентарь | messages.purchaseSuccess |
SUCCESS_WITH_OVERFLOW | Списание прошло успешно, но предмет пришлось бросить под ноги игроку | messages.purchaseSuccess + messages.inventoryFull |
INSUFFICIENT_FUNDS | Баланс игрока ниже цены или базовый экономический провайдер отклонил списание | messages.insufficientFunds |
NOT_FOR_SALE | Рецепт отключён, имеет shopEnabled: false или его модель не загружена | messages.itemNotForSale |
SHOP_DISABLED | Конфигурация магазина или сохранённый хук Vault сообщает об отключении | messages.shopDisabled |
DELIVERY_FAILED_REFUNDED | Списание прошло успешно, выдача не удалась, а невыданная сумма возвращена | Фиксированное: The item could not be delivered. The undelivered amount was refunded. |
DELIVERY_FAILED_REFUND_PENDING | Списание прошло успешно, выдача не удалась, а возврат не прошёл или выданное количество не удалось определить | Фиксированное: The purchase could not be settled. The shop has been disabled; contact an administrator to review your payment. |
Используйте конечные неотрицательные значения shopPrice. Обработчик покупки не проверяет их перед вызовом Vault. Ответ с отказом в списании возвращает INSUFFICIENT_FUNDS, но исключения провайдера во время списания здесь не перехватываются. Хук сохраняет провайдер при инициализации и не отслеживает его удаление постоянно.
Если после списания выдача выбрасывает исключение, FMM подсчитывает, какая часть покупки попала в инвентарь или на землю, и возвращает на счёт стоимость остального. Если этот возврат не удался или выданное количество не удаётся определить, FMM отключает магазин и записывает в журнал [FMM Shop] Disabled after unresolved purchase с UUID игрока и суммой для проверки. Магазин остаётся отключённым, пока вы не урегулируете платёж и не выполните /fmm reload.
Решение проблем
/fmm shop не существует.
Магазин не зарегистрирован. Проверьте все три условия:
- Установлен Vault
- Зарегистрирован экономический провайдер (выполните
/balanceили/eco, чтобы убедиться, что провайдер отвечает) enabled: trueвshop_config.yml
Затем перезапустите сервер или завершите /fmm reload. Перезагрузка только контента от импортера не инициализирует конфиг магазина заново и не регистрирует его команду.
В меню отсутствуют предметы, которые я ожидаю увидеть.
Откройте файл рецепта в plugins/FreeMinecraftModels/recipes/. Убедитесь, что isEnabled и shopEnabled оба равны true. После правки выполните /fmm reload.
С игроков списывают валюту, но они не получают предмет.
Проверьте, не выпал ли предмет под ноги игроку из-за переполнения инвентаря, и изучите консоль в момент клика. Ответ с отказом в списании возвращает INSUFFICIENT_FUNDS; исключение провайдера во время списания не преобразуется в этот результат. Неудачная выдача записывает в журнал [FMM Shop] Item delivery failed с количеством выданного и суммой возврата. Если консоль показывает [FMM Shop] Disabled after unresolved purchase, возврат не прошёл: урегулируйте этот платёж вручную, сохраните журнал консоли и подтверждение транзакции провайдера, затем выполните /fmm reload, чтобы снова включить магазин.