Tags
Creators
Details
2.16.122
Compatibility
Changes
NovaSync 2.16.122
Rollup of the late-April → early-May iteration since the previous Modrinth release. All changes verified on the public dashboard at the EU host before tagging.
What's new
- Identity tab — server icon (drag-drop, auto-resized to 64×64), display name, MOTD with live colour preview. Old MOTD/icon fields scattered across other tabs are now read-only mirrors that reflect this single source.
- NovaLink Identity cascade — when you blank the NovaLink override fields, they inherit live from the Identity tab. Override wins when set; live placeholder preview via
/api/identity/state. - Notifications matrix — per-channel rules (Discord, Email, WhatsApp) for every event class. Reorganised into 5 categories. New Audit sub-tab with ring buffer (
/api/notifications/audit) shows what fired and where. - Public server directory filters — Open vs. whitelisted badges + filter chips + sort dropdown + URL persistence on link.nova-ai.online. Country/region chips with a "Near Me" option. Discord-CTA on detail pages.
- Server Address card — prefers your friendly link.address hostname over raw IP. Separate Bedrock-host field. Dashboard URL row with Copy button.
- CF / multi-CDN proxy detection — auto-detects Cloudflare / Fastly / Akamai / CloudFront fronting your Hub URL. Shows a green "Origin protected by <Provider>" confirmation instead of nudging you to enable a proxy you already have.
- Live player count on the directory — PlayerJoin/Quit events trigger a debounced instant heartbeat, so link.nova-ai.online updates within ~3 seconds of join/quit.
- In-dashboard bug reports — submit reports straight from the dashboard; integrated with the audit log.
- Player Lookup autocomplete — type-ahead from known players via a
<datalist>; free-text fallback preserved; auto-fires the profile load on pick. - Previously-Connected players — sortable by columns.
Fixes
- Roles tab no longer renders blank on first load (chart-init race + tab-switch ordering).
- Notifications save was silently failing — config-key mismatch fixed; 7 missing WhatsApp + 6 missing Discord/Email keys now persist;
onOpChange+onDifficultyChangeroute correctly through NotificationsRouter. - WhatsApp toggle gates were stuck closed — a stale
finalfield captured at class-init was shadowing the live config. - AntiCheat duplicate Discord path removed.
- NovaLink form refresh no longer overwrites your edits —
!isAutoRefreshguards added to Notifications / Identity / NovaLink tabs + focus-detection belt-and-suspenders. - Settings → Nova tab cascade-hide bug — two sections were being hidden because they sat under the integrations data-sub wrapper.
- Server icon dropzone now accepts PNG / JPEG / GIF / BMP (was hard-blocking on a dead PNG-magic-byte check).
- CDN cache-poisoning prevented — download URLs use
{version}placeholder so each release is a unique CF cache key. Cache-Control reduced to 60s on/downloads/*.{jar,txt}.
Operational
- One-click auto-update from the dashboard works node-by-node — owner clicks Update on each node, the plugin pulls from the CDN and restarts. No more manual SCP on iterative builds.
- Multi-CDN IP-range fixture is bundled in the JAR (
cdn-ip-ranges.json).
— Tested on Paper 1.21.11 (EU + SA hosts, both with paying players online during the ramp).
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:M8K0cPuD"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:h1VoTTz6:M8K0cPuD"
}

