Invasive Optimizations

Invasive optimizations for other mods, aiming to reduce server-side (tick) lag.
The invasive nature of these changes makes them more likely to crash or otherwise break.
Please report such issues to the issue tracker and I will try to respond to them in a timely manner.
Each change can also be individually toggled through the config and should solve any issues temporarily while you wait for a fix.
Optimizations included in this mod fall under one of the following categories:
- Patch has been sent but has not reviewed for a long time or expected to be useful in the time before the next release.
- Patch denied due to reasons unrelated to quality, such as non-maintenance, in which case future optimizations will also not be sent to that mod.
- Patch has no avenue of contribution (e.g. closed source mods)
- Patch already applied but not available in released versions.
- Patch is experimental or of dubious usefulness (these are disabled by default)
Current optimizations:
- Accessories
accessories.roundabout_collection(1): Avoid iterating Map entrySet by directly accessing underlying keySet. (PR)
- Applied Energistics 2
ae2.cache_fuzzy_search_max_value(4): Cache AEItemKey::fuzzySearchMaxValue during init. (PR)
- Botany Pots
botanypots.hopper_insertions(1): Hopper Botany Pot exponential insertion backoff and emptiness tracking (PR)
- Create
create.fail_fast_clipboard_migration(4): Fails fast when attempting clipboard migration inItemStack.<init>, reducing impact to this extremely common operation. (PR)
- Pastel
pastel.nuke_item_predicate_mixin(4): Nukes Pastel's ItemPredicateMixin as it is unnecessary and expensive
- Pipez (Also see Pipez Lag Fix by AlmanaX21 for exponential backoff)
pipez.constant_fullness_checks(2): Turns connection/inventory fullness into O(1) operationspipez.early_exits(2): Reduces unnecessary work done by exiting targeted functions early if the right conditions are metpipez.extract_looped_work(2): Move some work out of loops to avoid duplicated workpipez.filter_caching(2): Caches tag filters using BitSets, integer arrays, or single integers. Uses more memory and causes loading pipes to take marginally longer.pipez.nbt_comparisons(2): Drastically improves performance of NBT comparisons by minimizing serialization/deserialization operationspipez.stream_abuse(2): Reduces abuse of Streams in hot paths to reduce allocation rate (PR)
- Placebo
- SFM
sfm.filter_caching(5): Caches item and fluid filters (regular/regex and tag filters for now) using BitSets, integer arrays, or single integers. Uses more memory and causes first compiles to take longer.
- Xycraft Machines
xycraft_machines.redstone_checks(3): Extractors check for redstone signals every tick rather than only when their neighbours updatexycraft_machines.unnecessary_resorting(3): Extractors resort their recipes every so often but is usually not necessary
How to Install Invasive Optimizations (Mod)
Invasive Optimizations by Qther is verified for Neoforge across Minecraft versions 1.21, 1.21.1 (latest release: 1.0.26, file size: 274 KB). Follow the steps below to install it safely from ModCraft.tv:
- Click the Download button above and select your Minecraft version (1.21, 1.21.1) and platform (Neoforge).
- Make sure you have the compatible loader or environment installed for Neoforge.
- Move the downloaded Invasive Optimizations file into your Minecraft
.minecraft/modsfolder and launch the game.
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 10d ago | 1 | ||||
| 18d ago | 1 | ||||
| 2mo ago | 1 | ||||
| 3mo ago | 1 | ||||
| 3mo ago | 1 | ||||
| 3mo ago | 1 | ||||
| 3mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 |
- feat: dynamic recipe caches
- feat: create.recipe_caching
- refactor: static recipe caches for common types
- refactor: move oritech.recipe_caching
- feat: oritech.recipe_caching
- feat: add generic recipe cache for future use
- fix: crash on unsupported types in sfm.filter_caching
- fix: logic error in pipez.early_exits deepExactCompare
- refactor: optimize and fix edge cases for pipez.nbt_comparisons
- fix: pipez fallback to unoptimized nbt match if deserialization fails
- refactor: remove unused wrapper class
- perf: slight optimization for large array matchers
- perf: sfm.filter_caching cache With instead of WithTag
- fix: filter caching mistakes
- perf: only resort xycraft extractor recipes when data is reloaded
- perf: switch to IntPredicate to avoid un/boxing
- feat: pipez.filter_caching
- perf: add single-value matchers for filter caching
- fix: change pastel url
- fix: check item type for cached nbt comparisons
- perf: specific matchers to reduce allocations
- perf: cache predicates used for filter caching
- perf: further improve filter caching
- refactor: rename {SFM,}FilterCachingExtension
- perf: improve and genericize bitsets
- perf: implement skipped bitsets
- perf: shrink bitsets used by sfm.filter_caching
- perf: improve placebo.lazy_string_concatenation
- feat: sfm.filter_caching
- fix: pipez crash (#1)
- feat: placebo.streamless_hashing and placebo.lazy_string_concatenation
- feat: ae2.cache_fuzzy_search_max_value
- fix: properly delete ItemPredicateMixin
- perf: early exit for accessories.roundabout_collection
- refactor: cancel Pastel's ItemPredicateMixin instead of overwriting it
- feat: accessories.roundabout_collection
- fix: null check ModList for crash report enhancement
- feat: add create to optional deps
- feat: create.fail_fast_clipboard_migration
- fix: config not respecting values
- refactor: config rework again
- fix: add pastel.nuke_item_predicate_mixin to config
- refactor: rename pastel mixin method
- feat: add pastel to optional deps
- feat: pastel.nuke_item_predicate_mixin
- fix: only register XycraftMachinesEvents if xycraft_machines is loaded
- feat: remove pipez mixins version scope
- feat: add MixinSquared as a dependency for future usage
- feat: add BlockPosSet util for future use
- refactor: remove Config#get
- feat: refine xycraft_unnecessary_resorting