Перейти к основному содержимому

Магазин мебели FreeMinecraftModels

FreeMinecraftModels поставляется с опциональным магазином на базе Vault, в котором игроки могут покупать крафтящиеся реквизиты за внутриигровую валюту. Магазин отключён по умолчанию — он регистрируется только когда явно включён и доступен экономический провайдер Vault.

Быстрая настройка

  1. Установите Vault и совместимый с Vault экономический провайдер (EssentialsX, CMI и т. п.).
  2. Запустите сервер один раз, чтобы создался plugins/FreeMinecraftModels/shop_config.yml.
  3. Установите enabled: true в shop_config.yml.
  4. Перезапустите сервер (магазин регистрируется при старте).
  5. Выполните /fmm shop в игре, чтобы убедиться, что меню открывается.

Если хотя бы одно из этих условий отсутствует, команда /fmm shop остаётся незарегистрированной, и игроки видят ошибку «нет такой команды», а не настраиваемое сообщение об отключении.

Как это работает

  • Магазин читает рецепты из plugins/FreeMinecraftModels/recipes/.
  • В магазин попадает каждый рецепт, у которого isEnabled: true и shopEnabled: true.
  • Каждая запись показывает итоговый предмет рецепта (бумажный предмет размещения реквизита) с двумя добавленными строками lore: строкой Price: и подсказкой Click to purchase.
  • Клик по записи вызывает PurchaseHandler, который проверяет баланс игрока через Vault, списывает цену и выдаёт игроку предмет размещения. Предметы, не помещающиеся в инвентарь, роняются под ноги игроку.

Права

ПравоПо умолчаниюОписание
freeminecraftmodels.shoptrueТребуется для открытия магазина. По умолчанию true, чтобы каждый игрок мог смотреть

Одно лишь это право не включает магазин — всё равно требуется enabled: true в shop_config.yml и рабочий экономический провайдер.

shop_config.yml

См. страницу конфигурации для полной справки по ключам. Основные ключи:

  • enabled — главный переключатель (по умолчанию false)
  • defaultPrice — записывается в файлы рецептов, у которых не задано собственное shopPrice
  • 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
ПолеПо умолчаниюПоведение
shopEnabledtrueКогда false, рецепт по-прежнему крафтится, но никогда не появляется в /fmm shop
shopPricedefaultPrice из 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: falsemessages.itemNotForSale
SHOP_DISABLEDПринудительно отключён во время работы (например, пропал экономический провайдер)messages.shopDisabled

Решение проблем

/fmm shop не существует. Магазин не зарегистрирован. Проверьте все три условия:

  • Установлен Vault
  • Зарегистрирован экономический провайдер (выполните /balance или /eco, чтобы убедиться, что провайдер отвечает)
  • enabled: true в shop_config.yml

Затем перезапустите сервер. Команда регистрируется только при старте.

В меню отсутствуют предметы, которые я ожидаю увидеть. Откройте файл рецепта в plugins/FreeMinecraftModels/recipes/. Убедитесь, что isEnabled и shopEnabled оба равны true. После правки выполните /fmm reload.

С игроков списывают валюту, но они не получают предмет. Проверьте консоль сервера на ошибки Vault. Обработчик списывает валюту только после успешной проверки баланса, но downstream-провайдер экономики всё равно может отклонить само списание — обработчик ловит это и возвращает INSUFFICIENT_FUNDS. Если списание прошло, но предмет так и не появился, заведите баг-репорт с полным логом консоли в момент клика.