Tutoriel Minecraft Java

Les progrès personnalisés permettent d’ajouter des objectifs, des quêtes ou des étapes de progression à un monde Minecraft Java. Ils peuvent déclencher une notification, donner de l’expérience, déverrouiller une recette ou lancer une fonction de datapack après une action précise du joueur.

Ce guide explique comment créer un premier arbre de progrès avec les formats actuels de Minecraft Java 26.2. L’ancien emplacement data/advancements/, les dossiers sans namespace et plusieurs syntaxes utilisées avant 1.21 ne sont plus adaptés : un progrès personnalisé se place désormais dans un datapack, avec une structure précise.

📚 À lire aussi : comment débloquer les progrès dans Minecraft et notre outil pour générer des progrès.

Interface des progrès de Minecraft avec un onglet personnalisé
Un onglet de progrès personnalisé dans Minecraft Java.

Progrès et succès : quelle différence ?

Les anciens succès ont été remplacés par les progrès dans Minecraft Java à partir de la version 1.12. Les progrès servent toujours de repères pour avancer dans une partie, mais leur fonctionnement est plus souple : ils sont organisés en arbres, peuvent rester cachés, proposer plusieurs chemins et attribuer des récompenses.

Les progrès affichés avec la touche L sont ceux du jeu de base. Un datapack peut ajouter ses propres onglets, prolonger un arbre existant ou créer des objectifs invisibles utilisés uniquement en arrière-plan. C’est ce qui les rend utiles pour une map aventure, un serveur à quêtes ou un monde survie avec des défis supplémentaires.

À noter : Ce tutoriel concerne exclusivement Minecraft Java Edition. Bedrock Edition possède son propre système d’achievements et ne charge pas les progrès Java au format datapack.

Ce qui a changé pour les progrès personnalisés

Les principes restent les mêmes, mais l’organisation d’un datapack a évolué. Un progrès ne se dépose plus directement dans le dossier de sauvegarde comme dans les très anciens tutoriels. Il doit être placé dans un datapack reconnu par le jeu, avec un fichier pack.mcmeta à sa racine et un namespace dans le dossier data. Pour voir cette structure appliquée à un autre système, consultez aussi notre tutoriel pour créer des recettes personnalisées avec un datapack.

  • Le dossier des progrès est désormais advancement, au singulier.
  • Les fonctions de datapack se placent dans function, au singulier depuis Minecraft 1.21.
  • Les icônes utilisent la représentation récente des objets, avec "id" plutôt que l’ancienne clé "item" dans les nouveaux exemples.
  • Le format de datapack doit correspondre à la version ciblée. Pour Minecraft Java 26.2, utilisez 107.1.

Attention : Évitez de reprendre les anciens exemples qui utilisent data/advancements, data/functions ou "item":"minecraft:...". Ces formats peuvent empêcher le chargement correct du pack ou produire des avertissements selon la version jouée.

Créer la base du datapack

Commencez par créer un dossier, par exemple mes_progres, dans le répertoire .minecraft/saves/nom_de_votre_monde/datapacks/. Sur un serveur, placez-le dans le dossier datapacks du monde concerné. Vous pouvez aussi utiliser un fichier ZIP, à condition que pack.mcmeta soit directement à sa racine.

Pour suivre les exemples, nous utiliserons le namespace exemple. Évitez les espaces, accents et majuscules dans les noms de dossiers, fichiers et identifiants.

mes_progres/
├── pack.mcmeta
└── data/
    └── exemple/
        ├── advancement/
        │   ├── root.json
        │   └── premiere_etincelle.json
        └── function/
            └── recompense.mcfunction

À la racine, créez le fichier pack.mcmeta. Il indique à Minecraft que le dossier est bien un datapack et précise le format visé.

{
  "pack": {
    "pack_format": 107.1,
    "description": {
      "text": "Mes progrès personnalisés"
    }
  }
}

Le nombre 107.1 est adapté à Minecraft Java 26.2. Si vous créez un pack pour une autre version, changez uniquement cette valeur après avoir vérifié le format de datapack correspondant. Un format incorrect peut laisser le pack se charger, mais Minecraft affichera un avertissement de compatibilité.

Créer la racine de votre onglet

Chaque arbre a besoin d’un premier progrès, souvent nommé root.json. C’est lui qui crée l’onglet dans l’interface et définit son arrière-plan. Il ne possède pas de parent. Dans cet exemple, le critère minecraft:tick permet de le valider dès que le joueur entre dans le monde, afin que l’onglet soit visible immédiatement.

{
  "display": {
    "icon": {
      "id": "minecraft:compass"
    },
    "title": {
      "text": "Mes objectifs"
    },
    "description": {
      "text": "Un arbre de progrès personnalisé"
    },
    "background": "minecraft:textures/gui/advancements/backgrounds/adventure.png",
    "frame": "task",
    "show_toast": false,
    "announce_to_chat": false
  },
  "criteria": {
    "demarrer": {
      "trigger": "minecraft:tick"
    }
  }
}
Onglet de progrès personnalisé dans Minecraft avec plusieurs objectifs reliés
La racine définit l’onglet, puis les autres progrès viennent former des branches.

Le nom du fichier détermine l’identifiant du progrès. Ici, data/exemple/advancement/root.json devient exemple:root. Les sous-dossiers font aussi partie de l’identifiant : un fichier placé dans advancement/quetes/nether.json serait appelé avec exemple:quetes/nether.

Ajouter un premier progrès

Créez maintenant data/exemple/advancement/premiere_etincelle.json. Ce progrès dépend de la racine et se débloque lorsque le joueur possède un diamant dans son inventaire. L’exemple est volontairement simple : il permet de vérifier facilement que le datapack fonctionne avant de créer des critères plus complexes.

{
  "parent": "exemple:root",
  "display": {
    "icon": {
      "id": "minecraft:diamond"
    },
    "title": {
      "text": "Une première trouvaille"
    },
    "description": {
      "text": "Obtenir un diamant"
    },
    "frame": "goal",
    "show_toast": true,
    "announce_to_chat": true
  },
  "criteria": {
    "diamant": {
      "trigger": "minecraft:inventory_changed",
      "conditions": {
        "items": [
          {
            "items": [
              "minecraft:diamond"
            ]
          }
        ]
      }
    }
  },
  "rewards": {
    "experience": 10
  }
}

Le champ parent relie ce progrès à l’onglet créé auparavant. Sans parent, le jeu considère le fichier comme une nouvelle racine et crée potentiellement un autre onglet. Le nom du critère, ici diamant, est libre : il sert surtout à vous repérer dans le fichier et à construire les conditions avancées.

Comprendre l’affichage

Le bloc display est facultatif. Sans lui, un progrès peut tout de même fonctionner en arrière-plan, mais il n’apparaît pas dans le menu. C’est utile pour les étapes techniques d’une map, moins pour un objectif destiné à être suivi par les joueurs.

CléRôle
iconL’objet affiché sur le progrès. Dans les formats actuels, utilisez un objet avec id.
titleLe nom affiché au survol de l’icône.
descriptionLe texte d’explication visible au survol.
frameLe type de cadre : task, goal ou challenge.
backgroundL’arrière-plan de l’onglet. Cette clé n’agit que sur une racine.
hiddenCache le progrès et ses enfants tant qu’il n’est pas validé.
show_toastActive ou désactive la notification à l’écran.
announce_to_chatActive ou désactive le message envoyé dans le chat.

Les trois types de cadre ne changent pas la logique du progrès. Ils servent à indiquer son importance et à ajuster l’apparence de l’icône. Les défis sont généralement réservés aux objectifs longs ou difficiles et peuvent attribuer une récompense plus importante.

TypeNon terminéTerminéUsage conseillé
TâcheCadre de tâche non terminéeCadre de tâche terminéeÉtape simple ou découverte.
ObjectifCadre d’objectif non terminéCadre d’objectif terminéÉtape importante d’une branche.
DéfiCadre de défi non terminéCadre de défi terminéObjectif difficile, caché ou récompensé.
Les cadres conservent le même principe que les progrès du jeu de base.

Critères et déclencheurs

Un progrès est validé lorsqu’un ou plusieurs critères sont remplis. Chaque critère utilise un déclencheur, appelé trigger, qui écoute une action particulière. Les conditions permettent ensuite de limiter ce qui compte réellement : un objet précis, une dimension, une créature, un bloc ou une distance.

DéclencheurUtilisation courante
minecraft:inventory_changedDébloquer un progrès lorsqu’un objet entre dans l’inventaire.
minecraft:changed_dimensionRéagir à l’entrée dans le Nether, l’End ou l’Overworld.
minecraft:placed_blockDétecter la pose d’un bloc, éventuellement dans un biome ou une dimension précise.
minecraft:player_killed_entityRécompenser la mort d’une créature donnée.
minecraft:consume_itemDétecter la consommation d’un aliment, d’une potion ou d’un autre objet consommable.
minecraft:using_itemRéagir à l’utilisation d’un objet compatible.
minecraft:tickDéclencher une vérification à chaque tick pour le joueur ; utile avec prudence pour les racines ou la logique technique.
minecraft:impossibleCréer un progrès qui ne peut être accordé que par commande ou fonction.

Voici un exemple de progrès qui se valide à l’entrée dans le Nether. Vous pouvez l’utiliser comme enfant du fichier précédent en remplaçant le parent par l’identifiant qui vous convient.

{
  "parent": "exemple:premiere_etincelle",
  "display": {
    "icon": {
      "id": "minecraft:netherrack"
    },
    "title": {
      "text": "Un pas en enfer"
    },
    "description": {
      "text": "Entrer dans le Nether"
    },
    "frame": "challenge"
  },
  "criteria": {
    "nether": {
      "trigger": "minecraft:changed_dimension",
      "conditions": {
        "to": "minecraft:the_nether"
      }
    }
  },
  "rewards": {
    "experience": 25
  }
}

Le jeu propose beaucoup d’autres déclencheurs. Pour des conditions complexes, notamment sur les entités, les composants d’objets ou les dégâts, vérifiez toujours la documentation de votre version plutôt que de recopier un ancien JSON. Les formats des prédicats d’objets ont changé plusieurs fois depuis les versions 1.20.5 et 1.21.

Plusieurs conditions avec requirements

Si le bloc requirements est absent, tous les critères définis doivent être validés. Vous pouvez l’ajouter pour accepter plusieurs chemins. Chaque sous-liste correspond à un groupe où au moins un critère doit être rempli, et tous les groupes doivent être satisfaits.

  • [["diamant"], ["nether"]] signifie : obtenir un diamant et entrer dans le Nether.
  • [["diamant", "nether"]] signifie : obtenir un diamant ou entrer dans le Nether.
  • [["diamant", "blaze"], ["nether", "blaze"]] signifie : obtenir un diamant et entrer dans le Nether, ou tuer un blaze.

Cette logique devient vite difficile à relire. Gardez des noms de critères courts mais explicites, comme trouver_diamant, entrer_nether ou tuer_blaze. Cela évite les erreurs au moment de modifier un progrès plusieurs semaines plus tard.

Récompenses et fonctions

Le bloc rewards permet d’attribuer de l’expérience, de déverrouiller des recettes, de générer un butin ou d’exécuter une fonction. La fonction est particulièrement pratique pour transformer un progrès en déclencheur de quête : elle peut donner un objet, afficher un message, modifier un score ou lancer une série de commandes.

"rewards": {
  "experience": 20,
  "function": "exemple:recompense"
}

La fonction appelée ci-dessus doit être placée dans data/exemple/function/recompense.mcfunction. Elle utilise les mêmes bases que les commandes Minecraft, mais elles sont exécutées depuis le datapack. Par exemple :

give @s minecraft:torch 16
tellraw @s {"text":"Récompense obtenue !","color":"gold"}

Une fonction liée à un progrès est exécutée pour le joueur qui vient de le valider. Gardez les récompenses cohérentes avec la difficulté demandée et évitez de distribuer des objets rares dès une tâche très simple. Dans une map, les fonctions peuvent aussi retirer l’avancement avec advancement revoke afin de réutiliser le même déclencheur plus tard.

Conseil : Pour déverrouiller une recette, utilisez la clé recipes avec une liste d’identifiants. L’ancienne clé unique recipe utilisée dans de vieux tutoriels n’est plus la forme à privilégier.

Installer, tester et corriger

Une fois les fichiers enregistrés, entrez dans votre monde puis utilisez la commande suivante :

/reload

Le rechargement lit à nouveau les datapacks. Vérifiez ensuite que votre pack est actif. Notre guide sur les commandes dans Minecraft peut aussi servir de référence pour les commandes de test :

/datapack list enabled

Ouvrez ensuite le menu des progrès avec L. La racine créée avec le déclencheur minecraft:tick doit faire apparaître le nouvel onglet après quelques instants. Testez le premier progrès avec un diamant obtenu ou donné par commande.

Si rien ne s’affiche : Consultez le fichier logs/latest.log. Minecraft y indique généralement le chemin du fichier JSON incorrect, une virgule oubliée, un identifiant mal écrit ou un dossier placé au mauvais endroit.

Les problèmes les plus fréquents viennent d’un fichier nommé .json.txt, d’un namespace différent entre le parent et l’enfant, d’un pack.mcmeta placé dans un sous-dossier du ZIP, ou de l’utilisation des anciens dossiers au pluriel. Rechargez le pack après chaque modification et testez d’abord un critère très simple avant d’ajouter des conditions avancées.

Utiliser la commande /advancement

La commande /advancement permet d’accorder ou retirer les progrès du jeu et ceux de votre datapack. Elle est pratique pour tester un arbre sans refaire chaque action, ou pour remettre une quête à zéro.

CommandeEffet
/advancement grant @s only exemple:premiere_etincelleAccorde uniquement le progrès indiqué au joueur.
/advancement revoke @s only exemple:premiere_etincelleRetire uniquement le progrès indiqué.
/advancement grant @s until exemple:premiere_etincelleAccorde la branche depuis la racine jusqu’au progrès ciblé.
/advancement grant @s from exemple:premiere_etincelleAccorde le progrès ciblé et ses enfants.
/advancement grant @s through exemple:premiere_etincelleAccorde le chemin des parents et les enfants reliés au progrès ciblé.
/advancement grant @s everythingAccorde tous les progrès chargés ; à réserver aux tests.
Schéma illustrant les options only, until, from et through de la commande advancement
Les options de la commande permettent de cibler un seul progrès, une branche ou tout un arbre.

Vous pouvez aussi accorder un seul critère d’un progrès qui en contient plusieurs. Il suffit d’ajouter le nom du critère à la fin de la commande :

/advancement grant @s only exemple:premiere_etincelle diamant

Questions fréquentes

Peut-on créer des progrès personnalisés sans mod ?

Oui. Les progrès sont gérés par des fichiers JSON dans un datapack. Aucun mod n’est nécessaire sur Minecraft Java Edition.

Pourquoi mon onglet de progrès n’apparaît-il pas ?

Vérifiez que le progrès racine possède un bloc display, qu’il n’a pas de parent et qu’il peut être validé. Un critère minecraft:tick est pratique pour tester rapidement la visibilité de l’onglet.

Où placer le fichier JSON d’un progrès ?

Dans un datapack, au chemin data/votre_namespace/advancement/nom_du_progres.json. Le datapack lui-même doit être dans le dossier datapacks du monde ou du serveur.

Les anciens tutoriels de Minecraft 1.12 fonctionnent-ils encore ?

Le principe reste proche, mais plusieurs chemins, noms de dossiers et formats de données sont devenus obsolètes. Il vaut mieux partir d’un exemple récent, puis adapter les critères à la version ciblée.

Peut-on empêcher un joueur de terminer un progrès ?

Oui. Le déclencheur minecraft:impossible ne se valide pas naturellement. Vous pouvez alors l’accorder uniquement avec une commande ou une fonction de datapack.

Comment remettre un progrès à zéro pour le tester ?

Utilisez /advancement revoke @s only namespace:identifiant. Pour un progrès à plusieurs critères, vous pouvez aussi retirer seulement le critère concerné avec la même commande suivie de son nom.

Créer des progrès personnalisés dans Minecraft Java

Les progrès personnalisés sont une base solide pour créer un système de quêtes sans mod. Avec une racine, quelques critères simples et une fonction de récompense, un datapack peut déjà guider les joueurs dans une map ou proposer une progression différente en survie.

Commencez par un objectif facile à tester, comme l’obtention d’un diamant ou l’entrée dans le Nether. Une fois la structure validée, vous pourrez ajouter des conditions plus précises, des récompenses et des branches cachées. Pour éviter les erreurs de syntaxe, notre générateur de progrès reste utile pour préparer un premier fichier JSON avant de le personnaliser.