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.
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\u00e9","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'\u00e9ponge cram\u00e9e","description":"S\u00e9cher une \u00e9ponge 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.