You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Added native parties with /party invite, accept, deny, kick, leave, and disband, private /p chat, and leader-follow synchronization on ServerConnectedEvent.
Added a virtual lobby-capacity queue with action-bar position updates, asynchronous slot polling, automatic connection, /queue leave, and optional initial-join holding_server support.
Added a dependency-free Redis RESP client for vn:servers:register dynamic registration and cross-proxy circuit-breaker, health-cache, backend-state, and affinity synchronization.
Added backend MOTD lifecycle parsing for markers such as [STATE:IN_GAME]; routing only uses configured allowed states.
Geographic-routing integrations and BungeeCord/Waterfall compatibility remain deferred and are not part of v4.3.0.
Added optional server management: /vn server add game writes only to velocity.toml, while /vn server add lobby also persists lobby metadata in servers.toml and activates it immediately without reload.
Added /vn server remove and /vn server list, overwrite protection, custom Velocity-config paths, IPv4/hostname/IPv6 parsing, and atomic configuration writes.
Expanded gui.toml Bedrock controls with enable/fallback switches, sorting, button limits, visibility toggles, and title/content/button overrides with color conversion.
Added backend config.yml switches for the bridge, inventory channel, handshake, refresh, delay, title length, and fallback material.
Added
Configurable language packs — explicit en, ru, es, fr, de, pt_br, and zh_cn selection plus arbitrary custom codes. Built-in changes rewrite active text; player locale is never auto-detected.
Separate gui.toml — rows, materials, fillers, refresh interval, navigation slots, and per-server fixed slot/material/name/lore overrides.
Universal Java inventory selector — the same 4.3.0 JAR runs in Velocity proxy or Paper/Spigot bridge mode and announces its mode at startup.
Pagination, live refresh, and unavailable indicators for Java inventory menus.
/vn bridge status reports detected backend bridge versions and last-seen times.
Exponential backoff with jitter for connection retries — each retry waits progressively longer with a small random jitter to avoid thundering-herd reconnects.
Player affinity persistence — unexpired sticky-session mappings are now saved to disk and restored across proxy restarts.
/vn health command — consolidated one-shot diagnostics: routing mode, lobby count, circuit-breaker states, drained servers, cache sizes, and affinity entry count in a single screen.
HTML operations dashboard — a separate HTTP server on its own port serving a live lobby table, routing distribution chart, affinity map, config summary, recent routing events, and joins/leaves-since-start counters. Disabled by default and authenticated via a bearer-token login flow.
velocity-plugin.json descriptor — modern Velocity plugin metadata alongside the existing @Plugin annotation.
New reproducible marketplace brand system with a plugin icon, hero banner, social card, nine feature panels, platform-specific listing copy, meaningful alt text, and a visual feature overview in the wiki.
Built the backend bridge against the Spigot API 1.16.5 baseline without version-specific NMS.
Changed
Dashboard documentation now distinguishes the universal 127.0.0.1 loopback example from provider addresses and explains allocated ports, container binds, and browser URLs.
The official wiki URL is now built in. startup.wiki_url is no longer written or accepted as a custom documentation target, and legacy entries are removed during configuration normalization.
Language documentation now explains structural test coverage, custom packs, and how native speakers can contribute new or improved translations.
routing.use_menu_for_lobby replaces use_chat_menu_for_lobby; the old key remains a compatible alias.
Selector mode/fallback lives in navigator.toml, language in messages.toml, GUI presentation in gui.toml, and managed lobby metadata in servers.toml. The plugin/config versions are 4.3.0/v8.
MiniMessage, classic &/§, &#RRGGBB, and Bungee-style hex colors are accepted in configurable text.
Server health cache keys are now normalized to lowercase. Mixed-case server names no longer produce duplicate cache entries.
Consistent hash ring uses a thread-local MessageDigest instead of allocating one per lookup. Throughput on consistent_hash mode improves by roughly 3–4× under load.
RoutePlanner now builds a Map<String, LobbyEntry> once per planning call instead of scanning the lobby list linearly per candidate.
Config reload now uses a dedicated ReentrantLock instead of synchronized(this). Admin commands and event subscribers no longer contend on the same monitor during a reload.
Bedrock form text stripping now matches legacy color codes case-insensitively. &C and &L are now stripped alongside &c and &l.
Update checks are now silent by default — no startup log line, no periodic console message. /vn updatecheck still works for manual checks. Set update_checker.silent = false in navigator.toml to restore the old behavior.
Config version bumped to 8. Adds the final 4.3.0 advanced-system, managed-server, selector, dashboard, and Redis settings. Older configs are auto-migrated and backed up; network-facing systems remain disabled by default.
Fixed
Party commands now expose explicit /party status and /party chat <message> paths, while /p <message> and multiword messages use Velocity raw-command parsing.
Escaped MiniMessage entities such as <player> are no longer mistaken for the legacy &l bold color code.
Dashboard API version data now comes from the plugin metadata instead of a hardcoded prerelease string.
Redis RESP parsing on the Velocity proxy now enforces line, bulk, array, total-frame, and nesting limits before allocation or recursion.
Backend Redis lifecycle registration now rejects oversized response lines instead of allowing peer-controlled heap growth.
Dashboard bearer credentials are accepted only through the Authorization header. The browser login keeps the token in memory and never places it in URLs or persistent browser storage.
MetricsService.active() and statusLine() are now volatile. Reader threads (Prometheus exporter, /vn status) no longer risk seeing stale values after a config reload.
PrometheusExporter.start() now clears the server reference if start() throws. Previously the next stop() call would operate on an unstarted server.
UpdateChecker now uses the non-deprecated JsonParser.parseString(...) and the nextAllowedCheck read-modify-write is guarded by a synchronized block to prevent duplicate 429 retries under concurrency.
ConfigManager's generated navigator.toml header box no longer overflows on the bStats URL line.
Empty if branch in applyLoadedConfiguration removed — round-robin reset logic is now a single positive check.
Internal
Stripped ~110 inline // comments across the source tree. Public API javadoc and license headers are preserved.