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

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

Для экономики только с покупками установите registerCraftingRecipes: false в config.yml и перезапустите сервер. Корректные включённые записи останутся в каталоге магазина, но будут удалены из крафта Bukkit и меню доступных для крафта предметов /fmm. По умолчанию настройка равна true.

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

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

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

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

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

  • Магазин читает рецепты из plugins/FreeMinecraftModels/recipes/.
  • Магазин показывает загруженные рецепты с isEnabled: true и shopEnabled: true. Рецепты загружаются как единый каталог: синтаксическая ошибка YAML, два включённых файла рецептов для одного model_id или рецепт, отклонённый сервером, приводят к сбою всего каталога, а не к выпадению одной записи, поэтому проверяйте консоль после /fmm reload. Регистрация создаёт и проверяет рецепт и при отключённом крафте
  • Каждая запись использует бумажный предмет с внешним видом модели, если он доступен, строкой цены, приглашением к покупке и ID модели. Покупка выдаёт бумажный предмет размещения модели; этот путь не создаёт авторское оружие по его material: и зачарованиям
  • Клик по записи вызывает PurchaseHandler, который проверяет баланс игрока через Vault, списывает цену и выдаёт игроку предмет размещения. Предметы, не помещающиеся в инвентарь, роняются под ноги игроку.

Права​

ПравоПо умолчаниюОписание
freeminecraftmodels.shoptrueТребуется для открытия магазина. По умолчанию 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
ПолеПо умолчаниюПоведение
shopEnabledtrueПри false рецепт скрыт от покупки. Крафт по-прежнему зависит от включения рецепта и registerCraftingRecipes
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: 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, чтобы снова включить магазин.