examples/advancements/ directory. They form a small, self-contained advancement tree: a root tab, a simple task child, and a reward-bearing task that chains off the second. Together they demonstrate every common pattern you will encounter when writing your own advancements.
All three files belong to the customadvancements namespace. Place them in .minecraft/customadvancements/customadvancements/ to load them in-game.
1. Root Advancement — root.json
A root advancement defines an entirely new tab in the advancement screen. It has noparent field, and its display block must include a background to fill the tab panel. The minecraft:tick trigger fires every game tick, so the root completes silently the moment any player logs in.
root.json
background— Uses theIMAGEtype to render a full-size screenshot behind the tree. Theobject_fit: "COVER"mode scales the image to fill the entire panel without letterboxing. See Background Types for all available types.show_toast: falseandannounce_to_chat: false— Root advancements that complete on every login should never fire notifications; these two flags suppress both the toast overlay and the chat broadcast.hidden: false— The root is always visible in the tab, so there is no reason to hide it.minecraft:ticktrigger — The simplest possible trigger. Noconditionsblock is needed because the tick trigger always fires unconditionally.
2. Simple Task — example.json
This is a standard child advancement linked to the root above. It completes as soon as dirt appears anywhere in the player’s inventory, triggering a toast and a chat announcement.example.json
parent: "customadvancements:root"— Links this advancement as a child ofroot.json. The resource location is the namespace (customadvancements) plus the filename without the.jsonextension (root).frame: "task"— Renders the standard rectangular frame around the icon. Use"goal"for a rounded frame or"challenge"for a star frame on more difficult objectives.minecraft:inventory_changedtrigger — Fires whenever the player’s inventory changes. Theconditions.itemsarray narrows it to only fire when at least oneminecraft:dirtitem is present.- No
requirementsfield — because there is only one criterion, omittingrequirementsmeans the single criterion must be satisfied, which is equivalent to[["requirement"]].
3. Task with Rewards — back_to_the_roots.json
This advancement chains offexample.json and requires the player to kill an adult zombie while holding rotten flesh in their main hand. On completion it grants 50 experience points.
back_to_the_roots.json
minecraft:player_killed_entitytrigger — Fires when the player lands the killing blow on any entity.conditions.entity— An array of condition objects that the killed entity must match. The single entry here usesminecraft:entity_propertiesto assert that the entity is aminecraft:zombieand is not a baby (is_baby: false).conditions.killing_blow— Inspects the damage source. Thedirect_entity.equipment.mainhand.itemsarray ensures the player must be holdingminecraft:rotten_fleshin their main hand when the kill lands.requirements— Explicitly lists the single criterion. With only one criterion this is optional, but it is good practice to include it for clarity.rewards.experience: 50— Awards 50 XP points directly to the player on completion.
Using Vanilla Advancements as Templates
Writing advancement JSON from scratch can be tedious when you are not sure what a complexconditions block should look like. The /ca/generate/advancement/all command exports every currently loaded advancement — including all vanilla and mod advancements — as ready-to-edit JSON files placed directly into customadvancements/.
This gives you accurate, working examples of every trigger type and condition structure that Minecraft uses, which you can then copy and modify for your own advancements.