Changelog - embeddedt/ModernFix GitHub Wiki
5.24.1
(5.24.0 had the ingredient deduplication option on by default, but it caused unexpected bugs in some environments. Testing with the option manually reenabled is still appreciated.)
- Added
mixin.perf.ingredient_item_deduplication
, which deduplicates item stacks withinIngredient
s to further reduce memory usage. - Fixed it being impossible to properly disable
smart_ingredient_sync
on a client & disable it by default when CraftTweaker is on - Added logic to clear DFU caches periodically to avoid them consuming memory permanently
5.23.1
Fixed an issue with mixin.perf.memoize_creative_tab_rebuilds
that caused buggy mods to prevent the creative tabs from populating properly. Kudos to Linguardium for debugging & raising awareness of this issue.
5.23.0
This is primarily a hotfix for issues discovered after the 5.22.0 release. Aside from that, there are a couple changes:
mixin.feature.disable_unihex_font
has been removed & replaced bymixin.perf.compress_unihex_font
, which tries to store the Unihex font data more efficiently in memory rather than not loading it. This avoids the tradeoff of needing to turn off the optimization by default.- The MC-183518 fix has been improved so the server thread remains asleep until the next tick, rather than waking up every millisecond, which should further improve efficiency.
- Further microoptimizations have been made to dynamic resources.
5.22.0
This release includes several new features targeted at reducing memory usage & world join times.
- Dynamic resources now makes better use of its caching facilities when the Forge model baking event is running - this saves 8 seconds of launch time in All the Mods, on a Ryzen 7700X.
- Dynamic resources now allows mods to see an emulated view of all models by default (previously mods had to be opted into this manually). This change should enable compatibility with more mods out of the box, provided they limit themselves to Forge model APIs instead of using mixins.
- Tag-based vanilla recipe ingredients are now synced to the client directly rather than by syncing a full list of item stacks within the tag (similarly to vanilla 1.21.2+). This optimization is only applied when both the client & server have a new enough version of ModernFix installed. It brings several benefits:
- reduced network bandwidth usage & load time from no longer needing to encode/decode large lists of item stacks
- significantly reduced memory usage on the client from no longer needing to store many duplicated large lists of item stacks
- All vanilla recipe ingredients have been heavily optimized for memory usage in general, and no longer permanently store a list of item stacks.
- The data structures that back creative mode searching are now built on first access, rather than during world load. This brings a measurable reduction to world load and datapack reload time, at the cost of potentially introducing a short lagspike when the first character is typed into the creative search bar. A variation of this idea was added to vanilla in 1.21.
- Time spent loading datapack data (recipes, loot tables, etc.) is now once again printed during world load, like it was back in 1.16.
- It's now easier to determine which modded reload listeners cost the most time when using the undocumented
-Dmodernfix.debugReloader=true
JVM option (which enables Minecraft's built-in resource reload profiling). mixin.perf.resourcepacks
has been rewritten for substantially improved performance.- A new
/modernfix mcfunctions
command has been added that shows which.mcfunction
files are consuming the most tick time. This may be useful for identifying laggy MCreator mods. - Messages from mods that are printed using Java's builtin output facilities are now logged with the tag
[STDOUT]
and identifying information about the mod class. This should make it easier to identify the source of logspam in some cases. Players/modders familiar with Forge 1.12 will recall it provided the same functionality.
Minor bugfixes:
mixin.perf.dynamic_entity_renderers
compatibility has been slightly improved. However, this option is now considered deprecated and will likely be removed in a future release, as its benefits are neutralized by the approach mods use to add custom rendering to all entities.mixin.perf.reduce_blockstate_cache_rebuilds
no longer causes crashes in some mods that expect vanilla classes to load in a certain order.- Fixed a vanilla bug that could cause
RegistryOps
to throw aConcurrentModificationException
s in 1.20.1.
Note: as per my recent announcement, current development of ModernFix is focused on 1.20.1 and 1.21.1. Therefore, there are currently no planned releases for 1.21.4 or 1.21.5.
5.20.0
Hello everyone, it's been a long time since the last minor release. There are a few noteworthy changes:
- The mod has been ported to 1.21.4. Mojang substantially changed model handling since 1.21.1, so dynamic resources had to be rewritten several times. It may have some bugs and compatibility issues that aren't present on earlier Minecraft versions. Please report these.
- 1.20.1 and 1.21.1 are still supported and that will continue for some time. These are also the primary development targets, as they are the main modded versions being played at the end of 2024.
- Vanilla's telemetry is now disabled by default.
- Some bugs in dynamic resources on earlier versions have been fixed.
- For the few who might play on Hypixel or other legacy servers using modern clients, you may be interested in the new
mixin.bugfix.missing_block_entities
option, which can fix chests being invisible on these servers.
5.19.0
This release has two minor feature improvements:
- The (undocumented)
-Dmodernfix.debugReloader=true
flag now works on datapack reloads as well as resource pack reloads. This flag causes Minecraft to print profiling data about which parts of the reload took longest. - On 1.21, fixed some launch time regressions compared to 1.20 when dynamic resources is enabled.
5.18.1
This release ports to 1.21 (support for 1.20.6 is dropped).
- Dynamic resources was rewritten from the ground up due to 1.21 internal changes. Mod compatibility may initially be worse than 1.20.
- Improve speed of resource reloads when pressing F3+T in a world with dynamic resources enabled
- Optimize retrieval of block models from cache when dynamic resources is enabled
5.18.0
This will likely be the last release to support 1.16.5, 1.18.2, and 1.19.2.
- Fix a launch crash on the latest version of Forge for 1.20.1
- Add option to restore proper dragon flight behavior from 1.13 and older (disabled by default as it changes vanilla behavior, and will break one-cycling)
- Fix integrated server watchdog printing error messages on laggy servers that are still ticking, but slowly (thanks KostromDan for pointing this out and providing fix suggestions)
- Fix a potential concurrency crash in Forge 1.16
- Fix
remove_spawn_chunks
causing falling blocks traveling through an end portal to the world spawn point to fall into the void - Fix WorldEdit being unable to change biomes on 1.16
- Fix a potential crash with Wither Storm Mod
5.17.0
- Update to Minecraft 1.20.5. Support for Minecraft 1.20.4 will likely end very soon.
- Only apply optimized texture stitching algorithm to atlases with a significant number of textures. This should prevent ModernFix from contributing to the issue where a pink line appears near the arrow buttons in JEI.
5.16.0
- Emulate recipe book search tree when JEI/REI is installed (makes searching in the recipe book work again, results may be slightly different form vanilla)
- Fix OptiFine options displaying translation keys on 1.18 & 1.19
- Fix crash with Carpet when
mixin.perf.remove_spawn_chunks
is enabled and the spawn chunk radius is set to 0 in Carpet at the same time - Patch Mantle on 1.16 to fix ConcurrentModificationException crashes
- Fix MC-183518 (excessive CPU usage when idle)
- Fix optimized texture stitching algorithm creating atlases that are too large instead of crashing with an error
- Fix
mixin.perf.clear_mixin_classinfo
causing crashes with mixins containing inner classes if enabled - Fix a crash when another mod errors during startup on Forge
- Fix loot table items possibly having the wrong name on 1.16
- Add documentation for more mixin options
5.15.0
- Improve performance of dynamic resources when many threads are concurrently trying to retrieve block models
- Fix a crash with OptiFine installed
- Disable stalled chunkload detection by default, as it rarely seems to be a problem anymore, and the detection logic might reduce performance in some cases
- Improve launch time when dynamic resources is enabled on Forge
- Reduce overhead in chunk ticking on 1.18+
- Reduce overhead of Forge event for collecting potential mob spawns
- Work around a bug in Forge's config library that causes excessive background resource usage
- Fix a crash on NeoForge 20.4 caused by an oversight when porting
- Fix a crash when using CTM on NeoForge 20.4
- Add bandaid to potentially work around crashes with More Culling with dynamic resources on
5.14.0
This release introduces some minor performance improvements to Forge registries (on 1.20.1 and older), a workaround for Pose stack not empty
errors, and an optional feature toggle that disables chat message signing (you may not be able to join servers that require it if this is enabled).
5.12.0
This release fixes some concurrency issues in Forge's model data manager on 1.20.1 and older. (The NeoForge 1.20.4+ model data manager was redesigned, and has none of these flaws.)
There are also some miscellaneous bugfixes.
5.11.0
This release largely eliminates the bottleneck dynamic resources introduced to chunk meshing & item rendering. If you do not use dynamic resources, not much happened here, sorry. :(
There was also a minor optimization introduced to a Forge registry method that is used in relatively hot code.
5.10.0
- Fix ModernFix's resource pack optimization having issues with double slashes (//) in paths
- Suppress log messages caused by client mixins trying to load on dedicated servers
- Fix a Forge oversight that causes excessive memory allocation with some mod setups
- Fix some parity issues with dynamic resources' model registry emulation on 1.20+
- Fix a crash with Forge 47.2.16+
- Fix config screen rendering incorrectly on 1.20.2
- Ported to Forge 1.20.2 (thanks to @TonimatasDEV)
5.10 will likely be the last release series that supports 1.20.2.
In 1.20.3, ModernFix will shift to supporting Fabric & NeoForge only. Forge will continue to be supported on 1.20.1 and older.
5.9.3
Fixes a warning message sometimes spamming the log and fixes a launch time regression on Forge 1.20+ introduced in 5.9.1.
5.9.1
This release:
- rewrites some of the logic for
dynamic_resources
on Forge to improve compatibility with mods running via Sinytra Connector, - fixes removing dimension mods on Forge 1.20.1 causing the game to refuse to load any existing worlds,
- works around Embers Rekindled being incompatible with dynamic resources on 1.20.1,
- adds a patch to speed up skull rendering slightly (thanks Phoenix-Starlight), and
- fixes Refined Storage covers rendering as a missing model when dynamic resources is on.
5.9.0
5.9 is a fairly small release, but still includes several important patches.
- Important note for 1.16 users: the asynchronous JEI patch is no longer enabled by default, to keep behavior consistent across all supported Minecraft versions. Depending on the number of mods installed, this patch can actually make performance worse initially, as the JEI loading is so CPU-intensive that playing the game is not really enjoyable until it finishes. Feel free to re-enable it in your config if you did not experience any problems; the option is at the top of the config screen. There is no change for 1.18+, as this feature was never ported beyond 1.16.
- Improve reliability of the buffer builder leak fix (thanks Moulberry). This should resolve EXCEPTION_ACCESS_VIOLATION crashes with some mod sets.
- Fixed several issues when using Forgified Fabric API with dynamic resources enabled.
- Re-enable dynamic sound unloading by default.
- Config screen no longer scrolls to the top after returning from an info page.
- Applied the same security patch as Fabric Loader 0.14.24 on Forge, to protect users of legacy Forge versions.
5.8.1
5.8.0 contains an experimental sound patch that causes sound to not work on some Minecraft versions. Please update to 5.8.1, which disables this by default.
- Prevent Forge clients from crashing when connecting to a vanilla server if a mod is installed that adds a custom recipe book type (https://github.com/neoforged/NeoForge/issues/150).
- Fix excessive network traffic when sitting in a vehicle on Forge (https://github.com/neoforged/NeoForge/issues/169).
- Clean up some code to fix an occasional launch crash that occurs for some people when using ModernFix.
5.7.5
- Fix a fairly major issue on 1.20.1+ where blocks might not have been considered as solid when the game first starts. This could cause worlds to generate incorrectly.
5.7.0
- Added button in the config screen that takes you directly to the wiki page.
- Disabled the config reload message since it's difficult to make work correctly.
- Improved memory usage of the canonizing NBT map.
- Added a feature to show time before Minecraft bootstrap begins running. This will be useful for improving the early startup times of (Neo)Forge in future releases.
- Added feature to clear chunk data when changing dimensions or switching worlds on the client; this helps mitigate memory leaks in other mods.
- Added workaround for mods causing deadlocks in
BlockStateBase.getOffset
, this should help with some worldgen crashes. - Improved compatibility with mods manipulating the vanilla blockstate cache logic.
- Added warning/error when Continuity & dynamic resources are used together on 1.18.2 & 1.19.2.
- Made extended stacktraces from the ModernFix watchdog a bit easier to read.
- Fix crash with Custom Machinery when dynamic resources is enabled.
5.6.0
Much smaller release than 5.5.0 but a few key additions (including a change to Forge config mechanics):
- Access transformers are now forcefully injected on Forge even if a mod loading error occurs. This will prevent weird
IllegalAccessError
crash reports when mods have mixins that depend on ATs and still show the Forge mod loading error screen. - Fixed a crash that occurs right after displaying the mod loading error screen due to an oversight in ModernFix. Oops.
- Some edge cases in dynamic model loading have been fixed.
- Config file watching has been disabled when
mixin.bugfix.fix_config_crashes
is on (on by default). This will fix weird corruption issues when relaunching the game or using Notepad++. You will now be prompted in the log to manually run/mfrc
or/mfsrc
to reload configs on the client/server respectively.
5.5.0
From a user perspective, this is a minor release with mostly inconsequential bugfixes and feature additions.
- Users will note that documentation has now been written for all of the existing options in the 5.4.x series; this documentation is available both through the config menu in-game and on the wiki's patch summary pages.
- The CoFH Core patch has been improved so it will work with very outdated versions of CoFH Core as well, this should fix the rare crashes that were still happening to a few users.
- On Forge, mods using custom model bake events will load a bit faster with dynamic resources enabled now compared to in the previous release.
- On 1.16.5, the patch to skip reloading datapacks when in singleplayer (
reuse_datapacks
) has been disabled by default, due to it breaking some obscure mods. Packs that have not experienced issues with this option enabled are encouraged to re-enable it. Defaults are chosen for compatibility reasons. - There have been some improvements made to registry speed as part of ongoing work towards better support for huge quantities of items/blocks (e.g. 1 million).
- The ModernFix branding in F3 has been moved to the right side of the screen to be consistent with other mods.
- The code to track game load/world joining has been rewritten, and should now work more reliably on Fabric.
- The creative search tree optimization now more closely emulates some vanilla quirks in order to prevent weird issues with mods (e.g. Gateways To Eternity).
From a development perspective there have been quite a few changes, notably:
- On Fabric, ModernFix no longer depends on any Fabric API modules, and thus no longer ships them. This is mostly useful for players attempting to run released versions on snapshots that break Fabric API, but it should also reduce the file size a bit. It also allows ModernFix to more easily be updated to snapshots.
- All dependency on Architectury Loom-specific development functionality was removed. This means the
ModernFixPlatformHooks
class received substantial changes. You should not be depending on this class from other mods. - The game is now configured to use a heap size of 512MB within dev by default.