1
Install the mod
Follow the Installation guide to set up Minecraft Forge 44.1.0 or newer for Minecraft 1.19.3 and add the Custom Advancements jar to your
mods/ folder.2
Launch the game once
Start Minecraft at least once with the mod installed. Custom Advancements creates the
customadvancements/ folder inside your game directory on the first run and copies its example files into it. You can close the game again after reaching the main menu.3
Open the advancement folder
Inside the
customadvancements/ folder that was just created, open the subfolder that is also named customadvancements:The first subfolder level under
customadvancements/ determines the namespace. The folder named customadvancements holds your own new advancements, which are all registered under the customadvancements namespace. Any other subfolder name is treated as an override for an existing namespace — for example, customadvancements/minecraft/ overrides vanilla advancements. See Structure for the full rules.4
Create the root advancement
A root advancement defines a new tab in the advancements screen. Create the file Key fields to note:
my_root.json inside the customadvancements/customadvancements/ folder with the following content:my_root.json
display.icon— the item shown on the tab header. Any valid item ID works. In Minecraft 1.19.3 the field inside the icon object isitem.display.title/display.description— a{"text": "..."}component gives you a hardcoded string. Swap it for{"translate": "some.key"}if you want translatable text, and define the key in a language file.display.background— the tab’s background texture, given as a plain resource location string. See Background Types for custom images and the extra rendering fields.criteria— root advancements are typically granted automatically via theminecraft:ticktrigger; the player earns it on the first game tick.
5
Create a child advancement
Child advancements appear as nodes branching off the root inside its tab. Create the file Key fields to note:
diamond_finder.json in the same folder:diamond_finder.json
parent— the resource location of the advancement this node connects to. Herecustomadvancements:my_rootrefers to themy_root.jsonfile you created in the previous step. The format is<namespace>:<path>, where the path mirrors the file path relative to the namespace folder, without the.jsonextension.frame— controls the border shape of the advancement icon in the screen. Valid values aretask,goal, andchallenge.criteria— this advancement is granted when a diamond appears in the player’s inventory. Replace the trigger and conditions to match whatever goal you have in mind.
6
Reload and check the advancements screen
Load into a world, then run the reload command in chat:The mod re-reads every advancement file, texture, and language file, then reloads game data — no restart required. Press L to open the advancements screen; a new tab labeled My First Tab should appear alongside the vanilla tabs, with Diamond Finder as a node inside it. Pick up a diamond to complete it.If the tab does not appear, check
/ca reload does not re-read config/customadvancements-common.toml. Config changes require a full game or server restart. See Config File.logs/latest.log for entries tagged customadvancements — the most common causes are malformed JSON syntax and a root advancement without a background field. See Common Issues for more.[INSERT IMAGE: The new root advancement tab visible in the advancements screen, next to the vanilla tabs]
Setting Up a Modpack
If you are building a modpack rather than a single world, the same files drive the whole pack. A typical end-to-end setup runs like this:1
Export the existing advancements as templates
Join a world and run
/ca generate advancement all. The mod writes a JSON file for every currently loaded advancement — vanilla and mod alike — into customadvancements/, grouped into namespace folders. Editing one of those files overrides that advancement. See Commands.2
Decide what to keep
Run
/ca generate resource_locations to dump every advancement ID to customadvancements/resource_locations.txt, then use that list to fill in advancementsBlacklist — or flip blacklistIsWhitelist and keep only a curated set. See Blacklist & Whitelist.3
Write your own advancements
Add your pack’s own trees under
customadvancements/customadvancements/. Use subfolders to group them; the path becomes part of the resource location. See Examples for three complete, working files.4
Gate progression (optional)
Turn on
advancementProgression and pick an advancementProgressionMode to make players work through your tree in order, and use connectedAdvancementsList to link trees that have no parent-child relationship of their own. See Progression.5
Ship it with the pack
Place both the
customadvancements/ folder and config/customadvancements-common.toml in your pack’s overrides/ directory. Every major launcher (CurseForge, Prism, MultiMC, ATLauncher) merges that directory into the game directory on install, so players get your full advancement setup on their first launch with nothing extra to do.