Tags
Creators
Details
2.11.3-RELEASE
Compatibility
Changes
Four fixes from an error-analysis pass over the whole plugin. Nothing here was reported from outside; all four came out of reading the code, and each one is covered by a test that was checked against the unfixed build first.
The memory safeguard could go blind after a clock jump
2.11.1 rewrote this to judge free heap by the lowest usage seen in the last minute, which is the right measurement. It timed that window with System.currentTimeMillis(), which is a wall clock and can step in both directions: an NTP correction, a resumed VM, a host clock sync.
A backwards step is the dangerous one. The window stops accepting new samples and keeps only the branch that revises the current reading downwards, so it freezes holding an old trough that can fall but never rise. For the length of the jump the plugin reports free memory the server no longer has, and distance increases are allowed into a filling heap.
Every reading in there is a duration, never a date, so it now uses System.nanoTime(), which is monotonic within a JVM. The condition cannot arise.
A release was invisible to the pre-release that shared its number
Version comparison read the numbers and stopped, so 2.11.0-RELEASE and 2.11.0-ALPHA came out equal. Anyone running an alpha or a beta was never told the finished version existed, and auto-update never staged it.
Ties now break the way semantic versioning breaks them: a pre-release ranks below the release with the same numbers. Anything unrecognised counts as a release, so this can only ever withhold an update, never invent one.
Two quieter ones
chunk-generation-safeguard kept a counter per world and nothing removed it when a world was unloaded. Servers that create and discard worlds at runtime, minigame arenas and per-player plots, accumulated one entry per world for the lifetime of the process.
On Folia, a refused scheduler dispatch was logged and otherwise swallowed. The complexity sampler decides who publishes its result by counting outstanding work, so a task that never ran left it waiting forever and every world kept the multiplier it already had, which is 1.00x. With use-complexity-weighting on, the feature would have done nothing at all, without a line anywhere to say so.
Upgrading
No config changes and no new keys. Replace the jar and restart.
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:X7x1kZUF:6hPTLPVm"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:X7x1kZUF:6hPTLPVm"
}

