Progrès personnalisés

Depuis Minecraft 1.12 les succès ont été remplacés par les progrès. Ils sont personnalisables depuis l’apparition des datapack en 1.13.

Pour ce premier article, j’expliquerai les principes de base des progrès. Nous verrons dans les prochaines semaines comment créer des progrès aux mécaniques originales : progrès répétables, progrès communs à tous les joueurs du serveur, …

Mise en place du datapack

Si tu n’es pas à l’aise avec le concept de datapack, je te conseille vivement de lire l’article de création de datapack.

Dans le dossier data/mangarmor, ajoutons un dossier advancements. Il contiendra les fichiers Json des progrès. Pour nos premiers progrès nous utiliserons ceux déjà présents en jeu. Nous verrons par la suite comment ajouter un onglet contenant nos propres progrès.

Progrès : du pain sur la planche

Commençons dès maintenant par un exemple concret : la mise en place de progrès issus de l’édition Bedrock et de succès disparus en 1.12 avec l’introduction des progrès.

Pour ce progrès, nous allons détecter si le joueur obtient l’objet pain dans son inventaire. Un progrès se compose de plusieurs éléments :

  • display qui permet de configurer les éléments visibles à l’écran comme le nom du progrès
  • parent qui est le progrès précédent celui-ci
  • criteria qui liste les actions nécessaires pour débloquer le progrès
  • requirements qui complète criteria en précisent si toutes les actions sont nécessaires ou seulement l’une d’entre elles
  • rewards qui liste les récompenses. Il peut s’agir d’une fonction, d’une table de loot, d’une recette ou d’XP.

Display

Commençons par les éléments à afficher dans les progrès. Nous choisissons l’icone qui représentera le progrès, ici, l’icone du pain. On précise ensuite le titre et la description.

"display": {
        "icon": {
            "item": "minecraft:bread"
        },
        "title": "Du pain sur la planche",
        "description": "Faire du pain avec du blé",
        "frame": "task",
        "show_toast": true,
        "announce_to_chat": true,
        "hidden": false
}

Nous continuons en précisant la forme du cadre du progrès. Trois formes sont disponibles. Si aucune forme n’est précisée, la forme task sera utilisée.

Les différentes formes de frame possibles

Il est ensuite possible de préciser si le progrès doit-être affiché dans les notifications et dans le chat quand il est débloqué par un joueur. Enfin, hidden permet de cacher un progrès jusqu’à qu’il soit débloqué.

Parent

Continuons en indiquant le progrès parent. Cela permettra au jeu de créer un arbre avec une certaine hiérarchie des progrès.

"parent": "minecraft:husbandry/plant_seed"

Criteria

Concernant les critères, nous testons si le joueur a un pain en inventaire. Chaque critère se compose d’un nom (qui sera utilisé par la suite dans les requirements), d’un trigger (un évènement, une action) et de conditions.

La liste des déclencheurs et de leurs conditions est consultable sur le wiki officiel.

"criteria": {
        "bread": {
            "trigger": "minecraft:inventory_changed",
            "conditions": {
                "items": [
                    {
                        "item": "minecraft:bread"
                    }
                ]
            }
        }
}

Requirements

Si requirements n’est pas précisé, tous les critères devront être résolus pour débloquer le progrès. Dans le cas contraire, il nous faut indiquer un tableau qui contiendra d’autres tableaux. Le premier contient des conditions ET, les autres des conditions OU. Voici un exemple avec le progrès vanilla Prends-en de la graine !.

{
  "parent": "minecraft:husbandry/root",
  "display": {
    "icon": {
      "item": "minecraft:wheat"
    },
    "title": {
      "translate": "advancements.husbandry.plant_seed.title"
    },
    "description": {
      "translate": "advancements.husbandry.plant_seed.description"
    },
    "frame": "task",
    "show_toast": true,
    "announce_to_chat": true,
    "hidden": false
  },
  "criteria": {
    "wheat": {
      "trigger": "minecraft:placed_block",
      "conditions": {
        "block": "minecraft:wheat"
      }
    },
    "pumpkin_stem": {
      "trigger": "minecraft:placed_block",
      "conditions": {
        "block": "minecraft:pumpkin_stem"
      }
    },
    "melon_stem": {
      "trigger": "minecraft:placed_block",
      "conditions": {
        "block": "minecraft:melon_stem"
      }
    },
    "beetroots": {
      "trigger": "minecraft:placed_block",
      "conditions": {
        "block": "minecraft:beetroots"
      }
    },
    "nether_wart": {
      "trigger": "minecraft:placed_block",
      "conditions": {
        "block": "minecraft:nether_wart"
      }
    }
  },
  "requirements": [
    [
      "wheat",
      "pumpkin_stem",
      "melon_stem",
      "beetroots",
      "nether_wart"
    ]
  ]
}

Ici, le progrès nécessite de planter une des cinq graines. Dans le cas où nous voudrions que le joueur doive planter les cinq graines pour débloquer le succès, nous utiliserons ce tableau :

"requirements": [
    ["wheat"],
    ["pumpkin_stem"],
    ["melon_stem"],
    ["beetroots"],
    ["nether_wart"]
]

Nous pouvons donc indiquer les requirements suivants :

"requirements" : [
        ["bread"]
 ]

Rewards

Pour ce progrès aucune récompense. Il est toutefois possible de préciser une recette à débloquer, une table de loots, un montant d’expérience et même une fonction. Cette dernière offre énormément de possibilité car nous pouvons exécuter n’importe quelle commande une fois le progrès débloqué.

Voici le code complet de notre progrès :

{
    "display": {
        "icon": {
            "item": "minecraft:bread"
        },
        "title": "Du pain sur la planche",
        "description": "Faire du pain avec du blé",
        "frame": "task",
        "show_toast": true,
        "announce_to_chat": true,
        "hidden": false
    },
    "parent": "minecraft:husbandry/plant_seed",		
    "criteria": {
        "bread": {
            "trigger": "minecraft:inventory_changed",
            "conditions": {
                "items": [
                    {
                        "item": "minecraft:bread"
                    }
                ]
            }
        }
    },
    "requirements" : [
        ["bread"]
    ]
}

Progrès : L’éponge cramée

Pour ce progrès, nous faisons comme le précédent, à la différence que nous détectons la présence d’une éponge dans l’inventaire.

{
    "display": {
        "icon": {
            "item": "minecraft:wet_sponge"
        },
        "title": "L'éponge cramée",
        "description": "Sécher une éponge dans un four",
        "frame": "task",
        "show_toast": true,
        "announce_to_chat": true,
        "hidden": false
    },
    "parent": "minecraft:adventure/root",		
    "criteria": {
        "sponge": {
            "trigger": "minecraft:inventory_changed",
            "conditions": {
                "items": [
                    {
                        "item": "minecraft:sponge"
                    }
                ]
            }
        }
    },
    "requirements" : [
        ["sponge"]
    ]
}

Téléchargement

Voici le datapack contenant les deux progrès de cet article.

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.