AE2AsyncModelHotFix

This mod applies a targeted client-side mixin to Applied Energistics 2’s CableBusBlock.getAppearance method to prevent intermittent client crashes during chunk rendering when using multi-threaded renderers such as Embeddium/Sodium

LDLib / AE2 Chunk Meshing Crash Patch What this patch does

Simple Explanation: Stops the game from crashing with the following error with ae2+embeddium/ldlib:

Description: Encountered exception while building chunk meshes

Compatibility (must be running these versions or recompile is needed):

appliedenergistics2-forge-15.4.10.jar

ldlib-forge-1.20.1-1.0.40.b.jar

Description: Encountered exception while building chunk meshes

This mod applies a targeted client-side mixin to Applied Energistics 2’s CableBusBlock.getAppearance method to prevent intermittent client crashes during chunk rendering when using multi-threaded renderers such as Embeddium/Sodium.

Specifically, the patch:

Intercepts AE2’s call to ModelDataManager.getAt(BlockPos)

Guards the call against ConcurrentModificationException

Returns ModelData.EMPTY as a safe fallback when a concurrent modification is detected

Logs a one-time warning when the fix is first triggered, making it easy to verify that the patch is active without spamming logs

This prevents the game from crashing to desktop while chunk meshes are being built on worker threads.

Why this is needed

Modern rendering pipelines (Embeddium/Sodium) build chunk meshes on background threads. AE2’s CableBusBlock.getAppearance accesses ModelDataManager, which is not thread-safe and internally iterates over a mutable HashMap.

Under heavy load or prolonged play sessions, this leads to:

java.util.ConcurrentModificationException at ModelDataManager.refreshAt at ModelDataManager.getAt at CableBusBlock.getAppearance

Because this exception occurs on a render worker thread, it crashes the entire client.

Design goals

Minimal & non-invasive: Does not modify AE2 logic or data structures

Fail-safe rendering: Prefers visual degradation over client crashes

AE2-specific: Targets only CableBusBlock.getAppearance

Client-only: No server impact, no gameplay changes

What this patch does not do

It does not make ModelDataManager thread-safe

It does not change AE2 behavior on the main thread

It does not fix the underlying concurrency issue inside Forge’s ModelDataManager

This is a defensive compatibility patch intended to keep the client stable until an upstream fix is available.

When you’ll see it working

When triggered, the log will contain a one-time message like:

AE2AsyncModelFix ACTIVE: CableBusBlock.getAppearance on thread 'Chunk Render Task Executor #X'

If a concurrent modification is detected, the crash is prevented and rendering continues safely.

The AE2AsyncModelHotFix Team

profile avatar
  • 1
    Projects
  • 334
    Downloads