Palladium addons (Echoes of Power, FSang18's Heroes, Satsu Iron Man Addon, Alien Evo, Into The Omniverse, A New Corps, Powerborne…) are fun, but in large modpacks they put a lot of load on startup, FPS, server ticks and memory. Palladium Optimizer fixes the worst cases one by one. Every optimization gives exactly the same result as before, just with less work. When something it relies on changes (another mod touching the same code, or an addon script being updated), that optimization turns itself off and the game runs as usual.
Palladium writes every registered property (thousands with big addons) into the NBT of every entity, even items lying on the ground. Datapack functions that use NBT selectors (@e[type=item,nbt={...}], @a[nbt={...}], predicates with an nbt field) were rebuilding all of that on every check. Infinity Stone Core and FSang18's Heroes do this many times per tick.
When the filter doesn't reference the Palladium key, that data is now left out of that one comparison. The result is the same, because vanilla only compares the keys present in the filter. Normal saving (chunks, player data, /data get) is untouched.
In a 460-mod test pack: median tick time went from 55.5 ms to 24.9 ms, and the server got back to a stable 20 TPS.
The tick scripts of Echoes of Power (property.js) and A New Corps (breedingtest.js) went through every entity in the world, every tick, in JavaScript. That scan now runs in Java with the same result. This only applies to the exact known version of each script: if the addon updates the script, Palladium Optimizer leaves it alone.
Looking up a property by name went through every registered property (thousands per entity with big addons). This happened on every sync packet, texture variable, condition and script. It now uses a name index, so the same property is found in constant time.
Saving a player's NBT rebuilt their whole recipe list every time, and datapack functions (data get entity @s ..., @a[nbt=...]) do that every tick. The list is now cached and only rebuilt when the recipes actually change, producing the same NBT. If another mod modifies that method, this cache turns itself off.
HUDs written in KubeJS by FSang18's Heroes, Into The Omniverse, Alien Evo, Omni Evo and Satsu Iron Man Addon ran their JavaScript every frame, even for players who didn't have that power. The script's own condition is now checked in Java, and the HUD only runs when the player actually has the power or ability. The screen looks exactly the same.
This only applies to the exact version of each script (checked by SHA-256). If an addon updates its script, that HUD goes back to vanilla behavior.
Lanterns no longer emit the "smoke" particle aura (from GraveCore) while flying or hovering, which means fewer particles on screen. This is client-side only, and every other ring effect still works. You can turn the smoke back on in config/eoptickfix-lanterns.properties (remove_flight_smoke=false).
Palladium rebuilt each mod's resource pack for every client script it read, and with ModernFix each rebuild re-indexed the whole jar. In big addons (e.g. Satsu Iron Man Addon) that cost around 30 seconds of loading. The pack is now reused: same scripts, same order, same result.
Vanilla keeps every structure piece (.nbt) it has ever loaded in memory until you close the world. With many structure mods, that adds up to hundreds of MB.
Pieces that haven't been used for 30 seconds are now released once the cache goes over its limit (1/10 of your max memory, up to 256 MB). If a piece is needed again, vanilla reloads it from the same file, so the structure is identical block for block. Pieces created in-game (structure block) are never released.
You can configure this in config/eoptickfix-structures.properties. It needs ModernFix with mixin.perf.dynamic_structure_manager=false. If another mod already controls this cache, this feature turns itself off.
| File | What it controls |
|---|---|
config/eoptickfix-nbtscan.properties |
NBT selector optimization (enabled=false to turn it off) |
config/eoptickfix-structures.properties |
Structure memory limit and idle time |
config/eoptickfix-lanterns.properties |
Lantern flight smoke (remove_flight_smoke) |
Does it change gameplay? No. Every optimization gives the same result as the original code. If an optimization can't guarantee that, for example because another mod changed the same code or an addon updated its script, it disables itself.
Do I need every addon listed here? No. Each fix only applies when the mod it targets is installed.
Can I use it in my modpack? Yes, go ahead.
Made by BrenimDibre for the Infinity Legends modpack.