Skip to content
Radium Re-Reforged

Quick rating

Community listing page, reviews may not be monitored by the author.

Radium Re-Reforged

No reviews yet

Fork of Radium Reforged 1.20.1 for bugfixes

Mod Loaders
Minecraft

About

Description

Radium (Re-Reforged) is a maintained fork of Radium for Forge 1.20.1.

Radium is a Forge port of Lithium, CaffeineMC's general-purpose optimization mod. It improves server tick performance without changing vanilla behaviour, gameplay or world generation.

This fork exists because upstream development has gone quiet. It keeps the same mod id, so it is a drop-in replacement.

What's different from upstream

Works with more Forge mods

Most of the work here goes into conflicts that only exist on Forge, where other mods hook the same methods Radium rewrites.

  • C2ME and its Forge ports: fixed chunks not rendering. Radium only steps aside when the conflicting C2ME module is actually enabled in c2me.toml.
  • FastChunkGen and other async chunk loaders: fixed a startup race that left chunk loading permanently broken with Could not initialize class BlockStateFlags.
  • Valkyrien Skies and any mod that declares lithium:options: Radium now reads those overrides from mods.toml, so mods can switch off a conflicting option themselves.
  • SecurityCraft and anything listening to ChunkWatchEvent: chunks leaving a player's view go through vanilla again, so the event fires.
  • Ice and Fire, Rats and other mobs with their own equipment storage: armour and other equipment changes show up again.
  • Multipart mobs: solid parts of Forge PartEntity mobs block movement again.

Fixed: NullPointerException when copying NBT compounds

NbtCompoundMixin could leave a fastutil map with a null internal list, so any mod doing a deep copy or deep iteration of a CompoundTag crashed. The usual workaround was mixin.alloc.nbt=false, giving up the optimization. The map is now filled eagerly and the option can stay on.

Upstream issue: Reforged-Hub/radium-upstream#52, still open there.

Fixed: ConcurrentModificationException during entity status changes

Callbacks fired while a section's entity tracking status changes could discard entities mid-traversal and break the iteration. The section's entity list is now iterated over a copy.

Config: mixin.chunk.entity_status_iteration

Other fixes

  • Block entities no longer keep ticking outside a moved world border after /worldborder warning or /worldborder damage was changed first.
  • Writing into a copied chunk section no longer stores air instead of the new block.
  • mixin.world.block_entity_ticking.support_cache can be enabled on Forge without crashing at startup (still off by default).

New: cached pushability for cramming tests

Cramming tests are quadratic: every entity in a section asks every other entity whether it can be pushed, while the answer depends only on the entity being asked. It is now computed once per entity per tick, turning N*N calls into N.

This matters most on modded servers. In vanilla isPushable() is trivial, but it calls isClimbing(), a popular mixin target. Profiling a modded server showed Botania hooking it to look up a Curios slot, walking the capability dispatcher on every call: about 0.6% of the server thread spent inside cramming tests alone, with Pehkui adding its own hook on top.

The cost is at most one tick of staleness: an entity dying partway through a tick stays pushable until the end of it.

Config: mixin.entity.collisions.pushable_cache

Ported: optimizations upstream Radium never picked up

Brought over from CaffeineMC's Lithium 1.20.1 branch:

  • mixin.ai.useless_sensors: skips brain sensors whose results are never read (goat item sensor; parent animal sensor on non-babies)
  • mixin.block.beehive: beehives check for obstruction before the expensive NBT copy they otherwise do on every exit attempt
  • mixin.entity.sprinting_particles: skips server-side sprinting particle work

This puts the fork at parity with Lithium 1.20.1 except for one experimental option, experimental.entity.block_caching.fluid_pushing. It keys its cache on the fluid-tag parameter of Fabric's updateMovementInFluid, and Forge replaced that method with a no-arg one, so there is nothing to cache by. Its ground is already covered by mixin.entity.collisions.fluid.

Startup is also faster in large packs: a per-block-state reflection check now runs once per block class.

Configuration

  • config/lithium.properties: one toggle per optimization. The full list with descriptions is in lithium-mixin-config.md.
  • config/radium.properties: settings that are not optimizations. logging.class_analysis_errors=false hides the "Radium Class Analysis Error" warnings, which are otherwise logged once per class.

Radium switches some options off by itself when it detects a mod they conflict with, and says so in the log as Force-disabling mixin ... (added by <modid>). This overrides your lithium.properties:

  • Aperture Innovations: mixin.entity.collisions.movement (its portals could not be entered)
  • C2ME: mixin.world.chunk_access and mixin.world.player_chunk_tick, only for the modules enabled in c2me.toml
  • FerriteCore: mixin.alloc.blockstate
  • Any mod declaring lithium:options in its mods.toml, such as Valkyrien Skies

Known conflicts

  • The Dulling: set mixin.entity.collisions.movement=false, otherwise the game will not start.
  • Thunderbolt Core 2.0.3: update to 2.0.4, or set mixin.alloc.nbt=false.

Compatibility

  • Minecraft 1.20.1, Forge
  • Mod id is radium: do not install alongside the original
  • Report issues on GitHub

More optimizations

Check my other mod: JEIOptimizer

Credits and licence

Lithium by CaffeineMC. Forge port by dima_dencep and NanoLive. Fork maintained by Big_Energy, with many Forge compatibility fixes contributed by BonsUnleashed. Licensed under LGPL-3.0-only.

Source: https://github.com/bigenergy/radium-reforged-patched