HomeJavaModsFastPackLoad
FastPackLoad
ModsJava

FastPackLoad

by ItzStanleex · on Modrinth

Faster resource pack loading, and no more freeze when you join a server with a big pack. Minecraft 1.21.10 and 1.21.11, client-side only, no Fabric API…

⬇ Download on Modrinth

FastPackLoad

Vanilla does a lot of unnecessary resource pack work on the render thread. With a large server pack that shows up as a multi-second freeze when you join or switch servers, sometimes long enough for Windows to grey the window out as "not responding".

FastPackLoad removes most of that work.

What it changes

Pack discovery runs in parallel. Vanilla opens every pack and parses its metadata one at a time, on the main thread, before the loading screen even appears.

Zip packs are indexed once. Vanilla walks the whole archive every time a reloader asks about a resource folder, rebuilding and decoding every entry name on each pass.

Font work comes off the render thread. Glyph coverage is resolved across cores, and with hundreds of fonts it is resolved by a different algorithm entirely. A warm-up loop that only does anything for TrueType fonts is skipped when a pack has none.

Atlas mipmaps are generated across cores. Vanilla builds every sprite's mipmaps in a single task on one worker, while the rest of the reload pool has nothing to do.

The loading screen stops waiting around. A finished reload still sits through a grace period and a fade, up to three seconds of nothing. That one is a behaviour change, so it has its own switch.

A vanilla race is fixed. The lazy ZipFile handle in the pack reader is unsynchronised, even though a reload reads packs from several threads at once. That can leak a file handle per race, or hand a reader an archive another thread just closed, which surfaces as IllegalStateException: zip file closed part-way through loading.

Measured

On a server whose pack ships 746 font providers:

before after
Render thread frozen 4384 ms 448 ms
Full reload ~7.2 s ~3.7 s

Your numbers will differ. Packs that are light on fonts have less to gain.

When it still freezes

A watchdog samples the render thread and, if frames stop arriving, logs the stack it is stuck in, along with the package that stack points at. Every reload also logs a short summary of what blocked and for how long, so a slow pack can be pointed at instead of guessed about.

Notes

Client-side only; nothing is required on the server. No Fabric API dependency. Every change can be switched off individually in config/fastpackload.json if you need to rule something out.

Verified by MCModsHub

These come from our own check of the pack file, not from the source page.

Explore more