Перейти к содержимому
Mineforgian

BoatRacing

An F1‑style ice boat racing plugin for Paper with a clean, vanilla‑like GUI. Manage teams, configure tracks with the built‑in BoatRacing selection tool, run timed races with checkpoints, pit area penalties, and a guided setup wizard.

Загрузки
906
Подписчики
9
Обновлён
24 июня 2026 г.
Лицензия
MIT

Опубликован 12 августа 2025 г.

BoatRacing

Modrinth Downloads Minecraft Java Servers

Languages bStats

An F1-style ice boat racing plugin for Bukkit/Spigot (Paper/Purpur compatible) with a clean, vanilla-like GUI. Manage teams, configure tracks, run timed races with checkpoints, pit penalties, false starts, 5-light countdowns, ghost replays, and more — all with full multi-language support (16 languages).

What's New in 26.2

  • New version numbering: aligned with Minecraft's new YY.D.H system (Year.Drop.Hotfix). Plugin version now matches the Minecraft release it targets.
  • Per-track broadcast mode: racing.broadcast-mode accepts global or racers, overridable per track. Contributed by @MC-MrBirdy in #5.
  • Per-track lobby configuration: lobby settings can now be set per track for dedicated lobbies. Contributed by @MC-MrBirdy in #5.
  • Per-track rewards configuration: rewards can now be overridden per track. Contributed by @MC-MrBirdy in #5.
  • Admin -p: target flag: admins/console can target other players for commands by appending -p:<player>. Contributed by @MC-MrBirdy in #5.
  • Start lights wand UX: Shift+Left Click a Redstone Lamp with the wand to add, Shift+Right Click to remove. Lamp glows with green particles on add.
  • Per-track registration time: /boatracing setup setregtime <seconds> and setup wizard step 8/8. Reported by @supershootstudions-lgtm in #6.
  • Restart command: /boatracing race restart [track] stops + re-opens + re-joins + force-starts in one command. Auto-detects track.
  • Clearlobby command: /boatracing setup clearlobby to disable the lobby for a track.
  • Debug logging levels: debug: "off"/"severe"/"warning"/"info"/"fine"/"finer"/"finest" in config.yml.
  • Setup show: now shows laps, registration time, and properly translated status labels.
  • MC-MrBirdy added as co-author for ongoing contributions across multiple releases.

What's New in 1.1.6

  • Forfeit command (/boatracing race forfeit): abandon a race without stopping it for others. Forfeited players show as DNF in results. Contributed by @MC-MrBirdy.
  • Practice ghost replay: your best practice run is recorded as a ghost boat that replays alongside you.
  • Database persistence: SQLite (default), MySQL, or YAML storage. JDBC drivers auto-downloaded with SHA-256 verification on first run.
  • Practice leave: /boatracing race practice leave <track> and auto-exit on disconnect.
  • Minecraft 26.2 support: AnvilGUI updated for native 26.1/26.2 compatibility.
  • Fast-crossing detection: ray-AABB segment intersection prevents checkpoints/finish lines from being missed at high boat speeds.
  • SimpleScore/TAB compatibility: sidebar plays nice with external scoreboard plugins.

Full changelog →

Features

  • Team system: create/join/leave teams, set racer numbers and boat types, team colors
  • Admin GUIs: manage teams, players, race control, and named tracks from in-game menus
  • Named tracks: per-track YAML configs with laps, pit stops, penalties, registration time, broadcast mode, and start slot overrides
  • Setup wizard: 8-step guided flow to configure starts, finish, lights, pits, checkpoints, laps, and registration time
  • Race systems: ordered checkpoints, mandatory pit stops, false-start penalties, 5-light F1-style countdown, registration lobby teleport/return
  • Ghost replays: best practice runs saved as ghost boats with no-collision rules
  • Map voting: /boatracing race voteopen with auto-open winner registration
  • Solo practice: /boatracing race practice <track> to train alone
  • PlaceholderAPI: 100+ %boatracing_*% placeholders for holograms, scoreboards, NPCs
  • i18n: 16 bundled languages (EN/ES official + 14 community translations), hot-reloadable
  • Rewards: per-position race rewards with commands, messages, and broadcasts — now per-track configurable
  • SQLite/MySQL/YAML storage: pluggable persistence with automatic legacy migration
  • Per-track configuration: broadcast mode, lobby, rewards, registration time — all overridable per track

Quick Start

  1. Download and place in plugins/
  2. /boatracing teams → create a team
  3. /boatracing setup wizard → configure a track (8 steps)
  4. /boatracing race open <track> → open registration
  5. /boatracing race join <track> → players join
  6. /boatracing race start <track> → go!

Commands

Command Description
/boatracing teams Open team GUI
/boatracing race open/join/leave <track> Manage race registration
/boatracing race start/force/stop/restart <track> Control races
/boatracing race practice <track> Start solo practice
/boatracing race forfeit Abandon current race
/boatracing race voteopen/vote/voteui Map voting
/boatracing stats [player] View stats (admins: -p:<player>)
/boatracing setup wizard Guided track setup (8 steps)
/boatracing setup show View current track configuration
/boatracing setup setlaps/setregtime/setpitstops Per-track overrides
/boatracing setup setlobby/clearlobby Lobby configuration
/boatracing admin Admin management hub

Requirements

  • Java 17+
  • Bukkit/Spigot/Paper/Purpur 1.19 – 26.2
  • PlaceholderAPI (optional, for placeholders)

Links

Ченджлог

26.2Релиз26.2, 26.3-snapshot-1, 26.3-snapshot-2 · 24 июня 2026 г.

Changelog

26.2 — 24/06/2026

Added

  • MC-MrBirdy added as co-author for ongoing contributions across multiple releases.
  • New version numbering: aligned with Minecraft's new YY.D.H system (Year.Drop.Hotfix).
  • Per-track broadcast mode: racing.broadcast-mode accepts global or racers, overridable per track. Contributed by @MC-MrBirdy in #5.
  • Per-track lobby configuration: lobby settings can now be set per track for dedicated lobbies. Contributed by @MC-MrBirdy in #5.
  • Per-track rewards configuration: rewards can now be overridden per track. Contributed by @MC-MrBirdy in #5.
  • Admin -p: target flag: admins/console can target other players for commands by appending -p:<player>. Contributed by @MC-MrBirdy in #5.
  • Start lights wand UX: Shift+Left Click a Redstone Lamp with the wand to add it as a start light, Shift+Right Click to remove. Lamp lights up with green particles on add, smoke on remove. Wand lore shows light instructions in all 15 languages.
  • Restart command: /boatracing race restart [track] stops any running race, re-opens registration, re-joins previous participants, and force-starts. Auto-detects track if sender is in an active race. Permission: boatracing.race.admin or boatracing.setup.
  • Per-track registration time: registration-seconds can now be set per track via /boatracing setup setregtime <seconds>. Configurable in the setup wizard as step 8/8. Displayed in setup show. Reported by @supershootstudions-lgtm in #6.
  • Clearlobby command: /boatracing setup clearlobby disables the registration lobby for the current track.
  • Debug logging levels: set debug in config.yml to "off" (default), "severe", "warning", "info", "fine", "finer", or "finest". Controls console log verbosity. Also applies on /boatracing reload.

Changed

  • UpdateChecker: version comparison now supports YY.D.H format natively. Errors always logged to console.
  • Wizard LIGHTS step: description and hint now translated to all 15 languages.
  • Setup summary: laps count now included in the final setup wizard summary.
  • Wizard step numbering: updated from 1/7–7/7 to 1/8–8/8 to include the new REGTIME step.

Fixed

  • Action bar now properly cleared after forfeiting a race. Contributed by @MC-MrBirdy in #5.
  • Forfeit command correctly uses resolved player reference instead of raw sender. Contributed by @MC-MrBirdy in #5.
  • Lobby section null-safety when configuration is missing. Contributed by @MC-MrBirdy in #5.
  • Reward section null-safety when configuration is missing. Contributed by @MC-MrBirdy in #5.
  • Cross-track reward leakage prevented (stable global fallback). Contributed by @MC-MrBirdy in #5.
  • Broadcast mode string comparison now uses .equals() instead of ==. Contributed by @MC-MrBirdy in #5.
  • -p: flag no longer interferes with downstream argument length checks. Contributed by @MC-MrBirdy in #5.
  • Setup wizard setlaps: now correctly displays and persists custom lap values in the wizard prompt.
  • Setup show: fixed untranslated status labels (general.yes/general.nosetup.status-yes/setup.status-no). Added lap count and registration time display. Excluded laps and registration-seconds from the raw overrides section.
  • Messages YAML: indentation corrected for cancelled-no-participants and restarted keys across all 16 locales.
  • Race finish vehicle cleanup: players now properly dismount their boat when finishing a race with the lobby disabled.
1.1.6Релиз26.2-rc-1, 26.2-rc-2, 26.2 · 17 июня 2026 г.

Changelog

1.1.6 — 17/06/2026

Added

  • Admin Race checkpoint editor UI: added checkpoint management directly in the race admin inventory with paginated listing and in-place actions (add from selection, replace, remove, move up/down).
  • Admin Race pitstop quick controls: added mandatory pitstop quick-set actions (0/1/2) plus custom anvil input from the race admin inventory.
  • Setup selection particle visualizer: added built-in wand selection wireframe rendering using particles, configurable under setup.selection-visualizer.* (enabled, period-ticks, particle, spacing, max-particles-per-player, view-distance, show-only-with-wand).
  • Explicit track+laps placeholders: added lap-scoped variants for comparative panels: %boatracing_track_best_player_laps_<track>_<laps>%, %boatracing_track_best_time_laps_<track>_<laps>%, %boatracing_track_best_time_ms_laps_<track>_<laps>%, plus %boatracing_track_top_1|2|3_player|time|time_ms_laps_<track>_<laps>%.
  • Stats placeholders by track and laps: added best-race/best-lap variants for viewer and top contexts scoped by track and by track+laps (for example %boatracing_player_best_race_laps_<track>_<laps>% and %boatracing_top_player_best_race_name_laps_<track>_<laps>%).
  • Forfeit command (/boatracing race forfeit): players can abandon a running race without stopping it for others. Permission boatracing.race.forfeit (default: true). Contributed by @MC-MrBirdy in #3.
  • DNF results display: forfeited players appear as DNF {player} (forfeited) at the bottom of race results, separated from finishers. Finishers keep normal positions and rewards; forfeited players do not receive rewards or win/loss stats.
  • Practice ghost replay (advanced vanilla MVP): solo practice sessions now capture sample paths and replay the best recorded ghost alongside the current run. Ghost entities (boat + armorstand) use no-collision rules, are hidden from other players, and interpolate smoothly with angular rotation.
  • PracticeGhostManager: new manager class for ghost persistence per track and lap count, using the DocumentStore backend. Ghosts are stored in practice-ghosts.yml.
  • DocumentStore persistence layer: new pluggable storage interface with three backends — YAML files (YamlFileDocumentStore), local SQLite (JdbcDocumentStore with SQLite dialect), and remote MySQL (JdbcDocumentStore with MySQL dialect). Backend selected via config.ymldatabase.mode.
  • DocumentStoreFactory: resolves the active store implementation from config and provides automatic legacy-YAML migration on first load when switching to SQLite/MySQL.
  • Database config section: new database block in config.yml with mode (YAML/SQLITE/MYSQL), table name, SQLite file path, and MySQL connection settings.
  • Practice ghost config section: new practice.ghost block in config.yml with enable toggle, sample/playback tick rates, minimum distance filter, sample cap, and name display option.
  • Practice leave command: /boatracing race practice leave <track> (and exit alias) to cleanly exit a practice session. Also handles disconnect/quit/kick via PlayerQuitEvent and PlayerKickEvent handlers.
  • AnvilGUI 26.1/26.2 compatibility: switched from upstream net.wesjd:anvilgui:1.10.12-SNAPSHOT to the feeeedox/AnvilGUI fork via JitPack. Added Wrapper26_R1_LocalShim as compatibility fallback for 26.1 close-event handling. Extended VersionMatcher with 1.19.x mappings, 26.1.2, and 26.2/26.2.126_R2 entries, loading native Wrapper26_R2 from the fork on 26.2.
  • Race result forfeited message: added race.results.forfeited key to all 16 bundled language files with translations.

Changed

  • Track-scoped Admin Race actions: race/setup operations in Admin Race GUI now resolve the active track session explicitly, so edits and status reflect the selected track context.
  • GUI setup persistence path: laps/pitstops/checkpoint edits issued from Admin Race GUI now write through track configuration overrides as part of the same action flow.
  • Setup override synchronization: /boatracing setup setlaps <n> and /boatracing setup setpitstops <n> now also update the active in-memory race session for the selected track when that session already exists.
  • Setup command docs clarity: README setup command descriptions now state that laps/pitstops overrides apply immediately without restart/reload.
  • Lap-context track records/placeholders: track bests are now stored and resolved per lap count (bestTimesByLaps), preventing 2-lap records from overriding 3-lap placeholders (and vice versa) across %boatracing_track_best_*%, %boatracing_track_top_*%, and %boatracing_player_track_best%.
  • Selection visualizer edge distribution: particle allocation is now balanced across all box edges and visibility culling is performed against the full selection box distance, reducing inconsistent partial rendering.
  • Forfeit broadcast scoping: forfeit() now uses raceAudience() (participants + admins) instead of global broadcast() for the {player} forfeited message in competitive mode. Practice mode forfeits show a private You left the practice session message only to the runner.
  • TeamManager, StatsManager, PracticeStatsManager refactored: all three managers now read/write through DocumentStore instead of direct File + YamlConfiguration.save/load. Legacy YAML files are automatically migrated to the database on first load when using SQLite/MySQL mode.
  • config.yml restructured with section header comments and new database / practice.ghost blocks.
  • Race state marking: RaceState now includes a forfeited flag. forfeit() marks the state instead of removing it, so checkAllFinished() triggers correctly and announceResults() can display the player as DNF.
  • Project version: bumped to 1.1.6. Minecraft support range extended from 26.1 → 26.2.

Fixed

  • Stale per-track override reads in existing sessions: race settings load now refreshes track data before reading racing.* overrides, preventing old values from being reused in cached track sessions.
  • setlaps runtime mismatch: fixed issue where /boatracing setup setlaps <n> acknowledged the new value but /boatracing race open <track> could still open registration with a previous lap count until server restart.
  • setpitstops runtime mismatch: fixed equivalent stale-value behavior for per-track mandatory-pitstops after /boatracing setup setpitstops <n>.
  • Track setup editability after creation: added granular setup editing commands so admins can remove one start/light by index (removestart, removelight) and clear finish/default pit (clearfinish, clearpit) without rebuilding the whole track config.
  • Admin Race GUI i18n regression: removed newly introduced hardcoded user-facing strings and routed checkpoint/pitstop/editor labels, lore, and action feedback through message keys.
  • Localized coverage gap for new GUI keys: added missing gui.race.* keys for all bundled locales so non-EN bundles no longer miss editor/pagination/pitstop texts.
  • Stats tab-complete DataConverter spam: player-name suggestions for /boatracing stats <player> no longer rely on OfflinePlayer#getName() in tab-complete paths, avoiding repeated Paper 1.21 Failed to convert json to nbt / MalformedJsonException console errors on malformed legacy playerdata.
  • Setup wand text key fallback: fixed wand name/lore rendering when message bundles store those entries under setup.usage.*; setup wand now resolves localized text instead of showing raw key strings.
  • Selection wireframe truncation under tight budgets: fixed abrupt edge cutoffs in large selections when particle limits are reached.
  • DocumentStore initialization order: DocumentStoreFactory.create() now runs before TeamManager instantiation in onEnable(), so TeamManager receives a valid store reference instead of null (which caused silent team data loss).
  • Scoreboard DataConverter spam on Paper 26.1+: replaced remaining OfflinePlayer#getName() calls in the scoreboard timer and result name resolution with safeOfflineName() that reads the player profile via reflection, avoiding Failed to convert json to nbt console errors from malformed legacy playerdata.
  • SimpleScore sidebar reclamation during races: the scoreboard timer now periodically re-hides SimpleScore (every ~2 seconds) during active races and practice sessions, preventing the external sidebar from overwriting the BoatRacing race display mid-session.
  • leavePractice() vehicle cleanup: changed from per-player cleanupRaceVehicleForPlayer() to full cleanupRaceVehicles() for consistency.
  • Removed unused {track} placeholder from race.practice.left message call in leavePractice().
  • Runtime JDBC driver loading: SQLite and MySQL drivers are no longer shaded into the JAR. On first startup, the plugin downloads the required JDBC JARs (sqlite-jdbc, mysql-connector-j, slf4j-api, slf4j-simple) from Maven Central with SHA-256 checksum verification and caches them in plugins/BoatRacing/lib/. If the libs are unavailable (no internet, download failure, checksum mismatch) the plugin falls back gracefully to YAML mode. This keeps the plugin JAR at ~675 KB instead of ~18 MB.
  • Practice forfeit no longer shows results header: forfeit() in practice mode now calls stopRace(false) instead of checkAllFinished()stopRace(true), skipping the Results:/DNF display since there is no competitive outcome for a forfeited practice run.
  • SQL injection hardening in JdbcDocumentStore: the database.table config value is now sanitized to [A-Za-z0-9_] before use in DDL statements, preventing injection through the table name.
  • Ghost collision team name bounds: UUID substring extraction for the no-collision team name now uses Math.min(9, uuidStr.length()) to guard against edge cases.
  • Checkpoint/finish line fast-crossing detection: tickPlayer() now uses ray-AABB segment intersection to detect when a boat passes through a checkpoint or finish region between movement ticks, preventing missed crossings at high boat speeds (ice boats, speed boosts).
  • Countdown cancellation on practice leave: clearCountdownLock() now cancels the scheduled countdown timer tasks, so leaving practice during pre-start lights no longer allows the countdown to continue and start a race.
  • Hardcoded usage message removed: the practice leave usage text now uses the race.usage.practice-leave message key across all language bundles.
  • SimpleScore sidebar flickering: the scoreboard timer now re-hides SimpleScore immediately on the first tick instead of waiting 2 seconds, preventing brief sidebar takeover at race/practice start.

Stats Persistence

  • stats.yml (competitive aggregate) stores playerWins.
  • stats.yml (competitive aggregate) stores teamWins.
  • stats.yml (competitive aggregate) stores playerPositions.
  • stats.yml (competitive aggregate) stores playerBestRace (global per player).
  • stats.yml (competitive aggregate) stores playerBestLap (global per player).
  • stats.yml (competitive aggregate) stores playerBestRaceByTrack (per player and track).
  • stats.yml (competitive aggregate) stores playerBestLapByTrack (per player and track).
  • stats.yml (competitive aggregate) stores playerBestRaceByTrackLaps (per player, track, and lap count).
  • stats.yml (competitive aggregate) stores playerBestLapByTrackLaps (per player, track, and lap-context).
  • practice-stats.yml (practice telemetry) remains separate and stores run/lap/sector best/last per player and track.

Docs

  • Added 1.1.6 release notes and QA coverage in README, CHANGELOG, and CHECKLIST (including checkpoint editor, pitstops GUI checks, forfeit, ghost replay, and DocumentStore features).
  • Removed 26.1 snapshot warning from README (26.2 is now fully supported).
1.1.5Релиз26.1, 26.1.1-rc-1, 26.1.1 · 5 апреля 2026 г.

Changelog

1.1.5 — 06/04/2026

Added

  • Solo practice mode command: added /boatracing race practice <track> to start a one-player practice race on a ready track without requiring the minimum race player threshold.
  • Player stats command: added /boatracing stats [player] to show competitive position counts by place (showing only non-zero places) and practice snapshots (best/last run/lap/sectors) for self or target player.
  • Practice permission node: added boatracing.race.practice with default true, so servers can grant/restrict solo practice independently from race-admin permissions.
  • Stats permission node: added boatracing.stats with default true, so servers can grant/restrict stats access independently.
  • Stats-others permission node: added boatracing.stats.others with default true, so servers can separately control viewing other players via /boatracing stats <player>.
  • Map-vote open permission node: added boatracing.race.voteopen with default op, so opening map votes can be granted/restricted independently from race start/stop management.
  • Admin language switch command: added /boatracing admin language <code> to change the active plugin language at runtime.
  • Admin language permission node: added boatracing.admin.language with default op, so language switching can be delegated without full admin management access.
  • Persistent practice telemetry: added practice-stats.yml storing per-player/per-track practice metrics (best/last run, best/last lap, best/last sector split).
  • Practice placeholders: added %boatracing_player_practice_*% placeholders (current-track and <track> token variants) and %boatracing_track_practice_running_<track>% for practice state displays.
  • Practice placeholder compatibility alias: added %boatracing_track_practicerunning_<track>% as alias for track practice-running state.
  • Swedish language bundle: added bundled messages_sv.yml as an unofficial community translation (sv) with full message coverage and preserved placeholders/color codes.

Changed

  • Same-track race/practice locking during countdown: a track now stays busy while practice countdown is active, preventing race open/start/force on that same track until practice ends (other tracks remain independent).
  • Practice chat scope: practice countdown/split/lap/result updates are now private to the practicing player instead of global race-style broadcasts.
  • Localized practice marker in sidebar: when solo practice is active, the race sidebar now renders a language-aware label from race.scoreboard.practice-label (for example PRACTICE/PRÁCTICA).
  • Practice lobby return parity: solo practice now preserves pre-practice location context so finish flow uses the same lobby/back UX (/boatracing race back window + hint) as standard race finish/cancel.
  • Admin Tracks GUI interaction model: track items now support right-click rename (left-click load, shift-right-click delete), and the lore now shows all three actions in bundled languages.
  • Map vote flow for mixed clients: /boatracing race voteopen now supports opening all saved tracks (all or no explicit track list), broadcasts a plain vote command hint (/{label} race vote <track>) alongside clickable UI, and auto-opens registration on the voted winner when possible.
  • Map vote command syntax and tab-complete: admin usage/help and tab suggestions now include voteopen [all|<track1> <track2> ...] [seconds] with all/* support.
  • Runtime language switching flow: changing language through /boatracing admin language <code> now persists into config.yml and reloads message bundles immediately (no separate reload command required by the user).
  • Admin language command alias cleanup: removed /boatracing admin lang <code>; only /boatracing admin language <code> is now accepted and suggested.
  • Shade packaging metadata handling: Maven shade config now filters duplicate META-INF manifest/signature files, removing noisy overlap warnings during package builds.

Fixed

  • Track record placeholders not refreshing after improved times: %boatracing_track_best_*_<track>% and %boatracing_track_top_1..3_*_<track>% now prefer live race-session data (or track file data) instead of stale in-memory selected-track data, so better race times update correctly.
  • Current-track best placeholders consistency: %boatracing_track_best_player% and %boatracing_track_best_time% now resolve through the same track-token path to avoid stale values when races run in separate track sessions.
  • Map-vote fallback visibility: when winner auto-open fails, the race.vote.next-step hint is no longer broadcast to all players; it is now sent only to vote-managing users (and console).
  • Localized track readiness requirements: race.track-not-ready requirement details are now resolved through race.requirements.* keys across all bundled locales, avoiding mixed-language output.
  • Community locale wording regressions: restored expected phrasing for setup.laps-set (FR/PL), restored PT-PT admin tracks help wording, and replaced leaked BoatType tokens with localized labels in RU (тип лодки) and zh_CN (船只类型) admin setboat help/usage lines.
  • Stats chat readability: practice stats output now suppresses empty sector noise (e.g. 0:00.000 entries), and unsaved practice tracks use localized stats.track-unsaved-label names across bundled locales.
1.1.4Релиз26.1, 26.1.1-rc-1, 26.1.1 · 4 апреля 2026 г.

Changelog

1.1.4 — 04/04/2026

Added

  • Track best-record placeholders by token: %boatracing_track_best_player_<track>%, %boatracing_track_best_time_<track>%, and %boatracing_track_best_time_ms_<track>% for per-track record labels in static scoreboards/holograms.
  • Track top-3 placeholders by token (NEW 1.1.4): %boatracing_track_top_1_*_<track>%, %boatracing_track_top_2_*_<track>%, and %boatracing_track_top_3_*_<track>% (player, time, time_ms) for podium/leaderboard layouts per track.
  • Snapshot channel for Paper 26.1 validation: introduced the first 26.1 snapshot build named snapshot-26.1-gui-fallback-01.
  • Snapshot warning docs/badges: README now includes explicit WARNING snapshot and implementation/risk badges for this build stream.
  • Configurable minimum racers to start: added racing.min-players-to-start as a global race-start threshold, with per-track override support via tracks/<name>.yml under racing.min-players-to-start.
  • Localized minimum-player warning: added race.not-enough-players to bundled language files to report required/current participant counts when start is blocked.

Fixed

  • Scoreboard tie-break by checkpoint arrival order: when racers are on the same lap and same checkpoint count, the one who reached that checkpoint first stays ahead. This avoids position swaps on equal checkpoint entry.
  • Setup wizard open-registration fallback command: if no named track is selected yet, wizard Done now uses /boatracing race open unsaved instead of an invalid placeholder token (/boatracing race open <track>), preventing track not found <track>.
  • Paper 26.1 Anvil close-event compatibility: added a custom AnvilGUI version-matcher path plus Wrapper26_R1_Fixed fallback implementation that probes compatible handleInventoryCloseEvent signatures and applies a safe close-container fallback when upstream signature assumptions fail.
  • Race start gating consistency: start, force, admin race GUI start, and registration timeout auto-start now consistently enforce the configured minimum-player threshold before race launch.

Changed

  • Project versioning for pre-release: project version moved to 1.1.4-26.1-SNAPSHOT in pom.xml.
  • Stable tag status: stable 1.1.4 publication is postponed due to the Paper 26.1 GUI/Anvil compatibility issue; the planned 1.1.4 feature set is delivered in this snapshot channel.

Docs

  • Minimum-player start docs: README/CHECKLIST now document racing.min-players-to-start, per-track override behavior, and validation expectations for blocked starts.
  • Placeholder docs for 1.1.4: README placeholder table now marks %boatracing_track_best_*_<track>% and %boatracing_track_top_1..3_*_<track>% as NEW (1.1.4), and CHECKLIST includes explicit QA checks for these placeholders.

Known Issues

  • GUI risk on evolving 26.1 builds: because this snapshot relies on reflective compatibility over unstable internals, some GUI/Anvil flows can still fail on certain Paper 26.1 dev builds or non-Paper forks.
1.1.4-26.1-SNAPSHOTБета26.1, 26.1.1-rc-1, 26.1.1 · 2 апреля 2026 г.

Changelog

1.1.4-26.1-SNAPSHOT (snapshot-26.1-gui-fallback-01) — 2026-04-02

Added

  • Snapshot channel for Paper 26.1 validation: introduced the first 26.1 snapshot build named snapshot-26.1-gui-fallback-01.
  • Snapshot warning docs/badges: README now includes explicit WARNING snapshot and implementation/risk badges for this build stream.
  • Configurable minimum racers to start: added racing.min-players-to-start as a global race-start threshold, with per-track override support via tracks/<name>.yml under racing.min-players-to-start.
  • Localized minimum-player warning: added race.not-enough-players to bundled language files to report required/current participant counts when start is blocked.

Changed

  • Project versioning for pre-release: project version moved to 1.1.4-26.1-SNAPSHOT in pom.xml.
  • Stable tag status: stable 1.1.4 publication is postponed due to the Paper 26.1 GUI/Anvil compatibility issue; the planned 1.1.4 feature set is delivered in this snapshot channel.

Fixed

  • Paper 26.1 Anvil close-event compatibility: added a custom AnvilGUI version-matcher path plus Wrapper26_R1_Fixed fallback implementation that probes compatible handleInventoryCloseEvent signatures and applies a safe close-container fallback when upstream signature assumptions fail.
  • Race start gating consistency: start, force, admin race GUI start, and registration timeout auto-start now consistently enforce the configured minimum-player threshold before race launch.

Docs

  • Minimum-player start docs: README/CHECKLIST now document racing.min-players-to-start, per-track override behavior, and validation expectations for blocked starts.

Known Issues

  • GUI risk on evolving 26.1 builds: because this snapshot relies on reflective compatibility over unstable internals, some GUI/Anvil flows can still fail on certain Paper 26.1 dev builds or non-Paper forks.
1.1.3Релиз1.21.11-rc2, 1.21.11-rc3, 1.21.11 · 30 марта 2026 г.

Changelog

1.1.3 — 2026-03-30

Added

  • Parallel race sessions by track: race lifecycle commands now operate per track session, allowing multiple tracks to run registration/races at the same time.
  • Map vote commands: added /boatracing race voteopen <track1> <track2> [seconds], /boatracing race vote <track>, /boatracing race voteui, /boatracing race votestatus, and /boatracing race voteclose.
  • Track-scoped race placeholders: %boatracing_track_race_running_<track>%, %boatracing_track_race_registering_<track>%, and %boatracing_track_race_status_<track>% now resolve against the requested track session.

Fixed

  • Selected boat variant persistence on spawn: race boats now re-apply the selected boat/raft variant right after spawn and on delayed retries, fixing cases where a chosen variant (for example DARK_OAK) appeared as default OAK.
  • No dismount during countdown/race: racers can no longer manually exit boats/rafts during the 5-light countdown or while the race is running.
  • Vote-open UX prompt: map-vote start now includes a clickable chat action to open vote UI (/boatracing race voteui) instead of only a typed command hint.
  • Reward command parsing compatibility: reward distribution now supports both commands (list) and legacy command (single string), with safer fallback behavior for missing per-position keys (including position 1).

Docs

  • Track placeholder docs: README now documents track-scoped placeholders, compatibility aliases, and per-track session evaluation behavior.
  • Race/map-vote docs: README now includes the new map vote commands (including voteui) and multi-track race behavior notes.
  • QA additions for 1.1.3: CHECKLIST now includes explicit validation steps for track-scoped placeholders and selected boat variant spawn reliability.
  • Rewards schema guidance: README/CHECKLIST now document reward command compatibility and recommend explicit commands: [] in each position block.
1.1.2Релиз1.21.11-rc2, 1.21.11-rc3, 1.21.11 · 29 марта 2026 г.

Changelog

1.1.2 — 2026-03-29

Added

  • PlaceholderAPI integration: BoatRacing now registers %boatracing_*% placeholders for holograms/scoreboards.
  • Persistent aggregate stats: new stats.yml storage for player wins, team wins, best race, and best lap values used by placeholders.
  • Race back command: added /boatracing race back so players can manually return to their saved pre-lobby location after race flows.
  • Post-race lobby return UX: after a race ends or is cancelled, participants are teleported to the configured race lobby, receive a clickable back shortcut, and have a 3-minute window to return.
  • French language bundle: added bundled messages_fr.yml (community translation) with complete race/setup/team/admin/gui coverage.
  • Additional community language bundles: added bundled messages_es_419.yml, messages_pt_BR.yml, messages_pt_PT.yml, messages_de.yml, messages_it.yml, messages_pl.yml, messages_tr.yml, messages_ja.yml, and messages_ko.yml, expanding built-in language coverage.

Changed

  • Setup Wizard compact mode: wizard prompts were shortened and reorganized by step to reduce chat text while keeping actionable buttons.
  • Registration announce source: registration announce text is now language-specific in messages_<lang>.yml (race.registration.announce) instead of config.yml.
  • Registration announce placeholders: race.registration.announce now consistently supports {track}, {laps}, {cmd}, {label} across bundled language files.
  • Lobby return flow: pre-lobby locations are preserved during race start, and race-back return entries now expire automatically after 3 minutes (in-memory only).
  • Race help and tab-complete: race back is now included in help output and tab suggestions for players with boatracing.race.back.
  • Language bundle loading: language selection now supports bundled and custom messages_<lang>.yml files from the plugin folder, with safe fallback to English.
  • Translation status headers: bundled language headers now consistently mark messages_en.yml and messages_es.yml as official translations, and all other bundled languages as unofficial community translations.
  • Chinese locale split: kept messages_zh_TW.yml for Taiwan Traditional Chinese and added messages_zh_CN.yml for Mainland Simplified Chinese.
  • Race back window configurability: the /boatracing race back availability window is now configurable with racing.lobby.back-window-seconds.

Fixed

  • Build break in TeamManager: fixed malformed package declaration in TeamManager.java that caused compilation failure.
  • Race boat entity cleanup: race-spawned boats/rafts are now tracked and removed deterministically on finish/cancel/reset, preventing leftover vehicle entities in the world.
  • Race back expiry notification: players now receive an automatic message when the back window expires, instead of only seeing it after manually running /boatracing race back.

Docs

  • Placeholder reference added: README now documents available %boatracing_*% placeholders and team lookup formats.
  • Lobby-back docs updated: README and QA checklist now document the clickable race back flow and 3-minute return window as part of 1.1.2.
1.1.1Релиз1.21.11-rc2, 1.21.11-rc3, 1.21.11 · 13 марта 2026 г.

Changelog

1.1.1 — 2026-03-13

Added

  • Registration lobby mechanic (optional): new racing.lobby.* config block to send registered players to a lobby location while registration is open, with optional return to their previous location on leave/cancel.
  • Lobby setup command: added /boatracing setup setlobby to save the admin's current position as the registration lobby and enable it instantly.
  • Lobby i18n messages: added localized feedback when players are teleported to the race lobby and when they are returned.
  • SimpleScore integration hook: when SimpleScore is present, BoatRacing now uses its viewer hide/show flow during races to avoid sidebar ownership conflicts and restore the external scoreboard cleanly after stop/cancel.

Fixed

  • Race track selection flow for active track: race open/join/leave/force/start/stop/status no longer force a disk reload when the requested track is already the active one (notably unsaved), preventing stale-state issues.
  • Track reload consistency: TrackConfig.load() now clears all in-memory collections (customStartSlots, bestTimes, and others) before reading from disk.
  • Registration timer race-loop bug: fixed a state bug where race open timer callbacks could survive manual start/force/stop flows and re-trigger race starts (infinite restart behavior). Registration sessions are now invalidated/cancelled atomically.
  • Manual start stale-callback guard: /boatracing race start <track> now closes the registration window first to prevent old registration callbacks from restarting/overlapping race state.
  • External sidebar handoff reliability: improved race HUD/sidebar cleanup so external sidebar plugins (notably SimpleScore and TAB) recover cleanly after race stop/cancel without requiring relog.

Changed

  • Setup click actions UX: setup wizard and admin setup tips now use suggest-in-chat behavior for commands requiring arguments, so players can tab-complete before executing.
  • Compatibility matrix clarified: this plugin jar is intended for Bukkit-family servers (CraftBukkit/Spigot/Paper/Purpur) and now includes Folia-compatible scheduling paths.

Docs

Комментарии

Загружаем…