Avant-propos
La semaine dernière, nous avons mis en place la boutique. Précédemment, nous avions également vu comment créer des recettes personnalisées. Nous sommes donc prêts à vendre des recettes en boutique. Dans cet article, un livre sera vendu en boutique pour débloquer une recette d’étiquette.
Initialisation du datapack
Pour commencer, je reprend le datapack du dernier article. Comme pour la banque, je créé une fonction d’initialisation pour la boutique. Je modifie donc le fichier data/minecraft/tags/functions/load.json pour l’ajouter.
{"values":["mangarmor:bank\/init","mangarmor:shop\/init"]}
Je créé ensuite le fichier en question qui sera vide dans un premier temps : data/mangarmor/functions/shop/init.mcfunction.
Bloquer les recettes
Par défaut, Minecraft permet d’utiliser toutes les recettes du jeu, y compris celles ajoutées par datapack. Pour contrer cela, une gamerule permet de bloquer toutes les recettes pour obliger les joueurs à utiliser des livres.
/gamerule doLimitedCrafting true
J’ajoute donc cette commande dans la fonction d’initialisation. Problème, les recettes vanilla ne sont plus accessibles. La solution que j’ai trouvé est de débloquer toutes les recettes puis de bloquer les recettes contenues dans les livres vendus en boutique.
/recipe give @s *
/recipe take @s mangarmor:name_tag
Fonction de première connexion
Lors de la saison 2 de notre serveur, les joueurs obtenaient un progrès à leur première connexion. Ce progrès contenait les progrès spécifiques à cette saison mais permettait surtout au datapack d’initialiser certaines données. Nous verrons la création des progrès prochainement. Tout ce qu’il faut savoir actuellement, c’est que ce progrès est obtenu quand on se trouve dans une zone précise, qui correspond à la zone d’apparition du serveur. Lors de son obtention, une fonction est appelée avec toutes les commandes à exécuter lors de la première connexion du joueur.
{"display":{"description":"Bienvenue !","title":{"text":"Mang'Armor","color":"gold"},"icon":{"item":"minecraft:emerald"},"announce_to_chat":false,"show_toast":true,"background":"minecraft:textures\/gui\/advancements\/backgrounds\/stone.png"},"criteria":{"location":{"trigger":"minecraft:location","conditions":{"position":{"x":{"min":-10,"max":10},"y":{"min":50,"max":100},"z":{"min":-10,"max":10}}}}},"rewards":{"function":"mangarmor:advancements\/root"}}
Voici le contenu de la fonction du progrès mangarmor:advancements/root :
tellraw @s ["",{"text":"SERVEUR : ","color":"red"},"Bienvenue sur le serveur Mang'Armor !"]
scoreboard players set @s bank 0
recipe give @s *
recipe take @s mangarmor:name_tag
On commence par un petit message de bienvenue. Ensuite, on met le compte en banque du joueur à 0. On lui débloque toutes les recettes et pour finir, on lui bloque les recettes disponibles en boutique (dans cet exemple, seule la recette de l’étiquette).
Création du livre
Comme d’habitude, je met en place une commande pour simplifier l’utilisation de la boutique. Je créé un dossier books dans le dossier des fonctions. Il contiendra les fonctions qui donneront les livres. Je créé ensuite la fonction name_tag qui donnera le livre de recette :
give @s minecraft:knowledge_book{Recipes:["mangarmor:name_tag"],display:{Name:"\"§r§8Étiquettes\"",Lore:["§r§7par Paperman"]}}
Maintenant, en exécutant la fonction, un livre nous sera donné. En utilisant le livre, la recette sera débloquée dans l’établi. J’ajoute ensuite le fichier de la recette créée dans l’article Recettes personnalisées data/mangarmor/recipes/name_tag.json :
{"type":"crafting_shaped","pattern":[" #"," X ","X "],"key":{"#":{"item":"minecraft:string"},"X":{"item":"minecraft:paper"}},"result":{"item":"minecraft:name_tag"}}
Vente en boutique
Nous pouvons maintenant proposer le livre en boutique. Je créé un dossier books dans le dossier des fonctions de la boutique. Il contiendra les fonctions d’achat de livres. Je créé ensuite le fichier qui permettra d’acheter le livre data/mangarmor/functions/shop/buy/name_tag.mcfunction :
execute if score @s bank matches ..4 run function mangarmor:shop/buy/cant
execute if score @s bank matches 5.. run function mangarmor:books/name_tag
execute if score @s bank matches 5.. run tellraw @s ["",{"text":"BOUTIQUE :","color":"gold"}," Tu as acheté 1 ",{"text":"Livre étiquette","color":"black","hoverEvent":{"action":"show_text","value":"Livre pour débloquer une recette"}},"."]
execute if score @s bank matches 5.. run function mangarmor:bank/remove/5
Comme pour les boites, on commence par vérifier que le joueur a suffisamment de Crédits sur son compte en banque (le livre est vendu 5 Crédits). Si c’est le cas, on exécute la fonction qui donne le livre, on envoie un message au joueur et on lui débite son compte de 5 Crédits.
Panneau de vente
Pour finir, je créé un panneau pour permettre aux joueurs d’acheter le livre d’un simple clic droit. Je créé le fichier data/mangarmor/functions/shop/signs/buy-book-name_tag.mcfunction :
give @s minecraft:oak_sign{BlockEntityTag:{Text1:'{"text":"Livre étiquettes","clickEvent":{"action":"run_command","value":"function mangarmor:shop/buy/books/name_tag"}}',Text2:'{"text":""}',Text3:'{"text":"5 Crédits","color":"yellow"}'},display:{Name:'{"text":"Livre étiquette"}'}}
Maintenant, je peux utiliser cette fonction pour obtenir le panneau à poser :
/function mangarmor:shop/signs/buy-book-name_tag
Téléchargement
Le datapack est disponible au téléchargement. Il reprend les données des articles Boutique en jeu et Recettes personnalisées.