BadOptimizations
A collection of mostly micro optimizations that add up to something bigger!
What does it do?
Multiple things:
- Avoid updating lightmap
Updating lightmap textures are one of the most expensive parts of the client tick. During each tick, the client will do vector math to calculate lightmaps for blocks and the sky, then upload that new texture to the GPU. However, this can be completely avoided and cached if nothing affecting block brightness has changed. This mod will cancel lightmap updates if nothing that changes block brightness (e.g. gamma slider, potion effects, dimension) has changed.
- Don't do debug logic if we don't need to
Minecraft has four debug renderers that can be activated with a debug server: bees, game events, game test and villager AI. Even if there's nothing to process, the logic for these debug renderers are still executed. This mod will only execute them if debug is enabled and there is data from the server to process.
- Sky color calculation optimizations (1.21.10 and below)
Minecraft uses a cubic color sampler every frame to calculate the current sky color. This function loops 216 times to factor in surrounding biomes, even if all surrounding biomes are identical or have identical sky colors. This mod makes the color sampler only used if you are between biomes with different sky colors, and caches it for each tick. Otherwise, a shorter, simpler and faster sky color calculation is used.
That's a few of them, at least. You can disable any optimization in the config file if you need to.
How much does it help?
Depends on your system and luck, but on my own PC, an RTX 3060, intel i7 12700 and 4GB of allocated ram on Fabulously Optimized:
Without toasts, it goes from 1926-1955 FPS:

To 2008-2023 FPS:

And with toasts, it goes from *1351-1384 FPS*:

To *1414-1458 FPS*:

My mod is incompatible!
You can mark your mod as incompatible with specific BadOptimizations options. If your mod is present, BadOptimizations will automatically disable the specific options you specify.
You can also add hooks that tell BadOptimizations when the lightmap or sky color needs to be updated instead of adding a hard incompatibility to the caching optimizations.
Dependencies?
None.
(Also available on CurseForge, if that's your thing.)
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
| 23h ago | 1 | ||||
|
R
1.0.0
|
23h ago | 1 |
I have a large update for BadOptimizations planned, but I have a lot of things outside of Minecraft to deal with first, so please give me some time.
I have a large update for BadOptimizations planned, but I have a lot of things outside of Minecraft to deal with first, so please give me some time.
- Port to 26.2
3/25/2026:
- Port to 26.1
- Fabric and NeoForge variants are no longer combined into one jar
- This may revert in the future
Version 2.4.1:
- Migrate to Mojang Mappings
- Change some comments in the config file
- Update to 1.21.11
- Sky color is now data driven making sky color caching infeasible so it's been removed
- Lightmap caching remains but no longer directly uses time as a factor, so lightmap_time_change_needed_for_update no longer has any effect
- These changes don't apply to 1.21.10-
- Port to 26.2
3/25/2026:
- Port to 26.1
- Fabric and NeoForge variants are no longer combined into one jar
- This may revert in the future
Version 2.4.1:
- Migrate to Mojang Mappings
- Change some comments in the config file
- Update to 1.21.11
- Sky color is now data driven making sky color caching infeasible so it's been removed
- Lightmap caching remains but no longer directly uses time as a factor, so lightmap_time_change_needed_for_update no longer has any effect
- These changes don't apply to 1.21.10-
- Port to 26.1
- Fabric and NeoForge variants are no longer combined into one jar
- This may revert in the future
Version 2.4.1:
- Migrate to Mojang Mappings
- Change some comments in the config file
- Update to 1.21.11
- Sky color is now data driven making sky color caching infeasible so it's been removed
- Lightmap caching remains but no longer directly uses time as a factor, so lightmap_time_change_needed_for_update no longer has any effect
- These changes don't apply to 1.21.10-
- Port to 26.1
- Fabric and NeoForge variants are no longer combined into one jar
- This may revert in the future
Version 2.4.1:
- Migrate to Mojang Mappings
- Change some comments in the config file
- Update to 1.21.11
- Sky color is now data driven making sky color caching infeasible so it's been removed
- Lightmap caching remains but no longer directly uses time as a factor, so lightmap_time_change_needed_for_update no longer has any effect
- These changes don't apply to 1.21.10-
- Migrate to Mojang Mappings
- Change some comments in the config file
- Update to 1.21.11
- Sky color is now data driven making sky color caching infeasible so it's been removed
- Lightmap caching remains but no longer directly uses time as a factor, so lightmap_time_change_needed_for_update no longer has any effect
- These changes don't apply to 1.21.10-
- Migrate to Mojang Mappings
- Change some comments in the config file
- Update to 1.21.11
- Sky color is now data driven making sky color caching infeasible so it's been removed
- Lightmap caching remains but no longer directly uses time as a factor, so lightmap_time_change_needed_for_update no longer has any effect
- These changes don't apply to 1.21.10-
- Migrate to Mojang Mappings
- Change some comments in the config file
- Update to 1.21.11
- Sky color is now data driven making sky color caching infeasible so it's been removed
- Lightmap caching remains but no longer directly uses time as a factor, so lightmap_time_change_needed_for_update no longer has any effect
- These changes don't apply to 1.21.10-
- Migrate to Mojang Mappings
- Change some comments in the config file
- Update to 1.21.11
- Sky color is now data driven making sky color caching infeasible so it's been removed
- Lightmap caching remains but no longer directly uses time as a factor, so lightmap_time_change_needed_for_update no longer has any effect
- These changes don't apply to 1.21.10-
- Migrate to Mojang Mappings
- Change some comments in the config file
- Update to 1.21.11
- Sky color is now data driven making sky color caching infeasible so it's been removed
- Lightmap caching remains but no longer directly uses time as a factor, so lightmap_time_change_needed_for_update no longer has any effect
- These changes don't apply to 1.21.10-
- Migrate to Mojang Mappings
- Change some comments in the config file
- Update to 1.21.11
- Sky color is now data driven making sky color caching infeasible so it's been removed
- Lightmap caching remains but no longer directly uses time as a factor, so lightmap_time_change_needed_for_update no longer has any effect
- These changes don't apply to 1.21.10-
- Migrate to Mojang Mappings
- Change some comments in the config file
- Update to 1.21.11
- Sky color is now data driven making sky color caching infeasible so it's been removed
- Lightmap caching remains but no longer directly uses time as a factor, so lightmap_time_change_needed_for_update no longer has any effect
- These changes don't apply to 1.21.10-
- Migrate to Mojang Mappings
- Change some comments in the config file
- Update to 1.21.11
- Sky color is now data driven making sky color caching infeasible so it's been removed
- Lightmap caching remains but no longer directly uses time as a factor, so lightmap_time_change_needed_for_update no longer has any effect
- These changes don't apply to 1.21.10-
- Other mods can now add cache hooks that tell BadOptimizations when to update the lightmap/skycolor. See https://github.com/imthosea/BadOptimizations/wiki/Adding-lightmap-skycolor-caching-hooks
- Add new config option "ignore_mod_cache_hooks" to ignore loading these hooks (not recommended)
- Fix incorrect Minecraft version requirements on some releases
- (1.21.10+) Use proper API for adding debug HUD entries
- Other mods can now add cache hooks that tell BadOptimizations when to update the lightmap/skycolor. See https://github.com/imthosea/BadOptimizations/wiki/Adding-lightmap-skycolor-caching-hooks
- Add new config option "ignore_mod_cache_hooks" to ignore loading these hooks (not recommended)
- Fix incorrect Minecraft version requirements on some releases
- (1.21.10+) Use proper API for adding debug HUD entries
- Other mods can now add cache hooks that tell BadOptimizations when to update the lightmap/skycolor. See https://github.com/imthosea/BadOptimizations/wiki/Adding-lightmap-skycolor-caching-hooks
- Add new config option "ignore_mod_cache_hooks" to ignore loading these hooks (not recommended)
- Fix incorrect Minecraft version requirements on some releases
- (1.21.10+) Use proper API for adding debug HUD entries
- Other mods can now add cache hooks that tell BadOptimizations when to update the lightmap/skycolor. See https://github.com/imthosea/BadOptimizations/wiki/Adding-lightmap-skycolor-caching-hooks
- Add new config option "ignore_mod_cache_hooks" to ignore loading these hooks (not recommended)
- Fix incorrect Minecraft version requirements on some releases
- (1.21.10+) Use proper API for adding debug HUD entries
- Other mods can now add cache hooks that tell BadOptimizations when to update the lightmap/skycolor. See https://github.com/imthosea/BadOptimizations/wiki/Adding-lightmap-skycolor-caching-hooks
- Add new config option "ignore_mod_cache_hooks" to ignore loading these hooks (not recommended)
- Fix incorrect Minecraft version requirements on some releases
- (1.21.10+) Use proper API for adding debug HUD entries
- Other mods can now add cache hooks that tell BadOptimizations when to update the lightmap/skycolor. See https://github.com/imthosea/BadOptimizations/wiki/Adding-lightmap-skycolor-caching-hooks
- Add new config option "ignore_mod_cache_hooks" to ignore loading these hooks (not recommended)
- Fix incorrect Minecraft version requirements on some releases
- (1.21.10+) Use proper API for adding debug HUD entries
- Other mods can now add cache hooks that tell BadOptimizations when to update the lightmap/skycolor. See https://github.com/imthosea/BadOptimizations/wiki/Adding-lightmap-skycolor-caching-hooks
- Add new config option "ignore_mod_cache_hooks" to ignore loading these hooks (not recommended)
- Fix incorrect Minecraft version requirements on some releases
- (1.21.10+) Use proper API for adding debug HUD entries
- Fix crash on Neo when reading specific internal files
- Remove support for 1.21.9
- Fix stuttering with end flashes when lightmap caching was enabled
- Fix crashing when rendering a mannequin
- Fix crashing when installed on a server
- Port to 1.21.9
- Fix crashing when installed on a server
- Port to 1.21.9
- Fix crashing when installed on a server
- Port to 1.21.9
- Fix crashing when installed on a server
- Port to 1.21.9
- Fix crashing when installed on a server
- Port to 1.21.9
- Fix crashing when installed on a server
- Port to 1.21.9