promotional bannermobile promotional banner

ProgressiveStages

Gamestages for 1.21.1 with EMI and FTB Teams Integration

V2.0 RELEASE

๐Ÿ”’ Looking for Beta Testers! Found a bug? Report it on our Discord or GitHub โ€” every report helps shape the stable release.


๐Ÿ† What is ProgressiveStages?

ProgressiveStages 2.0 is the most complete progression-control framework available for NeoForge 1.21.1. Built for modpack developers who want players to actually earn their way through content โ€” not skip straight to endgame on day one.

Lock items, blocks, fluids, recipes, crops, enchantments, dimensions, mobs, interactions, loot rolls, GUIs, pet interactions, structures, and 3D regions behind meaningful progression milestones. Players unlock stages through exploration, quests, advancements, boss kills, item pickups, or any combination of those events. No more sequence breaking. No more bypassing your carefully crafted progression curve.

If you've ever wanted Gamestages โ€” but on modern NeoForge, with depth, with team support, with EMI/JEI integration, and with the kind of safety nets that survive real modpacks โ€” this is it.


โœจ What's new in 2.0?

2.0 is a ground-up rewrite of the locking model. Every category now uses the same unified prefix system, the same [unlocks] carve-out grammar, and the same per-stage [enforcement] exemptions. New surfaces, new triggers, and a completely rewritten config schema:

  • ๐Ÿ†• Unified prefix system โ€” id: / mod: / tag: / name: / # all work in every locked list, across every category.
  • ๐Ÿ†• [[multi]] trigger requirements โ€” gate a stage behind a set of conditions ("own a stone sword AND a stone pickaxe AND a stone axe"). Mix item:, advancement:, dimension:, and boss: sub-triggers freely, with all_of or any_of semantics.
  • ๐Ÿ†• Multi-stage gating โ€” the same content can be locked by multiple stages at once. Players must unlock every gating stage to use it.
  • ๐Ÿ†• [crops] โ€” full crop-progression gating: planting, growth, bonemeal, harvest.
  • ๐Ÿ†• [enchants] โ€” gate enchantments at the table, the anvil, villager trades, AND strip them from existing gear on inventory scan.
  • ๐Ÿ†• [mobs] โ€” gate spawning of specific mobs (or whole mod namespaces, or tags). Includes dynamic replacement โ€” swap an unwanted spawn for a friendlier mob automatically.
  • ๐Ÿ†• [pets] โ€” separately gate taming, breeding, commanding, and riding for animals.
  • ๐Ÿ†• [screens] โ€” one list gates every GUI surface, including held-item GUIs (backpacks, portable workstations, held shulker boxes).
  • ๐Ÿ†• [structures] โ€” gate entry to vanilla and modded structures, lock chests inside them, prevent block break/place/explosions/spawns inside the bounding box.
  • ๐Ÿ†• [[regions]] โ€” define hand-authored 3D boxes per dimension with their own flags and debuffs.
  • ๐Ÿ†• [loot] โ€” a single list filters chest, fishing, archeology, mob-drop, and block-drop rolls through a Global Loot Modifier. Lootr is supported out of the box.
  • ๐Ÿ†• [curios] โ€” per-slot gating when Curios is installed.
  • ๐Ÿ†• [[interactions]] โ€” fine-grained "item-on-block" / "item-on-entity" / "right-click-this-block" rules for Create-style and modded interactions.
  • ๐Ÿ†• Native FTB Quests "Stage Required" field on every quest and chapter โ€” no workarounds.
  • ๐Ÿ†• /stage progress command โ€” next shows what you can unlock right now (with per-trigger โœ“/โœ—), all shows the full roadmap, <stage> shows the breakdown for one specific stage.
  • ๐Ÿ†• Creative-bypass popup so admins know when their actions are being skipped.
  • ๐Ÿ†• Configurable messages โ€” every chat line, tooltip, and lock message supports &-color codes and placeholders.
  • ๐Ÿ†• Operator-only stage names โ€” non-op players see spoiler-free generic messages.
  • ๐Ÿ†• [unlocks] carve-outs โ€” broad locks (mod:ae2, name:diamond) can carve out specific exceptions on a per-stage basis.
  • ๐Ÿ†• [enforcement] per-stage exemptions โ€” let players stockpile raw materials before unlocking the use of them.

๐Ÿ” The Comprehensive Locking System

Every category below uses the same unified prefix system. You can mix and match id: / mod: / tag: / name: entries in any list:

Prefix Meaning Example
id:<namespace:path> Exact registry ID id:minecraft:diamond
(no prefix) Implicit id: minecraft:diamond
mod:<namespace> Entire mod namespace mod:ae2
tag:<namespace:path> A registry tag tag:minecraft:logs
name:<substring> Case-insensitive substring of the full ID name:netherite
#<namespace:path> Legacy tag shorthand #minecraft:crops

What you can lock

  • ๐Ÿช“ Items โ€” use, pickup, hotbar, mouse-pickup, full-inventory removal, all independently toggleable.
  • ๐Ÿ“ฆ Blocks โ€” placement and right-click interaction. State-aware (Visual Workbench-style shim systems are handled correctly).
  • ๐Ÿงช Fluids โ€” bucket pickup, bucket placement, in-world flow, submersion (locked fluids apply Slowness II + Blindness), and recipe-viewer visibility.
  • ๐Ÿ“œ Recipes โ€” by recipe ID (locked_ids) OR by output item (locked_items). Hide locked recipes from EMI/JEI entirely or show them with overlays.
  • ๐ŸŒพ Crops โ€” planting, growth, bonemeal, harvest. Growth uses nearest-player resolution so a single un-staged player doesn't slow the whole server.
  • ๐ŸŒ Dimensions โ€” pre-travel cancel + post-travel safety net + per-second tick check. Nature's Compass is gated automatically.
  • โœจ Enchantments โ€” at the table, the anvil, villager trades, AND stripped from inventory items on the periodic scan (catches loot, fishing, etc.). Curios slots are scrubbed too.
  • ๐Ÿ‘พ Entities (attack) โ€” [entities] blocks attacking specific entity types.
  • โš™๏ธ Interactions โ€” [[interactions]] lets you gate block_right_click, item_on_block, and item_on_entity events in fine detail.
  • ๐ŸŽ Loot rolls โ€” chest loot, fishing rolls, archeology, mob drops, block drops, Lootr per-player rolls โ€” all filtered through a single [loot] list.
  • ๐Ÿบ Mob spawning โ€” locked_spawns cancels finalizeSpawn-based spawns. Dynamic replacement ([[mobs.replacements]]) lets you swap one mob for another at spawn time.
  • ๐Ÿถ Pets โ€” independently gate taming, breeding, commanding (sit/stand/follow), and riding.
  • ๐Ÿ–ฅ๏ธ Screens (GUIs) โ€” one list, two surfaces: block GUIs (crafting tables, anvils, chests, modded machines) AND held-item GUIs (backpacks, portable workstations, held shulkers).
  • ๐Ÿ›๏ธ Structures โ€” gate vanilla + modded structure entry. Chest-locking inside the bounding box is always on. Optional rule flags: prevent_block_break, prevent_block_place, prevent_explosions, disable_mob_spawning.
  • ๐Ÿ“ Regions โ€” hand-authored 3D boxes in a specific dimension with per-region flags: push players out + debuff, prevent break/place/explosions/spawns.
  • ๐Ÿ’ Curios slots โ€” per-slot gating with automatic ejection + enchantment-strip when Curios is installed.

Whitelists win

Every category supports always_unlocked = [...] for exact-ID exceptions. Lock all of Mekanism but keep the Configurator usable:

[items]
locked = ["mod:mekanism"]
always_unlocked = ["mekanism:configurator"]

And per-stage [unlocks] carves out exceptions in even broader scopes โ€” see the docs for the full grammar.


โšก Automatic Stage Triggers

Triggers live in one file (config/ProgressiveStages/triggers.toml). Stages grant themselves when players:

  • ๐Ÿ… Complete a specific advancement โ€” [advancements]
  • ๐ŸŽ’ Pick up a target item โ€” [items] (also scans inventory at login to catch players who already have it)
  • ๐ŸŒ€ Enter a dimension for the first time โ€” [dimensions] (one-time, persisted per-world)
  • ๐Ÿ’€ Defeat a boss โ€” [bosses] (one-time, persisted per-world)

๐Ÿ†• [[multi]] โ€” compound trigger requirements

The headline 2.0 trigger feature. Require MULTIPLE conditions before a stage is granted:

[[multi]]
stage = "stone_tools_master"
description = "Own a full set of stone tools"
all_of = [
    "item:minecraft:stone_sword",
    "item:minecraft:stone_pickaxe",
    "item:minecraft:stone_axe",
]

Mix surfaces freely โ€” items, advancements, dimensions, bosses:

[[multi]]
stage = "endgame"
description = "Beat the major bosses + reach the End + survive once"
all_of = [
    "boss:minecraft:ender_dragon",
    "boss:minecraft:wither",
    "dimension:minecraft:the_end",
    "advancement:minecraft:adventure/totem_of_undying",
]

Use any_of instead of all_of for "satisfy any one route" gating. Per-player progress is persisted across restarts; retroactive credit on login is given for item / advancement / dimension surfaces (boss kills must be re-earned).


๐Ÿ”— Dependency Graph

Stages declare other stages as prerequisites โ€” single string or list. The dependency graph is an arbitrary DAG, validated at load time:

Linear progression โ€” the classic tier chain:

๐Ÿชจ stone_age
    โ””โ”€โ”€ โš™๏ธ iron_age
            โ””โ”€โ”€ ๐Ÿ’Ž diamond_age
                    โ””โ”€โ”€ ๐Ÿ”ฎ netherite_age

Branching paths โ€” tech and magic unlock separately:

๐Ÿชจ stone_age
    โ”œโ”€โ”€ โš™๏ธ iron_age
    โ”‚       โ”œโ”€โ”€ ๐Ÿ’Ž diamond_age
    โ”‚       โ””โ”€โ”€ ๐Ÿญ tech_age
    โ”‚               โ””โ”€โ”€ โ˜ข๏ธ nuclear_age
    โ””โ”€โ”€ ๐Ÿ“š magic_age
            โ”œโ”€โ”€ ๐Ÿ”ฎ arcane_age
            โ””โ”€โ”€ ๐ŸŒฟ nature_age

Multi-dependency gates โ€” require multiple paths before unlocking endgame:

๐Ÿชจ stone_age
    โ”œโ”€โ”€ โš™๏ธ iron_age โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚       โ””โ”€โ”€ ๐Ÿ’Ž diamond_age โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
    โ”‚                                 โ–ผ
    โ””โ”€โ”€ ๐Ÿ“š magic_age โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ ๐ŸŒŒ endgame_age
            โ””โ”€โ”€ ๐Ÿ”ฎ arcane_age โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                (requires BOTH diamond_age AND arcane_age)

Parallel independent trees โ€” some stages have no dependencies at all:

๐Ÿชจ stone_age          ๐ŸŒฟ nature_age          ๐Ÿ—บ๏ธ exploration_age
    โ””โ”€โ”€ โš™๏ธ iron_age       โ””โ”€โ”€ ๐Ÿ”ฎ druid_age       โ””โ”€โ”€ ๐ŸŒ‹ nether_age
            โ””โ”€โ”€ ๐Ÿ’Ž diamond_age                             โ””โ”€โ”€ ๐Ÿ‰ end_age

With linear_progression = true, granting a stage auto-grants every missing dependency up the chain. With it false, /stage grant warns about missing dependencies and requires a second confirmation to bypass.


๐Ÿ“– EMI & JEI Integration

The best visual lock experience available for 1.21.1:

  • ๐Ÿ”’ Lock-icon overlays on every locked item in the index and recipe viewer (size + position configurable)
  • ๐ŸŸ  Translucent highlight overlay on locked recipe outputs (color configurable, ARGB hex)
  • ๐Ÿ’ฌ Tooltips showing the required stage name โ€” or a generic "Progress further to unlock" line for non-op players (reveal_stage_names_only_to_operators)
  • ๐Ÿ‘ป Hide locked items from the search index entirely (optional)
  • โ“ Item-name masking โ€” locked items render as "Unknown Item" until unlocked
  • โšก Updates instantly when a stage is granted or revoked, when switching gamemodes, or when reloading the config โ€” no relog, no reload
  • ๐Ÿ›ก๏ธ NBT-variant aware โ€” every variant of locked items (Mekanism Chemical Tanks, Meka-Suit pieces, items with stored energy/fluid/chemical data) is hidden together

๐Ÿ‘ฅ Team Progression (FTB Teams)

  • ๐Ÿค Team-scoped stages โ€” the whole team progresses together
  • ๐Ÿ”„ Synchronized unlocks โ€” one member earns it, the whole team gets it
  • ๐Ÿ’พ persist_stages_on_leave โ€” keep a player's stages when they leave the team
  • ๐Ÿช‚ Automatic fallback to solo mode when FTB Teams isn't installed

๐Ÿ“‹ FTB Quests Integration

Native, deep integration:

  • โœ… Stage Tasks โ€” quests require a stage before completing
  • ๐ŸŽ Stage Rewards โ€” quests grant stages directly
  • ๐Ÿ†• ๐Ÿ” Stage Required field on every Quest and Chapter โ€” hide quests or whole chapters until a stage is reached, built directly into the Visibility section of the properties UI
  • ๐Ÿ”„ Live re-checks โ€” granting/revoking a stage debounces a recheck for every affected player, budgeted per tick so heavy quest packs stay smooth
  • ๐Ÿช‚ Soft-disable โ€” if an FTB API change breaks integration, locks and EMI/JEI keep working; the mod logs a clear error pointing at the exact failure

๐Ÿ› ๏ธ Pack Developer Tools

  • ๐Ÿ“ TOML-based config โ€” human-readable, fully commented, no JSON hell
  • ๐Ÿš€ Auto-generated examples โ€” stone_age, iron_age, diamond_age, plus triggers.toml on first launch. The diamond_age.toml template is the canonical 2.0 reference, with every category and field documented inline.
  • ๐Ÿ”„ Live reload โ€” /progressivestages reload re-parses all stage TOMLs and re-syncs every online player, no restart required
  • โœ”๏ธ Validation โ€” /progressivestages validate parses every stage file with detailed error reporting and warns about dependency issues before your players find them
  • ๐Ÿ†• /stage progress โ€” show players exactly what they can unlock next, the full roadmap, or the per-trigger breakdown for one specific stage
  • ๐Ÿ’ฌ Unlock messages โ€” broadcast color-coded chat messages to every team member when a stage unlocks
  • ๐Ÿ†• Configurable messages โ€” every player-facing string (tooltips, chat, command output, type labels, creative popup) is overridable in config
  • ๐Ÿ› Debug logging โ€” verbose stage-check / lock-query / team-operation output

โš™๏ธ Highly Configurable

Toggle any enforcement type independently โ€” items, recipes, blocks, entities, dimensions, interactions, mobs, crops, pets, screens, loot, enchants, regions, structures.

  • ๐ŸŽฏ Per-stage [enforcement] exemptions โ€” let players stockpile raw diamonds before unlocking the use of diamonds:
  [items]
  locked = ["name:diamond"]
  [enforcement]
  allowed_pickup = ["minecraft:diamond"]
  allowed_inventory = ["minecraft:diamond"]
  • ๐ŸŽจ EMI/JEI visuals โ€” icon size, position, overlay color, hide-vs-show
  • ๐Ÿ”‡ Notification cooldowns โ€” no chat spam when touching locked items
  • ๐ŸŽญ Mask locked item names โ€” keep content mysterious with "Unknown Item"
  • ๐Ÿ”Š Lock sound โ€” configurable sound + volume + pitch when an action is blocked
  • ๐Ÿ‘ฎ Operator-only stage names โ€” reveal_stage_names_only_to_operators hides stage IDs from non-op players for spoiler-free progression
  • ๐Ÿ†• โš ๏ธ Creative-bypass popup โ€” warn admins when entering creative that locks are being skipped
  • ๐Ÿ› Debug logging โ€” detailed enforcement traces

๐Ÿ’ป Commands

Player-facing

  • /stage list [player] โ€” list a player's stages
  • /stage check <player> <stage> โ€” boolean check
  • /stage info <stage> โ€” stage metadata: id, dependencies, description, lock count
  • /stage tree โ€” ASCII dependency tree of every loaded stage
  • ๐Ÿ†• /stage progress โ€” what the caller can unlock right now
  • ๐Ÿ†• /stage progress next [player] โ€” every reachable stage + per-trigger โœ“/โœ— breakdown
  • ๐Ÿ†• /stage progress all [player] โ€” full roadmap, including unreachable stages
  • ๐Ÿ†• /stage progress <stage> [player] โ€” per-trigger breakdown for one specific stage

Admin

  • /stage grant <player> <stage> โ€” grant a stage (prompts for confirmation if dependencies are missing)
  • /stage revoke <player> <stage> โ€” revoke a stage
  • /progressivestages reload โ€” reload every stage file + triggers.toml, re-sync online players
  • /progressivestages validate โ€” detailed parse + dependency check across every stage file
  • /progressivestages ftb status [player] โ€” diagnostics for the FTB Quests integration
  • /progressivestages trigger reset <player> <type> <key> โ€” clear a persisted trigger (dimension, boss, multi)
  • ๐Ÿ†• /progressivestages multi list [player] โ€” every [[multi]] requirement and (with a player) their per-requirement progress
  • /progressivestages no-creative-popup โ€” per-player toggle for the creative-bypass popup

๐Ÿ”Œ Integrations

  • FTB Teams โ€” team-shared stage state, automatic fallback to solo
  • FTB Quests + FTB Library โ€” Stage Tasks, Stage Rewards, native Stage Required property, live rechecks
  • EMI โ€” lock icons, highlights, tooltips, NBT-variant hiding
  • JEI โ€” lock icons, highlights, tooltips
  • Curios โ€” per-slot gating, ejection, enchantment strip
  • KubeJS โ€” scriptable stage grants/queries
  • Lootr โ€” per-player loot roll filtering via the published ILootrFilterProvider ServiceLoader
  • Mekanism โ€” NBT-variant hiding for Chemical Tanks, Meka-Suit pieces, energized items
  • Nature's Compass โ€” auto-gated when any dimension is locked
  • Create / Visual Workbench โ€” state-aware block gating so workbench shims classify correctly

๐Ÿ“ฆ Requirements

  • NeoForge for Minecraft 1.21.1 โ€” required
  • EMI or JEI โ€” optional, for recipe viewer integration
  • FTB Quests + FTB Library โ€” optional, for quest integration
  • FTB Teams โ€” optional, for team-shared progression
  • Curios โ€” optional, for per-slot gating

๐Ÿ“š Documentation

The mod ships with an exhaustive DOCUMENTATION.md covering every TOML field, every config key, every command, every integration, and every troubleshooting tip. Read it on GitHub, or grab the file out of the jar.


๐Ÿ› Found a bug? Have a feature request?

Open an issue on GitHub or drop it in our Discord. ProgressiveStages 2.0 is actively developed and every report gets looked at. We're building toward a stable 1.0 release and your feedback directly shapes what comes next.

The ProgressiveStages Team

profile avatar
  • 5
    Followers
  • 7
    Projects
  • 186.9K
    Downloads

More from EnVyOnMyMindView all

  • World of Drakora Medieval edition project image

    World of Drakora Medieval edition

    • 487
    • Modpacks

    Its a new take on rpg modpacks, medieval style! Build your world, fight enemies and become stronger!

    • 487
    • June 9, 2026
    • Modpacks
    • +1
  • IntegratedPlaytime project image

    IntegratedPlaytime

    • 41.1K
    • Mods

    Server-side/Client-Sided playtime tracker with 33-rank progression, AFK detection, custom GUI, LuckPerms sync, OpenPAC claim cleanup, display ranks, gradient colors, rotating backups, and full admin tools. Forge 1.20.1.

    • 41.1K
    • May 2, 2026
    • Mods
    • +2
  • Server Essentials Forge (LuckPerms) project image

    Server Essentials Forge (LuckPerms)

    • 411
    • Mods

    Plugin like management for 1.20.1 modded forge servers.

    • 411
    • May 2, 2026
    • Mods
    • +2
  • Future Shops project image

    Future Shops

    • 18.9K
    • Mods

    FutureShops is a Minecraft Forge 1.20.1 economy mod that adds server shops, player-owned storefronts, bartering, and physical currency with a modern in-game UI

    • 18.9K
    • May 2, 2026
    • Mods
    • +1
  • World of Drakora Medieval edition project image

    World of Drakora Medieval edition

    • 487
    • Modpacks

    Its a new take on rpg modpacks, medieval style! Build your world, fight enemies and become stronger!

    • 487
    • June 9, 2026
    • Modpacks
    • +1
  • IntegratedPlaytime project image

    IntegratedPlaytime

    • 41.1K
    • Mods

    Server-side/Client-Sided playtime tracker with 33-rank progression, AFK detection, custom GUI, LuckPerms sync, OpenPAC claim cleanup, display ranks, gradient colors, rotating backups, and full admin tools. Forge 1.20.1.

    • 41.1K
    • May 2, 2026
    • Mods
    • +2
  • Server Essentials Forge (LuckPerms) project image

    Server Essentials Forge (LuckPerms)

    • 411
    • Mods

    Plugin like management for 1.20.1 modded forge servers.

    • 411
    • May 2, 2026
    • Mods
    • +2
  • Future Shops project image

    Future Shops

    • 18.9K
    • Mods

    FutureShops is a Minecraft Forge 1.20.1 economy mod that adds server shops, player-owned storefronts, bartering, and physical currency with a modern in-game UI

    • 18.9K
    • May 2, 2026
    • Mods
    • +1