cleanjoin-1.1.0.jar
Curse Maven Snippet
What's new
CleanJoin 1.1.0 — Minecraft 1.21.1 / NeoForge 21.1+
This release fixes a crash and repairs two of the three optimisation modules, which were quietly doing nothing at all. It also adds an optional client side. Recommended for everyone running 1.0.
Fixed
Crash when opening a second world without restarting the game The mob optimiser's worker pool was shared across the whole game process and was shut down when a world closed. On a dedicated server nobody ever noticed, because the process exits right afterwards — but in singleplayer and "Open to LAN" the game keeps running, so the next world load submitted work to a dead pool and took the integrated server down with it. The pool now lives and dies with the world.
The mob optimiser was only looking at world spawn It scanned a single box around the overworld spawn point and nothing else. On any server where players are more than a few chunks out — or in the Nether, or the End — the module had no effect whatsoever since release. It now scans around every player, in every dimension.
The mob optimiser overwrote NoAI that wasn't its own Mobs deliberately frozen by a builder, a command or a datapack were being thawed again. Only mobs that CleanJoin froze itself are ever restored now.
Frozen mobs could stay frozen forever NoAI is written into the entity's save data. A mob that got frozen and then unloaded with its chunk stayed frozen on disk — permanently, and even after removing the mod. Everything CleanJoin freezes is now thawed again on chunk unload and on server shutdown.
The mob optimiser no longer touches mobs it shouldn't Named, leashed, ridden mobs, mounts, and villagers are now left alone. Freezing a villager breaks restocking and gossip, and a frozen named pet looks like a dupe bug.
Progressive entity sync did nothing but throw exceptions The module tried to hand entities to the client through a call that vanilla rejects outright for anything already being tracked — which is every entity in the world. Every single call threw, the error was swallowed, and the result was hundreds of internal exceptions per join for no benefit. Rewritten from the ground up: instead of pushing entities at the client, it now holds vanilla's own burst back and releases it in order.
Chunk preloading held far more chunks than configured It issued one ticket per chunk with a radius of its own, so a configured radius of 3 forced roughly an 11×11 area to stay loaded instead of 7×7. Worse, two players joining near each other shared a ticket, and the first one to finish released it for both. Tickets are now per player, one per join, and expire on their own after 10 seconds if anything goes wrong.
Empty mod description CleanJoin showed up in the mod list with no description at all.
Changed
Entity sync is paced from the right moment now. The burst happens while the player is still on the loading screen, earlier than the login event the old code hooked into. Pacing now starts before the first packet goes out — and covers dimension changes too, not just logins.
Priority order: players, hostile mobs and projectiles arrive first; item frames, armour stands, dropped items and XP orbs last. Whatever you are riding, and anyone riding it with you, is never delayed.
Mixed setups no longer show a red cross in the server list. Server with CleanJoin and client without — or the other way around — is a supported combination and is now marked as such. Vanilla clients are unaffected either way.
Added — optional client-side join smoothing
CleanJoin still does its real work server-side alone. Installing it on the client as well is entirely optional and adds:
- Sync overlay. A vanilla-styled fade with a progress bar while the world streams in, instead of a frozen frame. Drawn in vanilla geometry and dimensions; the world stays faintly visible behind it.
- Chunk mesh throttling. Caps how often chunk meshes are rebuilt during the join window. This is the stutter people actually feel when a world loads in.
- Particle suppression. New particles are dropped for the duration of the join. A real win on machine-heavy bases.
- Adaptive pacing. The client reports its frame time and the server adjusts how fast it feeds entities: a player at 15 FPS gets a longer, gentler window, a player at 200 FPS is done sooner. Falls back to the fixed config value for vanilla clients.
All of it can be turned off individually in config/cleanjoin-client.toml.
Configuration
Existing cleanjoin-server.toml files keep working — new keys are added on first start with sane defaults. New options:
dripFeed.enabled— master switch for the progressive entity syncadaptivePacing.enabled— let clients steer the drip rateadaptivePacing.frameBudgetMs— target client frame time during the joinadaptivePacing.maxEntitiesPerTick— ceiling the adaptive pacer may raise the rate to
config/cleanjoin-client.toml is new and only created on clients.
Notes
- The jar is now named
cleanjoin-1.1.0.jar(wascleanjoin-1.jar). Delete the old one. - Server-side only, client-side only and both-sides installs are all valid. Client-side only is a no-op — the mod does nothing without a server that paces.
- Arclight and other Bukkit hybrids are still supported.
This mod has no additional files

