History Stages 6.0.0-1.21.1-fabric
Curse Maven Snippet
What's new
Full Changelog: https://github.com/Flix100000/History-Stages/compare/5.2.1-1.21.1-fabric...6.0.0-1.21.1-fabric
One of the biggest updates for History Stages so far, and on Fabric it arrives in one go. The last Fabric build was 5.2.1 in May, so this carries 5.3, 5.4, 5.5 and 5.6 along with 6.0.0 and 6.0.1: five new lock categories, a stage map players can open themselves, an addon surface other mods can build on, and a long list of fixes. The few places where Fabric does something differently are listed under Other.
Before you update
Most of this migrates on its own, but a few things behave differently than they did in 5.2. Worth reading before 6.0.0 goes on an existing pack.
- Server and client both have to be on 6.0.0. All 48 packets were rebuilt on Fabric's own networking and the stage sync is gzipped, so a 5.2 client and a 6.0.0 server no longer understand each other.
- Settings moved into
historystages/settings/, split intovisualandgameplayby what a setting does rather than by which file it happened to load from. Every pre-6.0 config path is mapped to where it lives now and the values are carried across on first load, so nothing is lost. The old files stop being read after that. - A spawn lock no longer implies an attack lock. Locking a creature's spawns used to make it unhittable as well, and that rule does not survive the new conditions — "zombies only at night" would have handed out invulnerable night zombies. A creature that should also be unhittable belongs in the attack list from now on. This change is a silent one: nothing errors, the mob simply becomes attackable.
tradeis a new item action, and old files count it as locked. Stage files store the complement of an action list, so an action that no existing file mentions is gated in every one of them. An item somebody narrowed to "use only" gates trading as well from this version on.- Four commands are gone:
/history global info,/history global list,/history individual infoand/history individual list. They printed a stale text dump of the stage definition that the editor has long since shown better./history temporary global infoand/history temporary individual infostay, because they show runtime state nothing else can. Quest rewards that call the removed ones will hit a syntax error. - Locked recipes are hidden from the recipe book by default. They used to sit in there looking craftable. The new switch is
recipe_book.hideLockedRecipesInBook. - Worlds from before 6.0.0 do not know when a stage was unlocked. The new map background needs that timestamp, so in an older world the deepest stage in the tree decides it once, until something unlocks again.
- Zones ship as BETA. The category works, but a zone writes more into a stage file than any other entry and that format may still move. It is marked
[BETA]in the editor for the same reason.
New
- Locks: Zones [BETA] — draw an area out of cuboids, spheres and cylinders, several shapes per zone, and hang it on a stage. A locked zone can push players back with a client-side barrier, show a force-field wall up close and an outline from a distance, and tint the screen from the inside.
- Locks: Trades — hide single merchant offers behind a stage, per player, back the moment the stage unlocks. Three ways to say what is gated that do not overlap: a single offer, a profession (optionally only on some of its levels), or a merchant level. A locked offer is absent from the list rather than crossed out, so nobody loses a profession or stops levelling.
- Locks: Fluids — gate a fluid through whatever carries it, vanilla buckets, modded buckets and tank items alike, without listing a single item id. Also covers the recipes a fluid produces or is consumed by, through an
ingredientaction that only this category has. - Locks: Biomes and interactions, the latter with per-action and held-item filters. A locked structure is kept out of world generation rather than only sealed off, and a structure can be capped on how often it generates.
- Locks: A structure lock can put up a wall, stop projectiles, and check the position a click lands on so nobody reaches in from outside. The zone is built from the world seed; the wall shows as a red force field, with a tint over the screen from the inside.
- Locks: A tag lock can carry an NBT or component criterion, and arbitrary data components can be matched and edited.
- Spawn: A spawn-lock entry is a full rule now. It carries a phase, eight optional conditions (dimension, biome, sky, height, time of day, light, weather, moon phase) and biomes the creature additionally spawns in, all edited in one dialog with four tabs and a sentence underneath saying in plain words what the rule does. Individual spawn sources — natural, spawner, structure, breeding, summon, spawn egg — can be gated one at a time. Stage files that use none of it stay byte-identical, and a plain string entry still blocks every source.
- Stages: Stage files can live in folders, with an organize mode in the editor for moving stages and folders around.
- Stages: A temporary stage mode with an auto re-lock timer, a lose-on-death setting, per-player unlocking of individual stages from the overview, a scoreboard objective dependency, and the option to hide or replace the names and tooltips of locked items.
- Graph: The dependency graph is a hand-authorable stage map that players can open in-game, with a reworked sidebar, a detail window in place of the old panel, a visibility ladder, a strict progressive mode, and per-stage node styles editable per lock state. A stage can change the map background once it is unlocked; the base colour of the surface is
canvas.backgroundColoringraph.tomlnow instead of being built in, unchanged at#17171A. - Addons: Another mod can register its own lock categories, requirements, auto-triggers, per-stage settings and config sections, and each one gets a tab in the in-game editor that looks like the built-in ones. A packmaker configures it without writing a script. See the Addon Development wiki page.
- Recipes: Recipe locks apply per player at the crafting table, the 2×2 grid, the stonecutter and the smithing table. Furnaces, brewing, the crafter block, hoppers and mod autocrafters have nobody standing there and stay global-only.
- Dependencies: A deposit can ask for an item tag, a requirement can demand an individual stage of the researcher alone, and a dependency graph viewer shows how the groups hang together.
- Triggers: A stage can unlock itself from player and world state, without anyone touching a pedestal.
- Pedestal: Tier II, III and IV pedestals with research boosters, and a comparator output that follows research progress from 0 to 15.
- Scroll: The research screen is reworked, with scroll completion modes, a readable open-scroll document, open scrolls readable from a lectern, and a configurable scroll tooltip.
- Editor: The recipe picker is one panel and shows what a recipe is made of instead of its raw id, with fluids filed where the recipes are. The NBT editor is a list of criterion cards, and Ctrl-clicking an inventory slot imports its components. The three entity tabs merged into one Entities tab with sections. Items a pack deleted stay out of the pickers.
- Editor: A classic HSV colour picker with fixed swatches, a credits dialog, a display-name prompt when creating a stage, select-all and multiselect for searchable lists, styled toasts, and widgets that grow to fit long translations instead of overflowing. Save stays on the current screen and writes the whole stage.
- Commands: Six lock messages — item, block, entity item, enchantment, unknown dimension, unknown mob — are configurable with
&colour codes. - Config: A pack can hide the editor button in the pause menu, the config editor has a Graph tab for
graph.toml, visual settings reach every player rather than only the admin who edited them, and a player's own settings come back when they leave a server. - Compat: FTB Quests shows a stage's display name and icon in the quest book, offers a dropdown instead of a free-text id field, can complete a task when a stage is locked, and picks stages through a searchable screen. EMI is at parity with JEI, and both can hide locked items and recipes. Locked items are inert against Spell Engine and Better Combat. Equip locks cover Accessories.
Fixes
- Locks: Locking a recipe no longer takes down other recipes that share its ingredients, and the recipe list itself is gated rather than only the single lookup — machines that read the whole list instead of asking for one recipe were a hole (#121).
- Locks: An entry's
unlock_actionsare honoured everywhere a gate asks, and an empty action list means nothing is locked instead of silently flipping to everything. A mod entry narrowed torecipeused to shut the whole mod (#117). - Locks: A container click is judged by what it takes out of foreign storage, not by what lies in the clicked slot. Sorting a locked item inside your own inventory, throwing it away and stacking onto it all work now, and number-key swaps and double-click gathering are checked at all, which they never were (#122).
- Locks: A recipe is asked what it makes against the world's real registries instead of an empty set. A modded recipe that builds its result from the registries used to answer with nothing and stayed unlocked.
- Locks: A gated fluid can no longer be poured into the world or tipped into a cauldron. Refusing the held item covers pouring onto the ground; a cauldron takes the bucket and empties it on a path the item's own refusal never reaches, so the block half is refused too — only where the block would actually take the fluid, and only once the fluid is known to be gated. Placing a gated block now says why it will not go down instead of looking like the game is broken.
- Locks: An equip lock cannot be walked around with Mouse Tweaks or a similar inventory helper. Clicks aimed at armour and offhand slots are refused at the menu.
- Lootr: Loot is filtered as it is rolled rather than only when a window opens, so decorated pots and brushed suspicious blocks stop handing out locked items (#120, #124). Individual stages are honoured when loot is stripped.
- Compat: Lithium no longer crashes the game at startup. The zone barrier's wall hung on a call inside Minecraft's movement code that Lithium also claims, and a call belongs to one mod only. It adds itself to the collision list instead, which is shared (#126).
- Compat: Polymorph no longer crashes the game at startup. It replaces the same recipe lookup in the crafting menu that we replaced, so one of the two was dropped. The three recipe stations wrap the whole method now, and Polymorph's alternatives obey stage locks instead of going around them (#127).
- Compat: A backpack mod no longer keeps a world from loading. We asked every recipe result what fluid it was carrying while the world was still opening, before the other mod could read its own config to answer. That walk has moved to after the world is up, and only runs when a stage gates a fluid (#130).
- Compat: A stage name with capitals no longer takes JEI or EMI down. Better Combat is accepted at any version. The client recipe manager is no longer wiped on a stage sync, which showed up as rendering trouble in other mods.
- Trades: Gating one offer no longer cancels Minecraft's own method for opening the trade window, which skipped every other mod hooked into it. Only the list sent to the player is swapped. A merchant with nothing left now sends an empty list rather than none at all. The scan drops a trade that needs more than 50ms to name an offer and stops after two seconds, so a mod's own map trade cannot stall the server.
- Recipes: A stage gating a recipe that is not loaded is reported at load time instead of failing silently, and the editor marks those rows red. Locking or unlocking refreshes the recipe book properly instead of leaving it blank until a rejoin.
- Items: Vanilla enchantments, which became data components in 1.20.5, are matched against legacy JSON configs without a format change, and registry-backed components encode again instead of breaking item matching outright.
- Graph: A node whose requirements never arrived asks again instead of staying blank, and requirements are no longer served from the first time the node was opened.
- Dependencies: Deposited progress is filed under a group's key rather than its position, so reordering groups no longer misfiles it. A stat requirement can be fulfilled at all now, and a deposit can be gated by an NBT criterion.
- Tooltips: AND and OR are shown inside each group, where they apply.
- Network: Large packs can log in again. The stage set travelled as one plain string and hit a fixed character cap, which threw while the login packet was being encoded and dropped the player. Both the login sync and the editor sync are gzipped now, and going over a limit names the field and both numbers instead of throwing from somewhere inside the encoder.
- Editor: A warning before overwriting a stage file that changed on disk, error toasts that stay up twice as long, long suggestions that scroll, searchable lists usable at a few thousand rows, a large stage that no longer crashes the save, and a picker that no longer hits the row underneath it as it opens.
- Config: Client-side settings were rebuilt from defaults on every start, because the client spec never saved. The key lists that had to be maintained by hand are gone as well — both specs are walked instead, so a new setting cannot be forgotten in three places.
- Stages: The stage manager no longer throws a concurrent modification from the render thread.
Security and performance
- Four packets carrying a block position handed it straight to
getBlockEntity, which loads the chunk if it is not there, so sending coordinates was enough to make the server generate world on demand. All of them go through a reach check now. - Locked-item checks run through an index of what gates a subject instead of searching for it. Structure zones are derived once per structure start, pedestals check requirements every ten ticks rather than every tick, tooltips narrow through the relevance index instead of walking every stage, and the lock wall works out which cells are visible once per shape set instead of every frame.
Other
- Fabric: Opening an anvil no longer crashes the client. Mixin refuses to load a class from the package its config owns unless the config names it, and the accessor the anvil mixin casts to was not named, so the load failed the moment a player opened the block (#103).
- Fabric: Scripting is not part of this build. KubeJS ships no Fabric build for 1.21.1 and CraftTweaker none at all, so there is nothing for a script bridge to talk to. The editor and the addon surface are the way in.
- Fabric: Equip locks cover Accessories. Curios is NeoForge-only and has no counterpart here.
- Fabric: The zone map is the top-down view only. The tilted 3D view the NeoForge build has is not part of this version.
- Fabric: An addon registers through the
historystagesandhistorystages:cliententrypoints in its ownfabric.mod.jsonrather than a mod bus. Everything it can register is the same. - Fabric: The config layer is built on NightConfig, bundled inside the jar, so the TOML files stay byte-compatible with the NeoForge build and a pack can carry one set of settings across both loaders.
- Thanks to @Tech3434 for a long run of reports and compatibility findings this cycle, to @kuki2008 for the Russian translation, and to everyone who filed the issues fixed above.
This mod has no additional files

