← Tous les articles

Les progrès comme système de quêtes

Le vanilla n’a pas de système de quêtes, et il n’en a pas besoin, parce que les progrès en sont déjà un sur tout ce qui compte : ils s’enchaînent, ils verrouillent, ils récompensent et ils montrent l’avancement. L’astuce, c’est que le déclencheur le plus utile pour des quêtes personnalisées est celui qui ne se déclenche jamais tout seul.

Ouvrir le constructeur de progrès

La forme d’un arbre

Un progrès sans parent est une racine, et une racine obtient son propre onglet dans l’écran des progrès. Tout ce qui le désigne comme parent devient un nœud de cet onglet, et ces nœuds peuvent avoir leurs propres enfants. C’est tout le modèle d’arbre — il n’existe pas de notion séparée de chapitre ou de ligne de quête, seulement la filiation.

harbor:harbor_quest_1        (racine, onglet propre)
  └─ harbor:harbor_hunt      "parent": "harbor:harbor_quest_1"
       └─ harbor:harbor_end  "parent": "harbor:harbor_hunt"

Seule la racine porte un background, la texture répétée derrière l’onglet. En définir un sur un enfant ne fait rien, d’où l’intérêt d’un constructeur qui connaît la différence plutôt que d’un modèle figé.

Le déclencheur impossible, c’est tout l’intérêt

Chaque progrès a besoin d’au moins un critère, et un critère a besoin d’un déclencheur. Le vanilla en fournit beaucoup — tuer quelque chose, entrer quelque part, ramasser un objet — mais une vraie quête correspond rarement à un seul d’entre eux. « Livrer la lettre au capitaine du port » n’est pas un événement vanilla.

On utilise donc le déclencheur qui ne se déclenche jamais :

"criteria": {
  "delivered": {
    "trigger": "minecraft:impossible"
  }
}

Rien dans le monde ne le complète. C’est vous qui le faites, depuis votre propre logique :

/advancement grant @s only harbor:harbor_quest_1

Cette commande se place là où la quête se conclut réellement : un bloc de commande près de la jetée, une fonction appelée depuis un échange de villageois, une vérification dans votre fonction tick. Le progrès cesse d’être un détecteur et devient un enregistrement : ce qui retient que ce joueur est allé jusque-là, survit aux redémarrages et conditionne la suite.

C’est le schéma sur lequel repose presque tout système de quêtes personnalisé d’un serveur vanilla.

Les récompenses, et celle qui surprend

Quatre types de récompenses peuvent être attachés à un progrès :

"rewards": {
  "experience": 50,
  "recipes": ["harbor:reinforced_block"],
  "loot": ["harbor:quest_bundle"],
  "function": "harbor:on_quest_complete"
}

La récompense function est la plus puissante, car elle transforme un progrès en point d’accroche : une fois complété, des commandes arbitraires s’exécutent. Donner un objet, lancer une bossbar, régler un scoreboard, ouvrir une porte.

La récompense recipes est celle qui surprend, et elle éclaire un mystère venu de l’autre bout du site : une recette personnalisée n’apparaît pas dans le livre tant que quelque chose ne la débloque pas, et c’est ce quelque chose. Le vanilla embarque un progrès caché pour chacune de ses recettes, qui ne fait rien d’autre. Si votre recette se fabrique mais n’apparaît jamais dans le livre, c’est ce fichier qui manque.

Tester sans jouer la quête

Deux commandes couvrent toute la boucle :

/advancement grant @s only harbor:harbor_quest_1
/advancement revoke @s only harbor:harbor_quest_1

Remplacez only par until, from ou through pour déplacer toute une branche d’un coup, ce qui épargne beaucoup de clics quand on teste une chaîne de cinq étapes. Le revoke permet de rejouer la même étape sans créer un nouveau monde.

Deux renommages qui cassent les anciens exemples

ChangementAvantAprès
Dossier, en 1.21advancements/advancement/
Icône, en 1.20.5{"item": "minecraft:map"}{"id": "minecraft:map"}

Le renommage de dossier est le plus vicieux des deux, comme pour les tables de butin : le pack se charge, s’affiche comme activé, et le progrès n’est simplement pas là. Le renommage de l’icône a au moins tendance à se plaindre dans le log.

Petites choses qui coûtent une soirée

Pour aller plus loin

Le constructeur de progrès écrit le fichier et la commande d’attribution correspondante, et sait quels champs appartiennent à une racine plutôt qu’à un enfant. Pour le conteneur, voyez le générateur de data packs ; pour donner à la quête quelque chose à remettre, le générateur de tables de butin et le générateur de recettes couvrent récompenses et déblocages.