Aller au contenu principal

Boutique de mobilier FreeMinecraftModels

Pour une économie fondée uniquement sur les achats, définissez registerCraftingRecipes: false dans config.yml et redémarrez. Les entrées valides et activées restent dans le catalogue de la boutique, mais sont retirées de la fabrication Bukkit et du menu de fabrication /fmm des joueurs. Ce réglage vaut true par défaut.

FreeMinecraftModels propose une boutique facultative utilisant Vault pour acheter des props fabricables avec la monnaie du jeu. Elle est désactivée par défaut et ne s'enregistre que lorsqu'elle est explicitement activée et qu'un fournisseur d'économie Vault est disponible.

Configuration rapide​

  1. Installez Vault et un fournisseur d'économie compatible Vault (EssentialsX, CMI, etc.).
  2. Démarrez le serveur une fois pour que plugins/FreeMinecraftModels/shop_config.yml soit généré.
  3. Définissez enabled: true dans shop_config.yml.
  4. Redémarrez le serveur ou terminez avec succès /fmm reload ; la boutique s'enregistre pendant l'initialisation complète.
  5. Exécutez /fmm shop en jeu pour confirmer que le menu s'ouvre.

Si un prérequis manque, la sous-commande de boutique reste non enregistrée : son gestionnaire n'utilise donc pas le message configurable de désactivation. Si la boutique est activée mais que Vault ou son fournisseur d'économie manque, FMM journalise un avertissement précis.

Fonctionnement​

  • La boutique lit les recettes depuis plugins/FreeMinecraftModels/recipes/.
  • La boutique liste les recettes chargées avec isEnabled: true et shopEnabled: true. Les recettes se chargent comme un seul catalogue : une erreur de syntaxe YAML, deux fichiers de recette activés pour le même model_id ou une recette rejetée par le serveur font échouer tout le catalogue au lieu de retirer une seule entrée ; consultez donc la console après /fmm reload. L'enregistrement construit et valide encore la recette lorsque la fabrication est désactivée
  • Chaque entrée utilise un objet en papier avec l'apparence du modèle si elle est disponible, une ligne de prix, une invitation à acheter et l'identifiant du modèle. Les achats produisent l'objet en papier servant à placer le modèle ; cette procédure ne crée pas une arme à partir de son material: et de ses enchantements
  • Cliquer sur une entrée appelle PurchaseHandler, qui vérifie le solde via Vault, prélève le prix et donne l'objet de placement au joueur. Les objets qui ne tiennent pas dans l'inventaire sont déposés à ses pieds.

Permissions​

PermissionDéfautDescription
freeminecraftmodels.shoptrueNécessaire pour ouvrir la boutique. Vaut true par défaut pour que tous les joueurs puissent la consulter

La permission seule n'active pas la boutique — enabled: true dans shop_config.yml et un fournisseur d'économie fonctionnel sont toujours requis.

shop_config.yml​

Voir la page Configuration pour la référence complète des clés. Les clés principales sont :

  • enabled — interrupteur principal (défaut false)
  • defaultPrice — valeur des recettes sans shopPrice ; une valeur nulle ou négative est remplacée par 100.0. Sa modification ne remplace pas les prix déjà enregistrés par recette
  • menuTitle, priceLoreFormat, clickToBuyLoreFormat — style visuel
  • messages.* : cinq messages de résultat personnalisables

Tous les messages acceptent les codes de couleur & et les variables de substitution indiquées dans la référence de configuration.

Champs par recette​

Chaque recette dans plugins/FreeMinecraftModels/recipes/<model_id>.yml porte deux champs spécifiques à la boutique :

isEnabled: true
model_id: "wooden_chair"
shape:
- "L L"
- "LLL"
- "L L"
ingredients:
L: OAK_LOG
shopEnabled: true
shopPrice: 250.0
ChampDéfautComportement
shopEnabledtrueAvec false, la recette est masquée à l'achat. La fabrication dépend toujours de l'activation de la recette et de registerCraftingRecipes
shopPricedefaultPrice depuis shop_config.ymlCoût en monnaie Vault lorsque le joueur clique sur l'objet

L'éditeur /fmm craftify écrit ces deux champs à l'enregistrement, donc ajuster le prix se fait par une simple édition de texte sur le fichier de recette suivi de /fmm reload.

Résultats d'achat​

PurchaseHandler distingue sept résultats. Les cinq premiers sont associés à des messages configurables dans shop_config.yml ; les deux messages d'échec de livraison sont fixes :

RésultatDéclenché lorsqueClé de message
SUCCESSLe retrait a réussi et l'objet a tenu dans l'inventairemessages.purchaseSuccess
SUCCESS_WITH_OVERFLOWLe prélèvement a réussi, mais l'objet a dû être déposé aux pieds du joueurmessages.purchaseSuccess + messages.inventoryFull
INSUFFICIENT_FUNDSSolde du joueur sous le prix, ou le fournisseur d'économie sous-jacent a rejeté le retraitmessages.insufficientFunds
NOT_FOR_SALELa recette est désactivée, a shopEnabled: false, ou son modèle n'est pas chargémessages.itemNotForSale
SHOP_DISABLEDLa configuration de la boutique ou la connexion Vault mise en cache indique une désactivationmessages.shopDisabled
DELIVERY_FAILED_REFUNDEDLe prélèvement a réussi, la livraison a échoué et le montant non livré a été rembourséFixe : The item could not be delivered. The undelivered amount was refunded.
DELIVERY_FAILED_REFUND_PENDINGLe prélèvement a réussi, la livraison a échoué, et le remboursement a échoué ou la quantité livrée n'a pas pu être lueFixe : The purchase could not be settled. The shop has been disabled; contact an administrator to review your payment.

Utilisez des valeurs shopPrice finies et non négatives. Le gestionnaire d'achat ne les valide pas avant d'appeler Vault. Une réponse de prélèvement refusé renvoie INSUFFICIENT_FUNDS, mais les exceptions du fournisseur pendant le prélèvement ne sont pas interceptées ici. La connexion conserve son fournisseur lors de l'initialisation et ne détecte pas continuellement sa disparition.

Si la livraison lève une exception après le prélèvement, FMM compte la part de l'achat qui a atteint l'inventaire ou le sol et rembourse le prix du reste. Si ce remboursement échoue, ou si la quantité livrée ne peut pas être lue, FMM désactive la boutique et journalise [FMM Shop] Disabled after unresolved purchase avec l'UUID du joueur et le montant à vérifier. La boutique reste désactivée jusqu'à ce que vous régularisiez le paiement et exécutiez /fmm reload.

Dépannage​

/fmm shop n'existe pas. La boutique n'est pas enregistrée. Vérifiez les trois :

  • Vault est installé
  • Un fournisseur d'économie est enregistré (exécutez /balance ou /eco pour confirmer qu'un répond)
  • enabled: true dans shop_config.yml

Redémarrez ensuite le serveur ou terminez /fmm reload. Un rechargement limité au contenu déclenché par l'importateur ne réinitialise pas la configuration de la boutique et n'enregistre pas sa commande.

Les objets que je m'attends à voir sont absents du menu. Ouvrez le fichier de recette dans plugins/FreeMinecraftModels/recipes/. Vérifiez que isEnabled et shopEnabled sont tous deux à true. Exécutez /fmm reload après modification.

Les joueurs sont débités mais n'obtiennent pas d'objet. Cherchez un objet déposé aux pieds du joueur faute de place et examinez la console autour du clic. Une réponse de prélèvement refusé renvoie INSUFFICIENT_FUNDS ; une exception du fournisseur pendant le prélèvement n'est pas convertie en ce résultat. Une livraison échouée journalise [FMM Shop] Item delivery failed avec la quantité livrée et le remboursement. Si la console affiche [FMM Shop] Disabled after unresolved purchase, le remboursement n'a pas abouti : régularisez ce paiement manuellement, conservez le journal de console et la preuve de transaction du fournisseur, puis exécutez /fmm reload pour réactiver la boutique.