Community listing page, reviews here may not be monitored by the author.
CleanJoin
No reviews yet
Reduces server lag during large login waves by preloading chunks async, spreading initial entity packets over multiple ticks, and throttling distant mob AI on a worker thread.
Community voices
Reviews
No reviews yet. Be the first to review this project!
Get it on
Available Platforms
Compatibility
Supported Environments
Runs entirely on the server. Also works in singleplayer.
About
Project Details
For authors
Embed Badge
If you're the author of this project, you can embed a live badge anywhere that supports HTML or Markdown. It updates automatically whenever ratings change.
Use HTML for any page that supports it, or Markdown for README files and Markdown-based descriptions.
Identifiers
Platform IDs
Resources
External Links
About
Description
CleanJoin is a performance mod for busy NeoForge servers, built around the moment a login wave hits: chunk loading, entity tracking and packet serialization all landing on the main thread in the same tick, dragging TPS down and tripping the watchdog.
It does its work server-side. Installing it on clients as well is optional and adds a smoother arrival on the player's end — clients without it connect and play normally.
On the server
Chunk preloading. When a player joins, the chunks around their arrival point are pulled in asynchronously instead of on demand, so the first seconds of movement and any follow-up teleport land on chunks that are already there. On Bukkit hybrids CleanJoin also reads EssentialsSpawn and Multiverse-Core configs to work out where a plugin is about to move the player, and preloads there instead of at the login position.
Paced entity sync. Vanilla hands a joining player every entity in view range inside a single tick — on a populated base that is the spike everyone feels. CleanJoin holds that burst back and releases it over the next two seconds, ordered by what actually matters: other players, hostile mobs and projectiles first, then everything else, with item frames, armour stands, dropped items and XP orbs last. Whatever the player is riding, and anyone riding it with them, is never delayed. Dimension changes are paced the same way.
Async mob AI throttling. Passive mobs that no player is near have their AI suspended until someone comes back within range, which takes their pathfinding and goal selection out of the tick loop during peak load. The distance analysis runs off the main thread on Java 21 virtual threads; only the flag itself is written back, on the main thread. Named, leashed and ridden mobs, mounts and villagers are never touched, and everything CleanJoin suspends is restored on chunk unload and on shutdown — nothing is left frozen in your save.
Every threshold, radius and rate is configurable in config/cleanjoin-server.toml, and each of the three systems can be turned off on its own.
On the client (optional)
Adding CleanJoin to the client does not change TPS — it changes the join second, the gap between "Joining world" and the first smooth frame:
- Sync overlay. A vanilla-styled fade with a progress bar while the world streams in, instead of a frozen frame.
- Chunk mesh throttling. Caps how often chunk meshes are rebuilt during the join. This is the stutter people actually report as "lag when joining".
- 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.
All four can be switched off individually in config/cleanjoin-client.toml.
Compatibility
CleanJoin is built to run on Arclight and other Bukkit hybrids. It detects the Bukkit layer at runtime, routes every write back to game state through the main thread so it cannot race the Bukkit event system, and wraps NMS access defensively so a remapped method degrades to a no-op instead of taking the server down.
Server-only, client-only and both-sides installs are all valid combinations and none of them produce a version mismatch in the server list. Client-only does nothing on its own — the mod needs a server that paces.
One note for hybrid operators: the paced entity sync works by mixing into ChunkMap, which is an area Arclight patches heavily. If entities behave oddly right after a join on a hybrid server, that is the first thing to rule out — set dripFeed.enabled = false and the rest of the mod keeps working.
CleanJoin is a server-side performance mod designed for high-population NeoForge servers and Arclight hybrid environments.
When many players join at the same time, the server main thread gets hammered with chunk loading, entity tracking and packet serialization all at once, causing TPS drops and watchdog crashes. CleanJoin addresses this with three systems working in parallel.
When a player joins, nearby chunks are loaded asynchronously in the background so the main thread never has to wait for disk I/O. Instead of sending hundreds of entity packets in the first tick, the initial entity sync is spread across the first two seconds after join, with hostile mobs and players always arriving first. Distant passive mobs that no player is near have their AI temporarily suspended on a worker thread, reducing pathfinding and goal calculation overhead during peak load.
The mod is fully compatible with Arclight servers running both NeoForge mods and Bukkit plugins simultaneously. All writes back to the game state are safely routed to the main thread to avoid conflicts with the Bukkit event system.
Screenshots
Gallery
Versions
Files
Relations
Project Relations
More like this
Similar Mods
Suggestions use data such as tags, dependencies, dependents, descriptions, titles, and more to rank how much they overlap with this mod.
On ModDex
Community snapshot
By the numbers
Statistics
(opens in a new tab)
Get it on
Available Platforms
On ModDex
Community snapshot
By the numbers
Statistics
Resources