.json file placed inside the customadvancements/ folder in your Minecraft game directory. The mod reads all .json files it finds, validates them, and injects them into every world that loads — no per-world datapack setup required. The format is Minecraft’s own advancement format, so anything you already know from writing datapacks applies here too.
Folder Layout
Your own advancements belong incustomadvancements/customadvancements/. The inner folder name is the namespace, and the resource location of each advancement is derived from the file path: a file at customadvancements/customadvancements/<path>.json becomes the advancement customadvancements:<path>.
Any other subfolder of
customadvancements/ is treated as an override for existing game advancements in that namespace. A file at customadvancements/minecraft/story/mine_stone.json replaces the vanilla minecraft:story/mine_stone advancement. This is exactly where the /ca generate advancement commands write their output — see Commands.customadvancements/data/ folder is skipped entirely by the advancement loader; it holds language files and textures only.
Naming Rules
File and folder names map directly to resource locations, so they must be valid resource location paths:- Use only lowercase letters, digits, underscores (
_), hyphens (-), and dots (.). - Do not use spaces — use underscores instead, for example
enter_nether.json. - Do not include the
.jsonextension when referencing an advancement in aparentfield.
Top-Level JSON Fields
object
required
Controls how the advancement appears in the advancements screen: icon, title, description, frame style, toast, chat notification, and — on root advancements — the tab background. This field is required: a file without it is rejected by the loader. See Display for the full list of sub-fields.
string
Resource location of the parent advancement, for example
customadvancements:root. Omit this field to make the advancement a root — it appears as its own tab in the advancements screen. Every non-root advancement must reference a parent that exists in the loaded advancement set; if the parent is missing, the child is dropped along with its own children.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
What the Loader Requires
Custom Advancements validates every file before it is registered, and the requirements differ slightly between root and child advancements:
A file that does not satisfy its row is skipped with
does not match the required '.json' format! in the log — the rest of your files still load normally.
Minimal Root Advancement
A root advancement has noparent field and must include a display block with a background. The minecraft:tick trigger fires every game tick and is the conventional way to make a root advancement complete immediately, so that its tab is always visible.
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.
my_advancement.json
display sub-field, see Display. For criteria, triggers, and rewards, see Criteria. For complete working files, see Examples.