Boutique : livres de recettes

Maintenant que la boutique est en place, nous pouvons vendre des livres de recettes personnalisées.

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.

Sommaire

Partager

Partager sur facebook
Facebook
Partager sur twitter
Twitter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.