Skip to content

Patches

LlaGuiTo edited this page Oct 4, 2026 · 1 revision

Patches

Applies to Mystical Realms Modpack Fixes 2.0.0 for Minecraft 1.21.1 (NeoForge).

Eight active patches. Each one is a no-op when its target is not installed.

1. Iris and Sodium client crash

Targets: Iris 1.8.12 with Sodium 0.8.13 or newer. Client only. Always on.

The crash: Sodium renamed an internal class in 0.8.13. Iris 1.8.12's bundled compatibility mixin has the old name compiled into its own bytecode in three places — a method parameter type, a field-access descriptor, and the literal target string of an injection annotation. The mixin pre-processor throws a ClassNotFoundException while reading Iris's own bytecode, before it even looks for the real target, which aborts the whole transform and surfaces as:

ClassNotFoundException: SodiumGameOptions$PerformanceSettings
  wrapped as MixinTransformerError

The fix: the mod ships a stub class at the old name inside its own JAR, so the lookup succeeds.

What it costs: Iris's fog-occlusion optimisation silently stops working. Because the injection target string baked into Iris's bytecode still refers to the old name, Mixin finds no matching target and skips that one redirect. Nothing else is affected, and neither Iris's nor Sodium's JAR is modified.

Not configurable. The stub class is always present regardless of which versions you have.

2. Malformed entity names

Targets: vanilla. Both sides. Always on.

The spam: a datapack function writing a malformed CustomName into an entity's NBT — an unquoted string instead of a JSON text component — causes this once per tick, with a full stack trace:

Failed to parse entity custom name

The fix: the exception is caught. If the raw JSON is a quoted string, the quotes are stripped and the entity still gets a readable name. Valid names pass through untouched. Each fallback logs one warning naming the entity.

Not configurable.

3. Benign log filter

Targets: the global logger. Both sides. Configurable — see Configuration.

The spam: after a modpack's mod list changes, old save data refers to things that no longer exist, and the log fills with:

  • Tried to load invalid item: 'Item must not be minecraft:air'
  • Tried to load invalid item: 'Unknown registry key'
  • Tried to load invalid fluid:
  • Ignoring unknown attribute 'forge:…'

The fix: any log line containing one of your configured substrings is dropped. Matching is case-sensitive and happens on the fully formatted message. The mod's own log messages are never filtered, so it can never hide a problem it caused.

Important: for the forge: attribute lines, the filter only silences the warning. The stale modifier values are still discarded by the game — they belong to mods that are no longer installed. See the note at the end of this page.

4. Nether portal return trips

Targets: vanilla behaviour. Both sides. Configurable.

The bug: vanilla always sends a returning traveller to the closest portal at the destination coordinates. With two portals close together in the Overworld, you leave through one and come back through the wrong one.

The fix: on an Overworld to Nether trip, the portal pairing is remembered for that traveller. On the way back, the remembered portal is used. If that portal block is no longer a nether portal, the stale entry is dropped and vanilla behaviour takes over.

Trips between other dimensions, or using other portal types, are untouched.

Limitation: the memory is not saved. It resets when the server restarts, so the fix only holds within a session.

5. Better Party member-health crash

Targets: Better Party, together with a world-map add-on. Server only. Always on.

The crash: Better Party asks for each player's health and maximum health to show them on the party UI. When no add-on provides a custom value, it falls back to reading them straight off the player — and its constructor throws if either value is not a finite number or the maximum is not positive. That exception escapes on every server tick, for every player online, and takes the dedicated server down:

IllegalArgumentException: Party member health must be finite and maxHealth must be positive

The fix: the two vanilla health accessors are wrapped, and bad values are replaced with safe ones before Better Party ever sees them. Each substitution logs a warning naming the player.

Limitation, stated plainly in the mod's own code: this does not fix whatever corrupted that player's maximum-health attribute in the first place. It only stops that corruption from taking the server down.

Not configurable.

6. Corrupted health and absorption values

Targets: vanilla. Both sides. Always on.

The failure: some attribute-mod combinations can produce Infinity. Multiply that by a target whose health is exactly zero and you get NaN, which then flows into the entity's health. NaN fails every numeric comparison, so vanilla's death check never fires again: the entity is alive but can be neither healed, damaged nor killed — and because NaN is saved verbatim, it survives every reload. A player can end up permanently stuck.

The fix, in two parts:

  1. Reject any non-finite health or absorption value as it is written, keeping the last good one.
  2. Self-heal entities that load with an already-corrupted value, resetting health to their maximum and absorption to zero. This happens automatically on load — you do not have to edit NBT by hand.

Every action logs a warning naming the entity by name and UUID.

Limitation: this hardens vanilla against the values it receives. It does not patch the mod that produced them.

7. Dangerous NeoForge boss health scaling

Targets: Dangerous NeoForge, together with Apotheosis. Server only. Configurable.

The failure: Dangerous NeoForge correctly scales a regular mob's health from a cached base value, so mobs grow linearly as the world ages. But for its "boss" branch — taken by any mob carrying an Apotheosis rarity affix — it reads the mob's current, already-scaled maximum health as if it were the base and multiplies again. Because the previous step already changed the base value, every daily rescale compounds, and boss health balloons exponentially the longer a world survives. Regular mobs were never affected.

The fix: the boss branch is made to use the same cached base value the mod's own non-boss branch already uses, so growth stays linear. The mod's scaling curve is otherwise untouched.

On by default. Turning it off restores the exponential behaviour.

8. Spanish villager dialogue

Targets: Better Villager Animations. Client only. Self-disabling.

The problem: that mod keeps its villager speech-bubble flavour text — greetings, small talk, trade banter, hundreds of lines — as hardcoded Java strings, so an ordinary language resource pack cannot translate any of it. Spanish players saw villagers speaking English.

The fix: when your client language is exactly es_es, the dialogue is overlaid with Spanish. Placeholder tokens like player and item names are preserved. Every other language is left completely untouched.

Three things must all be true, and if any is missing this patch does nothing at all, silently:

  1. Better Villager Animations is installed.
  2. Your client language is exactly es_es.
  3. A separate resource pack supplies the translations.

That third point matters: the translation table is not included in this mod. It is read at runtime from assets/bettervillageranimations/dialogue/es_es.json, which has to come from a resource pack you install separately — in practice the Mystical Realms translation pack. With no such pack, this patch is a no-op even though everything else is in place.

The table reloads with your resource packs. It logs how many translations it loaded, or a single warning if it could not be read.

What It Cannot Fix

The mod ships a ninth class — a remap for old Forge attribute ids — that is compiled but deliberately never applied, because NeoForge's mixin processor could not resolve an obfuscation mapping for the target method. The class stays in the JAR purely to document the intent.

So for old entities carrying forge: attribute ids, the warning is silenced by patch 3 but the stale values are dropped rather than converted. There is currently no way to recover them.

There is also no fix here for a bug in runes' recipe-book category, nor for stale block-entity data that has already been written into generated chunks — the second heals on its own when the chunk is re-saved.