.json file placed inside the customadvancements/ folder in your Minecraft game directory. The mod reads all .json files it finds, validates them, and applies them to every world that loads — no per-world datapack setup required.
Folder Layout
The first subfolder insidecustomadvancements/ determines the namespace an advancement is registered under. The rest of the path becomes the advancement’s path. A file at customadvancements/<namespace>/<path>.json becomes the advancement <namespace>:<path>.
/ as the separator.
Use these resource locations in the
parent field of child advancements to link your tree together.
Custom Advancements vs. Game Advancements
The mod sorts every file it loads into one of two categories based purely on which namespace folder it sits in:Custom Advancements
Files inside
customadvancements/customadvancements/. These are registered under the customadvancements namespace and create entirely new advancement trees of your own.Game Advancements
Files inside any other namespace folder, such as
customadvancements/minecraft/ or customadvancements/create/. These replace the vanilla or mod advancement that shares the same resource location.The
data/ folder is excluded from advancement scanning. Textures and language files placed in customadvancements/data/ are never parsed as advancement JSON. See Textures and Language Files.Validation Rules
Every file is checked against three rules before it is loaded. A file that fails is skipped with an error in the log; the rest of your advancements continue to load normally and the game does not crash.- The file must contain a top-level
criteriaobject. - The file must contain a top-level
displayobject. - If the file has no
parentfield, itsdisplayobject must contain abackgroundfield. In other words, every root advancement needs a background.
Files whose path contains a
recipes/ folder bypass these checks entirely, so exported recipe advancements load without modification.Top-Level JSON Fields
object
required
Controls how the advancement appears in the advancements screen: icon, title, description, frame style, toast, chat notification, and — for root advancements — the tab background. See Display for the full list of sub-fields.
string
Resource location of the parent advancement, for example
customadvancements:my_root. Omit this field to make the advancement a root — it appears as its own tab in the advancements screen and must then carry a background in its display block. Every non-root advancement must reference a parent that exists in the loaded advancement set; a child whose parent cannot be resolved does not appear.object
required
A map of criterion names to trigger definitions. Each key is an arbitrary string identifier for the criterion, and the value defines which game event fires it and any conditions that must be met. See Criteria for details and examples.
array of arrays
A two-dimensional array that expresses logical AND/OR combinations of criteria. The outer array is AND; each inner array is OR. If this field is omitted, all criteria must be satisfied.The example above means:
(criterion_a OR criterion_b) AND criterion_c.object
Optional rewards granted when the advancement is completed. Supported sub-fields:See Criteria for the full rewards reference.
"experience"— integer amount of XP points"loot"— array of loot table resource locations"recipes"— array of recipe resource locations to unlock"function"— resource location of a function to run as the player
Minimal Root Advancement
A root advancement has noparent field and must include a display block with a background so the game can render the tab. The minecraft:tick trigger fires every game tick and is the conventional way to make a root advancement complete immediately.
my_root.json
Minimal Child Advancement
A child advancement links to its parent via theparent field. The resource location must match the namespace and path of the parent file exactly, without the .json extension.
first_steps.json
Applying Changes
Changes to your JSON files take effect in one of two ways:1
Run the reload command
Run
/ca reload in-game or from the server console. The mod rescans every directory and reloads advancements, textures, and language files without a restart. See Commands.2
Restart the game or server
A full restart reloads everything as well. This is also the only way to apply changes to
config/customadvancements-common.toml, which /ca reload does not re-read.display sub-field, see Display. For criteria and trigger definitions, see Criteria. For complete working files, see Examples.