NovaSync
2.17.161Nova AI server backbone for Paper 1.21 — cross-network peer sync, live web dashboard, economy (/bal /pay /eco), FakeHuman skin entities, voice chat integration, automated backups, and a 7-tier anti-ch
2.17.161latestNovaSync 2.17.161May 14, 2026 NovaSync 2.17.161 — accumulated launch-readiness updates since 2.17.146
This release rolls up the entire Fast-channel iteration from 2.17.146 → 2.17.161. Every change in the chain has been live on EU + SA + laptop nodes for hours-to-weeks of soak time before promotion to stable.Security & hardening (Waves 7-10 + follow-ups)
Cross-vendor trio review (DeepSeek V4-Pro + Gemini 3.1-Pro + Claude java-plugin specialist) drove this sweep. - Wave 7 (2.17.153) — 4 CRITICALs. Peer-relay factory-reset audit + per-IP rate limit, legacy peer-auth strict-mode primitive, replay/strict-HMAC primitive, role-definition isAdmin smuggle blocked. - Wave 8 (2.17.154) — 10 HIGH-confirmed fixes. DAOsetAutoCommitrestoration in all 9 transactional DAOs (no more silent connection-pool corruption on rollback); 5-route peer audit row enforcement; cross-server pay amount cap; dashboard XSS surface sweep;EconomyDao IGNOREfor race-safe insert; voice cookie 24h TTL + refresh-on-use (was infinite); installer atomicity + graceful start/stop; PrivateCredentials AES-256-GCM at-rest encryption. - Wave 9 (2.17.155) — 18 single-vendor HIGH FLAGs. Peer-route size+rate caps on/loot-relay(512 KB → HTTP 413),/item-drop,/voice/broadcast(peer-only auth, dashboard cookie rejected), DAO + SchemaInit mechanical sweep, voice admin-stream rate limit (180/min → 429). - Wave 10 partial (2.17.156).PrivateCredentials.getCredentialBytes()byte[] accessor + post-crash cleanup in migration path. - 2.17.157 — CSP `'unsafe-eval'` dropped. Audit confirmed zeroeval/Function/string-timer usage. Inline-JS extraction tracked as a multi-day follow-up. - 2.17.158 — BLOCKER fix. Duplicate/dashboard/lib/HTTP context registration crashed HTTP-API startup on SA promotion. Caught instantly by the newly-shipped Playwright dashboard test suite. - 2.17.159 — CDN URL normalization + `VERSION-FAST.txt` staleness hotfix.Operability
- NovaLink directory test coverage: 2 new@apitests innova-sync-plugin/dashboard-tests/. - InstallerNOVA_NETWORK_KEYenv var to pre-seednetwork.keyfor fresh installs joining an existing hub.UX
- Memory panel split heap vs Java overhead. The "Memory (RAM)" panel was showing total Java process memory under a label saying "Minecraft is using ... you control this with the boxes below" — but the boxes only control the heap (XMX), not the +500-700 MB of Java overhead (thread stacks, metaspace, JIT cache, GC tables, Netty buffers, native libs). New layout breaks process intoHeap (you control)+Java overhead (auto)sub-rows. Recommendation row math fixed to reserve room for off-heap overhead.Verification
- 21-test Playwright suite atnova-sync-plugin/dashboard-tests/(4 suites:@smoke,@security,@coverage,@api). Live runs on 2.17.161: SA 20 pass / 3 skip / 0 fail; EU 19 pass / 4 skip / 0 fail. - Cross-vendor trio review confirmed every Wave 7-10 fix. Tested on Paper 1.21.11 + Java 21 with Geyser-Spigot 2.10.0, Floodgate 2.2.5, LuckPerms 5.5.17, ViaVersion 5.9.2, ViaBackwards 5.9.2, voicechat 2.6.17.2.17.146NovaSync 2.17.146May 14, 2026 NovaSync 2.17.146 — Launch-readiness auth/HTTP sweep
Final pre-launch hardening pass over the publicly-exposed dashboard + HTTP API surface, driven by a cross-vendor trio review (DeepSeek V4-Pro + Gemini 3.1-Pro + java-plugin specialist agent). Four findings landed; ~15 lower-severity items were triaged into a follow-up hardening sprint.What changed
- Role-delete now refuses on active members.RoleApiHandlerpreviously had dead-code: the active-member guard always evaluated false, so any role — including built-in or admin-occupied roles — could be deleted in one click. Replaced with a realSELECT COUNT(*) FROM dashboard_admins WHERE role = ? COLLATE NOCASEand HTTP 409 with the count when non-zero. - Constant-time api-key compare on Java HTTP routes./api/command,/api/health, and/api/block-lookupwere comparingauthHeader.equals(finalApiKey). Replaced withMessageDigest.isEqualon UTF-8 bytes across all three. Closes a remote timing oracle on the shared HTTP API key. - Double-submit CSRF check on `/api/command` session-cookie path. Previously the endpoint accepted any same-origin POST with a validnova-sessioncookie, with noX-Dashboard-Tokenvalidation. A malicious cross-origin page could drive arbitrary server commands as the logged-in admin. The api-key path (used by the Nova mod) is unaffected — it never sets the session cookie. - `evtBadge()` XSS fix. The activity-feed badge was interpolating server-controllede.typestraight intoinnerHTML. Wrapped through the canonicalesc()helper that already guards every other dynamic-HTML insertion in the dashboard.Verification
- Cross-vendor trio review (Gemini 3.1-Pro + DeepSeek V4-Pro) confirmed all four fixes; two single-vendor "ship-block" findings were caught as false positives by reading the actual code paths before fixing. - Full nuke + reinstall of the EU node from the publicinstall.nova-ai.online | bashpath: cold-boot succeeded in 17.3 s, owner-setup wizard reachable, dashboard login + role page + command endpoint all healthy. - Live on SA Hyperlayer + EU Hetzner + laptop test node; Fast and Slow website channels both point at 2.17.146.Continuity with 2.17.145
This release sits on top of the full 2.17.134 → 2.17.145 Mojang-route resilience series (MojangRetryProxy v2, MojangPublicKeysCache, Geyser cooldown-type patch, BedrockSkinFixis_steveboolean parse). All of that is included — no behavior changes vs 2.17.145 outside the four auth/HTTP fixes above. Tested on Paper 1.21.11 + Java 21 with Geyser-Spigot 2.10.0 and Floodgate 2.2.5.2.17.145NovaSync 2.17.145May 13, 2026 NovaSync 2.17.145 — Mojang-route resilience + Bedrock skin path fixes
Patch series 2.17.134 → 2.17.145 shipped in one day after a Hyperlayer SA → Mojang routing degradation broke player joins. End-to-end hardening of every outbound Mojang/Microsoft/Geyser endpoint NovaSync depends on.MojangRetryProxy (compat shim)
- Multi-host coverage now wraps every flaky Mojang/Microsoft/Geyser endpoint that affects auth, secure-profile, Bedrock discovery, OpenID issuer, profile lookup, and skin textures:api.minecraftservices.com,*.minecraft-services.net,sessionserver.mojang.com,api.mojang.com,textures.minecraft.net,api.geysermc.org. - Per-host wildcard matching (*.minecraft-services.net) covers the full Cloudburst discovery → issuer → jwks → token chain. - Handshake-retry:setSoTimeout(handshakeMs)beforestartHandshake()plus a 6-attempt retry loop sharing the same budget as read-retries. JDK-clean way to interrupt a stuck TLS handshake (replaces the prior watchdog-thread approach that raced on the inner-socket field). - Install hook moved fromonEnabletoonLoadso the shim is the JVM-wide default SSLSocketFactory before authlib'sYggdrasilServicesKeyInfoclass init runs its first publickeys fetch (~5s after ServerMain). - JVM-widesun.net.client.defaultConnectTimeout=8000+defaultReadTimeout=10000+http.keepAlive=falseset at install (when not already operator-configured). - SEVERE log on install failure so admins see when the shim is INACTIVE.MojangPublicKeysCache (new)
- Disk-cache for/publickeysatplugins/NovaSyncPlugin/cache/mojang-publickeys.json. One successful fetch buys months of resilience (keys rotate rarely). - On retry exhaustion, splices a synthesizedHTTP/1.1 200 OKresponse (SequenceInputStreamof headers + body) intoRetryingSSLSocket.getInputStream()so the application-layer HTTP parser inside authlib'sMinecraftClientreads cached bytes seamlessly. - AtomicCacheEntryrecord so body + timestamp can never tear under concurrent reads. - Strict JSON shape validation before save (requires{...}/[...]wrapping +publicKey/BEGINsubstring + Content-Length-delimited body) — prevents a truncated upstream response from poisoning the cache for 90 days. - Async file I/O dispatched to a daemon executor so saves don't block the auth hot-path. - Early cache fallback once two upstream retries have failed AND the cache is warm — keeps total elapsed under Paper's ~30 s login window. - Boot-timewarmAsync()pre-fetches the cache in the background.ConfigMigrator (Geyser auto-patch)
- New idempotent patch forbedrock.cooldown-type: disabled. Geyser's cooldown indicator renders via a translatable component (geyser.opt.cooldown.*); when the Bedrock locale-asset cache fails to load on a degraded route, the Bedrock client cannot resolve the key and renders the rawgeyser.opt.cooldown:nonliteral as floating HUD text on every hotbar-slot change. Disabling the indicator avoids the broken-translation render.BedrockSkinFix
-is_steveboolean parsing fixed (was using the string-onlyextractJsonStringhelper, which always returned a substring of the next quoted field; the equality check never matched). NewextractJsonBooleanis whitespace-tolerant and word-boundary terminated. - Stop overriding Floodgate's textures URL whenis_steve=true. Geyser'sis_steveflag reflects the player's Xbox Live persona skin, not their currently-active local Bedrock skin (Marketplace/custom). Floodgate has already uploaded the correct visual; preserve its URL.Cross-vendor review
Findings consolidated from DeepSeek V4-Pro + Gemini 3.1-Pro (via OpenRouter) + java-plugin-specialist agent throughout the patch series. Tested live on Hyperlayer SA (Paper 1.21.11, Java 21, Geyser-Spigot 2.10.0, Floodgate 2.2.5).2.17.133NovaSync 2.17.133May 13, 2026 2.17.133
Highlights since 2.16.208
Compatibility scanner + dashboard banner (2.17.130-132)
New boot-time + periodic compatibility scanner. Detects version drift between Paper, Geyser, Floodgate, ViaVersion/ViaBackwards, LuckPerms, CoreProtect, and voicechat. Surfaces issues via persistent dashboard banner with one-click fix buttons. Tiered notifications: BLOCKER fires WhatsApp + Discord + Email, WARN fires Discord only. Self-healing — issues auto-clear when admin fixes them. Snooze + acknowledge lifecycle for issues you can't fix immediately.In-JVM Mojang API retry shim (2.17.133)
Wraps the JVM-wide SSLSocketFactory so HTTPS calls to api.minecraftservices.com get up to 6 transparent retries on empty/timeout reads. Fixes the silent-drop failure mode where Geyser's encryption-setup call to Mojang fails permanently for the JVM lifetime (every subsequent Bedrock login throws NoClassDefFoundError). Pure in-JVM; no certificate generation, no listening port, no routing changes. Only sockets to api.minecraftservices.com are wrapped; all other HTTPS traffic uses the unmodified default factory.Geyser boot recovery (2.17.128-129)
Backup safety net: if MojangRetryProxy fails for any reason and Geyser logs "Unable to set up encryption", NovaSync detects within 60s and triggers an automatic Paper restart. Configurable max-attempts (default 20). Persists across restarts so an exhausted loop resets cleanly.Bedrock plugins one-click update (2.17.123-126, 130)
Dashboard button installs/updates Geyser, Floodgate, ViaVersion, and ViaBackwards atomically from their official sources (Modrinth / GeyserMC / Hangar with fallbacks). Owner-gated, audit-logged, single restart loads all four.Owner-tab consolidation
Plugin Manager, NovaSync Update, License Key, OpenAI Key, Security, Sync, Backups, Gamerules, Advanced, Hub, Features, NovaLink — all moved under the Owner sub-bar. Clearer permission boundary: dashboard admins can moderate players but cannot touch infrastructure unless they hold the OWNER role.Security hardening (2.17.114-126)
Ten security fixes across multiple subsystems: constant-time API key comparison, OWNER gate on /api/admin/relaunch-via-startscript, per-IP+username rate limit on update-channel unlock-fast, audit-on-deny for privileged-action attempts.Recommended plugins curated set
recommended-plugins.jsonships with the 7 plugins NovaSync integrates with: CoreProtect, Geyser-Spigot, Floodgate, ViaVersion, ViaBackwards, LuckPerms, Simple Voice Chat. First-run setup wizard offers a one-click install of any missing ones from the dashboard.Compatibility
- Paper 1.21.11 or compatible - Java 21+ - Drop-in: no other plugins required; LuckPerms / Voicechat / CoreProtect / Geyser / Floodgate / Via* are all optional integrations2.16.208NovaSync 2.16.208May 4, 2026 Voice & dashboard improvements: - New full-duplex bidirectional voice between admin dashboard and Bedrock /voice (browser AEC at source) - Dashboard toggle: SVC Echo Guard (Settings -> Voice) for Java SVC mod players in case of echo loops - Cache-Control no-store on /voice and /dashboard so plugin updates take effect immediately - WebCodecs.AudioEncoder/Decoder voice path with raw 20ms Opus packets (zero container overhead) - Mobile wake-lock on /voice page so phones don't drop voice when screen dims2.16.122NovaSync 2.16.122May 3, 2026 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 stalefinalfield 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).2.16.109NovaSync 2.16.109May 2, 2026 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 returnedError: unknownand 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 yourplugins/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 tolatest.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 upconfig.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.
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.8MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
WorldEdit
A Minecraft Map Editor... that runs in-game! With selections, schematics, copy and paste, brushes, and scripting. Use it in creative, or use it temporarily in survival.
11.6MSueta