Tags
Creators
Details
2.16.109
Compatibility
Changes
v2.16.109 — Auto-update flow fix + countdown overlay + gzip dashboard
Critical fix — read this if you have 2.15.471 through 2.16.108 installed
The dashboard's "Update now" button was broken from 2.15.471 (2026-04-30) through 2.16.108 — clicking it always returned Error: unknown and never actually updated the plugin. Root cause: the install request was sent as GET to a POST-only endpoint (a JS helper function ignored the method override). The server-side method-check rejected it cleanly with no log entry, so the bug was invisible to anyone except the user clicking the button.
Fixed in 2.16.109. If your auto-update is currently broken, drop this JAR in your plugins/ folder once and restart. From this version forward, auto-update permanently works and you never need to manually swap a JAR again.
Other fixes & polish
- Auto-update flow now uses the standard 60-second countdown overlay (cyan full-screen, polls
/api/health, auto-reloads when server is back). Previously showed a small "Reconnecting... attempt 20" status which looked like something was failing. - Dashboard served gzipped when client accepts it.
dashboard.htmlis ~1.2 MB raw → ~200 KB on the wire, ~5x faster page load over high-latency / metered connections. - NovaLink register substring OOB fixed — affected nodes where the generated nodeId hex happened to be <8 characters (about 1-in-8 chance per fresh install).
- Diagnostic logging on the update endpoint — any future failure now logs the full stack trace + exception class name to
latest.logAND returns the class name in the API response. No more "Error: unknown" with zero diagnostic trail. - Settings → Advanced → Plugin Updates section added — manual "Check for Updates" button, current/latest version display, last-checked timestamp, "Install latest now" shortcut. Auto-checks when you open the Advanced sub-tab.
Upgrade notes
- All existing config + data is preserved.
- First boot after upgrade backs up
config.ymltoconfig.yml.bak-2.16.<previous>automatically. - No breaking changes to the public API or peer protocol.
- Dependencies unchanged: Paper 1.21.11, optional CoreProtect / LuckPerms / voicechat / Floodgate / Geyser as before.
Thanks
Sorry to anyone who clicked Update during the last week and saw "Error: unknown" — that was a real bug, not your network. This release fixes it for good and adds enough diagnostic plumbing that the next bug will be visible the moment it happens.
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:h1VoTTz6:WugqWnNI"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:h1VoTTz6:WugqWnNI"
}

