
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 frommods.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
PartEntitymobs 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 warningor/worldborder damagewas changed first. - Writing into a copied chunk section no longer stores air instead of the new block.
mixin.world.block_entity_ticking.support_cachecan 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 attemptmixin.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=falsehides 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_accessandmixin.world.player_chunk_tick, only for the modules enabled inc2me.toml - FerriteCore:
mixin.alloc.blockstate - Any mod declaring
lithium:optionsin itsmods.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

