Enabling progression
SetadvancementProgression = true in config/customadvancements-common.toml to switch the system on. No other option is required; the settings below fine-tune its scope and behavior.
config/customadvancements-common.toml
Recipe advancements (those whose path contains
recipes/) are never subject to progression gating, so recipe-book unlocks keep working normally.advancementProgressionMode
This enum controls the scope of the progression system — which namespaces are gated behind their parents.
enum
default:"ALL"
Accepted values:
ALL— Every advancement from every namespace is gated. This is the most restrictive mode.MODS— Gating is decided per namespace usingmodBlacklist. WithmodBlacklistIsWhitelist = false, every namespace except those listed is gated; withmodBlacklistIsWhitelist = true, only the listed namespaces are gated.MINECRAFT— Only advancements in theminecraft:namespace are gated. Mod-added advancements are unaffected.CUSTOM_ADVANCEMENTS— Only advancements in thecustomadvancements:namespace (the ones you added yourself) are gated.
modBlacklist and modBlacklistIsWhitelist
These two options are only meaningful when advancementProgressionMode = MODS. They let you name the namespaces that should be included in or excluded from progression gating.
list of strings
default:"[]"
A list of mod IDs (for example
"botania", "quark") that interact with the progression system. Whether they are excluded or exclusively included depends on modBlacklistIsWhitelist. Entries must be namespaces that at least one loaded advancement belongs to.boolean
default:"false"
When
false (default), the namespaces in modBlacklist are excluded from progression gating — their advancements can be earned at any time. When true, the list becomes a whitelist: only advancements from the listed namespaces are gated; all others are free.config/customadvancements-common.toml
config/customadvancements-common.toml
connectedAdvancementsList
Every advancement tree has a root — an advancement with no parent. Because root advancements have no parent to gate them, they would always be immediately earnable even when progression is enabled. connectedAdvancementsList solves this by adding virtual parent links between advancements in different trees.
Each entry uses the format "parent_id -> child_id". The mod treats the left-hand advancement as a required prerequisite for the right-hand advancement, even though no such relationship exists in the advancement JSON files.
A virtual link is only consulted for advancements that have no real parent. Pointing one at an advancement that already sits inside a tree has no effect — that advancement is already gated by its own parent.
Default connections:
These defaults model the natural game progression: players must reach the relevant story milestone before the corresponding dimension’s advancement tab opens up.
Custom connections example:
config/customadvancements-common.toml
resetAdvancementProgressOnDeath
boolean
default:"false"
When
true, every completed criterion of every advancement is revoked for a player when they die, and the player is told in chat that their progress was reset. Combined with advancementProgression = true, this forces them to work through the entire progression tree again from the beginning.config/customadvancements-common.toml
Complete example — gated modpack with death penalty
This configuration gates every advancement in the game behind its parent, locks the Nether and End tabs behind story milestones, and wipes all progress on death.config/customadvancements-common.toml