
History Stages is a comprehensive progression and gatekeeping mod for Minecraft. It empowers modpack creators to lock items, recipes, dimensions, mobs, and even entire mod content behind custom "Stages" (Eras). Players must use the Research Pedestal to unlock these stages and advance their technological level.
🛠 Features
- Gated Progression: Lock items, tags, or entire mods behind specific research stages.
- Dimension Locks: Prevent players from entering specific dimensions (Nether, End, etc.) until they have the required knowledge.
- Mob Control: Two distinct lock modes for entities:
- Attacklock: Prevent players from damaging specific mobs until the required stage is unlocked.
- Spawnlock: Prevent entities from spawning entirely while the stage is locked (covers natural spawning, spawners, and commands). Spawnlocked entities are automatically also attacklocked.
- Smart Loot Filtering: Locked items are automatically removed from loot chests or replaced with configurable items like Cobblestone or Dirt.
- Locked Mob Drops: Locked items are removed from mob drops as well.
- Lock Icon Overlay: Locked items show a lock icon in inventories and JEI (auto-disabled with EMI).
- Research Pedestal: A functional block with a dedicated UI for unlocking stages using Research Scrolls. Each stage can have its own configurable research time.
- Toast Notifications: An advancement-style popup is shown to all players when a stage is unlocked.
- JEI and EMI Integration: Locked items can be hidden or marked in Just Enough Items and EMI.
- Forge Events: Fires
StageEvent.UnlockedandStageEvent.Lockedevents for KubeJS, CraftTweaker, and other mod integrations. - Localization: English and German translations included.
📘 Obtaining Research Scrolls
To maintain maximum flexibility for modpack creators, this mod does not include default crafting recipes for the Research Pedestal or the Research Scrolls.
If you want players to be able to craft these items, you must add your own recipes using:
- KubeJS
- CraftTweaker
- Or a standard Datapack.
Obtaining Scrolls via Command
You can give specific Research Scrolls to players (e.g., as quest rewards) using this command:
/give @s historystages:research_scroll{StageResearch:"YOUR_STAGE_NAME"}
Note: Replace
YOUR_STAGE_NAMEwith the exact ID of your stage (the filename of your JSON).
📂 How to Create Stages (Click to expand)
Stages are defined via JSON files located in config/historystages/.
- Run the game once to generate the directory.
- Create a new
.jsonfile (e.g.,bronze_age.json). - Use the following format:
{
"display_name": "Bronze Age",
"research_time": 60,
"items": [
"minecraft:iron_ingot",
"minecraft:iron_pickaxe"
],
"tags": [
"forge:ores/iron"
],
"mods": [
"mekanism"
],
"dimensions": [
"minecraft:the_nether"
],
"entities": {
"attacklock": [
"minecraft:zombie"
],
"spawnlock": [
"minecraft:skeleton"
]
}
}
Fields:
- display_name: Human-readable name shown in messages and tooltips.
- research_time: (Optional) Research duration in seconds for this stage. If omitted or 0, uses the global config default.
- items: List of item IDs to lock.
- tags: List of item tags to lock.
- mods: List of mod IDs to lock all items from.
- dimensions: List of dimension IDs to block access to.
- entities: Object with two subcategories:
- attacklock: Entities that cannot be attacked by players while the stage is locked.
- spawnlock: Entities that are prevented from spawning entirely (natural, spawners, and commands). Spawnlocked entities are also automatically attacklocked.
Note: Files starting with an underscore (_) are ignored and can be used as templates.
⚠️ Breaking Change in 2.0.0: The old flat
entitieslist format ("entities": ["minecraft:zombie"]) is no longer supported. You must update your stage files to the new nested format shown above.
⌨️ Admin Commands (Click to expand)
All commands require Permission Level 2 (OP) to be executed.
| Command | Description |
|---|---|
/history unlock <stage> |
Unlocks a specific stage for all players globally. |
/history unlock * |
Unlocks all defined stages at once. |
/history lock <stage> |
Relocks a specific stage, revoking access. |
/history lock * |
Resets everything. Relocks all stages globally. |
/history list |
Displays a list of all stages currently registered in the system. |
/history info <stage> |
Shows detailed information about a specific stage (items, mods, dims, entities, research time). |
/history reload |
Reloads all JSON configurations from the config folder and syncs them with all players. |
🔧 Forge Events for Mod/Script Authors (Click to expand)
History Stages fires custom Forge events on the EVENT_BUS:
- StageEvent.Unlocked — Fired after a stage is unlocked (via command or Research Pedestal).
- StageEvent.Locked — Fired after a stage is locked (via command).
Both events provide getStageId() and getDisplayName().
KubeJS Example:
ForgeEvents.onEvent(
'net.bananemdnsa.historystages.events.StageEvent$Unlocked',
event => {
console.log('Stage unlocked: ' + event.getStageId());
}
);
📦 Dependencies
⚙️ Configuration
The mod is highly customizable via historystages-common.toml and historystages-client.toml. You can toggle:
- Toast popup notifications, achievement sounds, and actionbar messages.
- Customizable unlock message format with color codes.
- How loot replacement behaves (replacement list, tag-based replacement, or deletion).
- Lock icon overlays on locked items.
- Tooltip display options (show stage names, show all required stages).
- Dimension and mob lock feedback (actionbar and/or chat messages).
- Debug messages to help find errors in your JSON files.
- Default research time as a global fallback.
- And more...
⚠️ Note: This mod is currently in active development. Bugs may occur. Please report any issues to help improve the mod.

