Skip to content

Stability Promise

Warlon Mhite edited this page Nov 4, 2026 · 3 revisions

Home › Developers › Stability Promise

What Hempdustry 2 promises never to break, what stays free to change, and how its versions are numbered. For everyone: players, server owners, pack makers, datapack and resource pack authors, and addon authors.

On this page: The promise · What it means for you · What counts as breaking · What is frozen · What can change · If a frozen thing ever had to move · Versions · Loaders and Minecraft versions · How we got here

The promise

Every public release of Hempdustry 2, betas included, is non-breaking. A world, a datapack, a resource pack or an addon that worked on one public build works on the next. Since 2.0.2, a world made with any version of Hempdustry 2 opens on every later one — with no migration, no command, and nothing for you to do.

Not "usually", and not "after a conversion step". You update the jar, and your world is the world you left.

The reason it is this strict: a mod that breaks saves does not just annoy one player. It strands servers, which cannot update without asking everyone to lose something, and it drops out of modpacks, which cannot take an update mid-line. And the failures are quiet — a renamed item does not raise an error, it simply vanishes from every chest that held it.

What it means for you

You are… You can count on…
a player swapping the jar for a newer one and opening your world: every item, block, machine, plant and advancement is as you left it. Keep a backup anyway — other mods, the loader and Minecraft itself make no such promise.
a server owner updating mid-season. config/hempdustry.json keeps its keys; a setting added later appears in your file at its default; a file the mod cannot read is left exactly as it is, never overwritten (Configuration).
a pack maker taking a Hempdustry update in the middle of a pack's life, with the ids, tags and data formats your scripts and quests name all still there.
a datapack author your files still loading: a data format only ever gains fields, each optional, whose default means exactly what your file meant before. Ids you point at stay.
a resource pack author your files still being read: model, texture, block state and sound paths keep their names, and the smoking gear's tint layers keep their meaning. The one piece of art 2.1 moved is below.
an addon author the api package and the types it names never losing or changing a member, on your loader (Addon Development).

What counts as breaking

A change breaks the promise if, after it, any of these is true for something made with an earlier version:

  1. An item, block or entity no longer exists, or exists under another id.
  2. A stack loses data it had, or disappears.
  3. A placed block loses its contents, its orientation or its progress.
  4. A player loses advancement progress.
  5. The game logs an error, or refuses to load a chunk, a dimension or the world.
  6. A datapack or resource pack that worked stops working, or silently stops taking effect.

The last one is on the list on purpose. A pack is somebody's work, and breaking it quietly is the same failure as breaking a save quietly — it just happens to someone who is not in the room.

What is frozen

Everything a save, a datapack, a resource pack or an addon depends on. From the first public build that carries it, each of these keeps its name and meaning:

Frozen For example
Registry ids — items, blocks, entities, block entities, menus, recipe types and serializers, sounds, particles, paintings, music disc songs, advancement triggers, the creative tab, the strains hempdustry:indica_buds, hempdustry:hemp_press, hempdustry:smoke, hempdustry:indica
Block state properties and their values — values may be added, never removed a crop's age, half, condition (natural … stressed); a bar's cuts; a pot's fertility
Item components: their ids and the shape of their data hempdustry:smoke_contents, hempdustry:quality (Datapacks)
What machines and players save a machine's Items, Progress, CustomName; the Infuser's batch; edibles still on their way to a player (hempdustry:pending_edibles)
Config keys effects.maxBuffLevel, world.cropGrowthMultiplier (Configuration)
Advancement ids and criterion names so progress already made is kept
Data formats — strains, devices, edibles, green-out, the recipe types, the hempdustry:spoiling loot entry, the hempdustry:in_beldia_biome filter, the triggers' fields Datapacks
Tag ids the mod defines #hempdustry:milk_buckets, #hempdustry:siftable/flower, #c:crops/hemp (Tags)
Asset paths — models, textures, block states, item definitions, sounds, item model properties textures/block/indica_crop_stage7.png, the hempdustry:strain property (Resource Packs)
The tint contract layer0 is the object as drawn, layer1 the load the strain's colour tints
Each strain's model_index so no strain ever wears another's art
The addon API, per loader HempdustryEvents on Fabric, the api events on NeoForge, and the types they name (Addon Development)

The ids of recipes and loot tables are kept too, because a recipe book remembers recipes and datapacks and scripts name both; when one is retired, the changelog says so (below).

What can change

None of this is stored in a save, so any release may change it — and the changelog says when it does:

  • Balance — effect levels and lengths, growth rates, yields, odds, machine timings, config defaults, and the numbers in the mod's own data files. A datapack of yours that sets its own numbers keeps them.
  • What recipes take and give, and what loot tables drop, including the mod's additions to vanilla's tables.
  • What is in a tag. The tag's id stays; its contents may grow or shrink.
  • Where things generate. Chunks already generated keep what they have.
  • The art. Textures and models may be redrawn; only their paths are promised. Your resource pack overrides them either way.
  • Translations, in every language.
  • How things behave, within the above: a bong hit became a held draw in 2.1, and nothing anyone had saved changed.
  • The mod's code, everything outside the addon API.

If a frozen thing ever had to move

The rules the mod follows, so the promise survives the mod changing:

  • A new field in a data format is optional, and its default is what a file written before it meant. Every 2.0 strain file loads on 2.1 unchanged, though 2.1 added seven fields.
  • A component whose shape has to change keeps reading the old shape for ever. hempdustry:smoke_contents still reads the plain list it was before the first release.
  • A machine slot that stops being used keeps its number and hands back whatever an old world left in it: the Infuser's old milk slots did exactly that in 2.0.1-beta.
  • A reference that no longer resolves is dropped, not the item holding it. Remove a datapack strain and every pipe loaded with it comes back empty instead of vanishing.
  • An id is never renamed. There is no safe way to do it.
  • If something frozen ever truly had to go, the changelog would say so under a Breaking heading, naming what you lose — and under Semantic Versioning that is a new major version. Nothing has gone since 2.0.2.

Changes 2.1 announced that touch packs, none of them a save: the worn Hemp Beanie and Flip Flops are now drawn from art files of their own, so a resource pack that drew them on the armour sheet needs to move that art (Resource Packs), and they no longer take an armour trim — one already on them stays on the item, undrawn; and three hemp wool over three planks now makes a Hemp Bed instead of a white bed, so a recipe book that had the old recipe drops it on joining, with one line in the log. All three are in the changelog.

Versions

  • MAJOR.MINOR.PATCH+MINECRAFT, following Semantic Versioning: 2.1.0+1.21.11 is release 2.1.0 built for Minecraft 1.21.11. Everything after the + only says which game it is for; version comparison ignores it.
  • A pre-release carries its tag before the +: 2.1.0-beta+1.21.11 sorts before 2.1.0+1.21.11, which is how a player on the beta is told when the release is out.
  • MINOR adds things (2.1.0), PATCH fixes them (2.0.3), and MAJOR is the only place a break could ever go.
  • Jar names add the loader: hempdustry-fabric-2.1.0+1.21.11.jar, hempdustry-neoforge-2.1.0+26.3.jar (Installation).
  • Betas are public releases and live under the same promise. What a beta adds is frozen from that beta: 2.1's ids, formats and NeoForge events froze at 2.1.0-beta, not at 2.1.0.

Loaders and Minecraft versions

Fabric and NeoForge. Both builds have the same content, the same ids, the same data formats and the same save keys: the mod keeps its own data identical on both. But a Fabric jar and a NeoForge jar are separate builds — an addon is compiled against the one it runs with, and the addon API is frozen per loader. There is no promise that a world moves from one loader to the other: Hempdustry's part would come across, but the loader and other mods may not.

Minecraft 26.3, 26.2, 1.21.11 and 1.21.1. Each has its own jars, with the same features, except what needs the newer game: the Hemp Shelf, the Hemp Harness and the canvas bundle recipe (1.21.11 and later only), and what only Minecraft 26.2 and 26.3 have: the footbag, jelly legs, powdery mildew, the 4:20 time marker, The Munchies and the hemp outfit on babies (Minecraft 26.x). The promise is about each version of the game: a release for 1.21.1 never breaks a 1.21.1 world, and the same for each of the others.

  • A world can move up, from 1.21.1 to 1.21.11, to 26.2 and to 26.3, as Minecraft allows: Minecraft upgrades every saved item and entity when a world changes version, and Hempdustry's boats, machines and their contents and names are registered so they go through that upgrade too. Move it with the newest release. A world never moves down — Minecraft does not support that, with or without mods.
  • Datapacks: the mod's own formats are identical on every version; vanilla's are not (recipe ingredients, pack.mcmeta), so a pack for several is usually one per version (Datapacks).
  • Resource packs: Minecraft changed how items are drawn between 1.21.1 and 1.21.11, and how beds and signs are drawn in 26.x, so a pack written for one may need rework for another. That is the game's change, not the mod's; what moved is listed on Resource Packs.

How we got here

Before the first stable release a few breaks were allowed, each announced under Breaking in the changelog: 2.0.1-beta removed the two crop blocks' items (the seeds are the item, as with wheat) and the Infuser's milk and bucket slots, handing back whatever a world had left in them; 2.0.2, the first stable release (2026-09-29), removed the potted hemp flowers' items, which survival could never obtain, as the last one. Since 2.0.2, nothing a world has saved has broken.

The full history is in the changelog.

See also: Installation · Datapacks · Resource Packs · Addon Development

Clone this wiki locally