FreeMinecraftModelsの家具ショップ
購入専用にするには、config.yml に registerCraftingRecipes: false を設定して再起動します。有効で正常な項目はショップに残りますが、Bukkit のクラフトとプレイヤーの /fmm クラフト可能アイテムメニューからは削除されます。デフォルトは true です。
FreeMinecraftModelsには、プレイヤーがゲーム内通貨でクラフタブルプロップを購入できるオプションのVault対応ショップが同梱されています。ショップはデフォルトで無効であり — 明示的に有効化され、かつVaultエコノミープロバイダが利用可能な場合にのみ自分自身を登録します。
クイックセットアップ
- Vaultと、Vault互換のエコノミープロバイダ(EssentialsX、CMIなど)をインストールします。
plugins/FreeMinecraftModels/shop_config.ymlが生成されるよう、サーバーを一度起動します。shop_config.ymlでenabled: trueを設定します。- サーバーを再起動するか、
/fmm reloadを正常に完了します。ショップは完全な初期化時に登録されます。 - ゲーム内で
/fmm shopを実行してメニューが開くことを確認します。
前提条件が欠けるとショップのサブコマンドは未登録のままなので、そのハンドラー経由では設定可能な無効メッセージは使われません。ショップが有効でも Vault や経済プロバイダーがなければ、FMM は具体的な警告を記録します。
仕組み
- ショップは
plugins/FreeMinecraftModels/recipes/からレシピを読み取ります。 - ロード済みで
isEnabled: trueかつshopEnabled: trueのレシピを表示します。レシピは1つのカタログとして読み込まれます。YAMLの構文エラー、同じmodel_idに対する2つの有効なレシピファイル、またはサーバーが拒否したレシピがあると、1件だけが除外されるのではなくカタログ全体が失敗するため、/fmm reloadの後はコンソールを確認してください。クラフトを無効にしても、登録時にはレシピを構築・検証します - 各項目は紙アイテムを使い、利用可能ならモデルの外観に加え、価格行、購入案内、モデル ID を表示します。購入で受け取るのはモデルを設置する紙アイテムです。この経路では
material:とエンチャントから作者の武器を作りません - エントリをクリックすると
PurchaseHandlerが呼び出され、Vaultを介してプレイヤーの残高をチェックし、価格を引き出し、配置アイテムをプレイヤーに付与します。インベントリに収まらないアイテムはプレイヤーの足元にドロップされます。
権限
| 権限 | デフォルト | 説明 |
|---|---|---|
freeminecraftmodels.shop | true | ショップを開くために必要。デフォルトはtrueなので、すべてのプレイヤーが閲覧できます |
権限だけではショップを有効にできません — shop_config.ymlでのenabled: trueと、機能するエコノミープロバイダが引き続き必要です。
shop_config.yml
完全なキーリファレンスについては設定ページを参照してください。主なキーは以下です:
enabled— マスター切り替え(デフォルトfalse)defaultPrice—shopPriceがないレシピのデフォルト。0以下なら100.0を使用します。変更しても保存済みの個別価格は置き換えませんmenuTitle、priceLoreFormat、clickToBuyLoreFormat— ビジュアルスタイルmessages.*— 5つのカスタマイズ可能なフィードバックメッセージ
すべてのメッセージ文字列は&カラーコードと、設定リファレンスに記載されているプレースホルダに対応しています。
レシピごとのフィールド
plugins/FreeMinecraftModels/recipes/<model_id>.yml内の各レシピには、ショップ固有の2つのフィールドがあります:
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 | shop_config.ymlのdefaultPrice | プレイヤーがアイテムをクリックしたときのVault通貨コスト |
/fmm craftifyビルダーは保存時に両方のフィールドを書き込むため、価格調整はレシピファイルでのテキスト編集と/fmm reloadだけで済みます。
購入結果
PurchaseHandlerは7つの結果を認識します。最初の5つはshop_config.ymlの設定可能なメッセージにマップされ、配布失敗の2つのメッセージは固定です:
| 結果 | 発生する状況 | メッセージキー |
|---|---|---|
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 には0以上の有限値を使ってください。購入ハンドラーは Vault を呼ぶ前に値を検証しません。引き落とし拒否の応答は INSUFFICIENT_FUNDS を返しますが、引き落とし中のプロバイダーの例外はここでは捕捉しません。フックは初期化時のプロバイダーを保持し、その削除を継続的に検出しません。
引き落とし後の配布で例外が発生した場合、FMM は購入分のうちインベントリまたは地面に届いた数を数え、残りの価格を返金します。その返金に失敗した場合や配布済みの数量を読み取れない場合、FMM はショップを無効化し、確認が必要なプレイヤーの UUID と金額を添えて [FMM Shop] Disabled after unresolved purchase をログに記録します。支払いを精算して /fmm reload を実行するまで、ショップは無効のままです。
トラブルシューティング
/fmm shopが存在しません。
ショップが未登録です。以下の3つすべてを確認してください:
- Vaultがインストールされている
- エコノミープロバイダが登録されている(
/balanceまたは/ecoを実行して応答するものがあるか確認) shop_config.ymlでenabled: true
その後、サーバーを再起動するか /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 を実行してショップを再度有効にしてください。