History Stages 6.0.0-1.20.1
Curse Maven Snippet
What's new
Full Changelog: https://github.com/Flix100000/History-Stages/compare/5.6.2-1.20.1...6.0.0-1.20.1
One of the biggest updates for History Stages so far, now on 1.20.1: three new lock categories, a real script integration for KubeJS and CraftTweaker, an addon surface other mods can build on, and a long list of fixes. It carries everything from 6.0.0 and 6.0.1 on 1.21.1. The few places where 1.20.1 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.x. Worth reading before 6.0.0 goes on an existing pack.
- Server and client both have to be on 6.0.0. The stage sync is gzipped now and the network protocol version moved to
11, so a 6.0.0 client on a 5.x server gets the incompatible-mod screen instead of connecting. That is intended: the old format would have dropped the player mid-login with nothing in the log naming a cause. - 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, including the structure border and overlay settings the 5.x Forge client file kept under[visuals], 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.
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. - 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. Stage files that use none of it stay byte-identical.
- Scripts: KubeJS and CraftTweaker can read stage state, change it and ask whether something is gated, with four KubeJS events, two ZenScript event types and a
hasStageexpansion on the player. Naming a Java event class as a string was the only way in before, and a typo in that string failed silently. Scripts still cannot define what belongs to a stage — that stays with the editor, so the editor keeps showing what is actually locked. - 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, hoppers and mod autocrafters have nobody standing there and stay global-only.
- Dependencies: A deposit can ask for an item tag, and a requirement can demand an individual stage of the researcher alone.
- Triggers: A stage can unlock itself from player and world state, without anyone touching a pedestal.
- Graph: A stage can change the map background once it is unlocked. The base colour of the graph surface is
canvas.backgroundColoringraph.tomlnow instead of being built in; the default is unchanged at#17171A. - 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. The three entity tabs merged into one Entities tab with sections. Items a pack deleted stay out of the pickers.
- Config: A pack can hide the editor button in the pause menu.
- Config: Visual settings reach every player, not just the admin who edited them, and a player's own settings come back when they leave a server.
- Compat: Equip locks cover Accessories as well as Curios.
Fixes
- Locks: 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. FastSuite answers those lookups itself and is covered now too (#121).
- 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: 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).
- Lootr: Loot is filtered as it is rolled rather than only when a window opens, so items a player put into a Lootr container are no longer deleted on the next open, and decorated pots and brushed suspicious blocks stop handing out locked items (#120, #124).
- 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 rebuilds the recipe book.
- 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 stage name with capitals no longer takes JEI or EMI down. JER pages never draw the locked overlay.
- 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.
- 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, and a picker that no longer hits the row underneath it as it opens.
- Config: The key lists that had to be maintained by hand are gone. Both specs are walked instead, so a new setting cannot be forgotten in three places.
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.
- Leaving a server used to keep its lock zones on screen until something synced over them.
Other
- 1.20.1: MixinExtras is bundled inside the jar, because Forge 1.20.1 does not ship it, so there is nothing extra to install.
- 1.20.1: The zone map is the top-down view only. The tilted 3D view from 1.21.1 is not part of this version.
- 1.20.1: Picking up a gated fluid from a cauldron is refused for the vanilla water and lava cauldrons. A modded cauldron is not recognised, since 1.20.1 has no registry to look it up in.
- 1.20.1: Once a KubeJS script adds recipes, KubeJS ends the recipe load early, so the report about locked recipes that are not loaded does not run in those packs. The locks themselves are unaffected.
- Thanks to @Tech3434 for a long run of reports and compatibility findings this cycle, and to everyone who filed the issues fixed above.
This mod has no additional files

