
Chunksmith
Pre-generates chunks fast, and safely: an adaptive throttle paces generation against server tick-health so it can run with players online. Builds Distant Horizons / voxy LOD data as it goes and serves it to clients. Fabric, Forge, NeoForge and Paper/Folia.
Links
Tags
Creators
Details
3.14.0+26.x-plugin
Compatibility
Changes
Added
-
The LOD backchannel port is now yours to choose (
lodBackchannelPort). It was derived from the game port and nothing else -- alwaysserverPort + 1, with no way to change it. That is fine on a box you own and impossible on a managed host that will not hand you the port next door (mod_support #19). The new key takes an explicit port;0keeps the old derived behaviour and remains the default, so an existing server is unaffected and nothing needs to be set. -
/cs set lodBackchannelPort <0|1024-65535>-- and it takes effect immediately. No restart. The backchannel stops, rebinds on the new port, and every connected client is told the new port and handed a fresh download credential in the same pass. Clients never had a port setting to begin with (the server has always advertised it on connect), so changing it costs a player nothing -- they do not need to know it happened. -
/cs status-- one command that says what Chunksmith is doing. Pre-gen state and the LOD backchannel together, because those are the two halves of the mod and the two questions operators actually arrive with: "is it generating?" and "why are my players getting no LOD?". The second answer previously lived in/cslod status, which does not appear in/cs help, so it was effectively hidden from the people who needed it.
Fixed
-
Setting the backchannel to the game's own port silently disabled it, and stuck. The bind refused the port -- correctly, and said so -- but the value had already been written to the config and the command answered "lodBackchannelPort is now 25565". The result was an operator told the setting had worked, a backchannel that was off, and a config that kept it off through every restart until somebody thought to look. It is refused now at the moment it is typed, nothing is saved, and the command says it was rejected.
-
A paused single-player pre-gen made no progress at all, and said nothing about it. Since 3.3.0. Pausing is how people run a big pre-gen -- the menu is open, nothing else is competing, the generator has the machine -- so this took the mod's best case and turned it into its worst one, with no error to explain it (mod_support #17).
3.3.0 introduced a ticket safe point: all chunk-ticket work goes onto a queue that is drained once per tick from
MinecraftServer.tickServer. That fixed a real crash, and on a dedicated server it fires every tick without exception. ButIntegratedServer.tickServercallstickPaused()and returns without calling its superclass whenever the game is paused, so on single-player the drain simply never ran. Ticket work piled up, no chunk was ever given a ticket, and the generator -- which runs on its own thread -- kept looping happily over work the server would never accept. Nothing threw, so nothing was logged.The paused tick now drains the queue before it runs housekeeping. This is safe precisely because the server is paused: the safe point exists to keep ticket changes out of the chunk-tick walk, and that walk does not happen while paused.
-
Resuming a pre-gen over ground you already generated is dramatically faster. Chunksmith keeps an in-memory map of what it has generated, but that map starts empty every time the game starts -- so on the run where it matters most, re-running a selection after a restart, it knew nothing and asked the chunk system about every single chunk, one asynchronous round-trip at a time, purely to be told the chunk was already there. A region file's header describes 1024 chunks at once, so that question is now answered by reading a handful of files before the run begins: 5929 existing chunks identified in 183 ms where the old path spent about seven seconds, and 14898 in 301 ms. The saving scales with the selection, so a large resumed pre-gen that used to spend minutes deciding it had nothing to do now starts almost immediately.
Only chunks recorded as fully generated count; anything else is generated as normal. If a region file cannot be read, those chunks are simply checked the old way, so the worst case of this change is the behaviour that was there before.
Changed
-
The progress line no longer makes a healthy run look like a failing one. Resuming a pre-gen reported a rate in the thousands of chunks per second that then fell steadily to a few dozen, and an ETA that grew to match. Nothing was slowing down: already-generated chunks counted toward the percentage but not toward the rate, so the figure started from a number that meant nothing and spent the next minute converging on the truth. Watching it, the only reasonable conclusion was that the mod was grinding to a halt -- which is what somebody reported (mod_support #17).
The rate is now averaged over at least five seconds, so it climbs to the real figure instead of falling from an imaginary one, and the progress line says how many chunks were already there versus how many this run actually generated:
Task finished for minecraft:overworld. Processed: 5929 chunks (100.00%), Total time: 0:00:00 -- 5929 already generated (skipped), 0 newly generated -
A backchannel that cannot bind now says so at WARN, naming the port. It was logged at INFO, worded as though nothing much had happened, and the mod quietly fell back to the slower in-band channel. That is the line an operator needed to see and did not: "Chunksmith is installed on both sides and no LOD ever arrives" reads like a broken mod, not like a closed port. The message now names the port that failed and says what to do about it.
-
The Bukkit/Paper plugin now says plainly that it cannot send LOD to players. It writes a CSLOD store and has no channel to serve it -- that is by design, and it has always been true, but the startup line said "no renderer feed on this platform yet", which an operator reads as a remark about the server rather than as "your players will receive nothing". Somebody ran Chunksmith on their server and their client, got no LOD, and had to open an issue to find out that no combination of mods could have worked (mod_support #18). The message now names the consequence, names the build that does support it, and says outright that no client mod is a workaround. The store is still written and is still worth having: it becomes servable the moment that server moves to the mod build.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:4BeAEBIb:25sJT05u"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:4BeAEBIb:25sJT05u"
}
