
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
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.Hsystem (Year.Drop.Hotfix). Plugin version now matches the Minecraft release it targets. - Per-track broadcast mode:
racing.broadcast-modeacceptsglobalorracers, 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 clearlobbyto 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.
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 voteopenwith 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
- Download and place in
plugins/ /boatracing teams→ create a team/boatracing setup wizard→ configure a track (8 steps)/boatracing race open <track>→ open registration/boatracing race join <track>→ players join/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.Hsystem (Year.Drop.Hotfix). - Per-track broadcast mode:
racing.broadcast-modeacceptsglobalorracers, 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.adminorboatracing.setup. - Per-track registration time:
registration-secondscan now be set per track via/boatracing setup setregtime <seconds>. Configurable in the setup wizard as step 8/8. Displayed insetup show. Reported by @supershootstudions-lgtm in #6. - Clearlobby command:
/boatracing setup clearlobbydisables the registration lobby for the current track. - Debug logging levels: set
debuginconfig.ymlto"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.Hformat natively. Errors always logged to console. - Wizard LIGHTS step:
descriptionandhintnow 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.no→setup.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-participantsandrestartedkeys 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. Permissionboatracing.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 (JdbcDocumentStorewith SQLite dialect), and remote MySQL (JdbcDocumentStorewith MySQL dialect). Backend selected viaconfig.yml→database.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
databaseblock inconfig.ymlwith mode (YAML/SQLITE/MYSQL), table name, SQLite file path, and MySQL connection settings. - Practice ghost config section: new
practice.ghostblock inconfig.ymlwith enable toggle, sample/playback tick rates, minimum distance filter, sample cap, and name display option. - Practice leave command:
/boatracing race practice leave <track>(andexitalias) to cleanly exit a practice session. Also handles disconnect/quit/kick viaPlayerQuitEventandPlayerKickEventhandlers. - AnvilGUI 26.1/26.2 compatibility: switched from upstream
net.wesjd:anvilgui:1.10.12-SNAPSHOTto thefeeeedox/AnvilGUIfork via JitPack. AddedWrapper26_R1_LocalShimas compatibility fallback for 26.1 close-event handling. ExtendedVersionMatcherwith 1.19.x mappings,26.1.2, and26.2/26.2.1→26_R2entries, loading nativeWrapper26_R2from the fork on 26.2. - Race result forfeited message: added
race.results.forfeitedkey 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 usesraceAudience()(participants + admins) instead of globalbroadcast()for the{player} forfeitedmessage in competitive mode. Practice mode forfeits show a privateYou left the practice sessionmessage only to the runner. - TeamManager, StatsManager, PracticeStatsManager refactored: all three managers now read/write through
DocumentStoreinstead of directFile+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.ghostblocks. - Race state marking:
RaceStatenow includes aforfeitedflag.forfeit()marks the state instead of removing it, socheckAllFinished()triggers correctly andannounceResults()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. setlapsruntime 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.setpitstopsruntime mismatch: fixed equivalent stale-value behavior for per-trackmandatory-pitstopsafter/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 onOfflinePlayer#getName()in tab-complete paths, avoiding repeated Paper 1.21Failed to convert json to nbt/MalformedJsonExceptionconsole 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 beforeTeamManagerinstantiation inonEnable(), 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 withsafeOfflineName()that reads the player profile via reflection, avoidingFailed to convert json to nbtconsole 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-playercleanupRaceVehicleForPlayer()to fullcleanupRaceVehicles()for consistency.- Removed unused
{track}placeholder fromrace.practice.leftmessage call inleavePractice(). - 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 inplugins/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 callsstopRace(false)instead ofcheckAllFinished()→stopRace(true), skipping theResults:/DNF display since there is no competitive outcome for a forfeited practice run. - SQL injection hardening in JdbcDocumentStore: the
database.tableconfig 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-leavemessage 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) storesplayerWins.stats.yml(competitive aggregate) storesteamWins.stats.yml(competitive aggregate) storesplayerPositions.stats.yml(competitive aggregate) storesplayerBestRace(global per player).stats.yml(competitive aggregate) storesplayerBestLap(global per player).stats.yml(competitive aggregate) storesplayerBestRaceByTrack(per player and track).stats.yml(competitive aggregate) storesplayerBestLapByTrack(per player and track).stats.yml(competitive aggregate) storesplayerBestRaceByTrackLaps(per player, track, and lap count).stats.yml(competitive aggregate) storesplayerBestLapByTrackLaps(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.practicewith defaulttrue, so servers can grant/restrict solo practice independently from race-admin permissions. - Stats permission node: added
boatracing.statswith defaulttrue, so servers can grant/restrict stats access independently. - Stats-others permission node: added
boatracing.stats.otherswith defaulttrue, so servers can separately control viewing other players via/boatracing stats <player>. - Map-vote open permission node: added
boatracing.race.voteopenwith defaultop, 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.languagewith defaultop, so language switching can be delegated without full admin management access. - Persistent practice telemetry: added
practice-stats.ymlstoring 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.ymlas 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 examplePRACTICE/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 backwindow + 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 voteopennow supports opening all saved tracks (allor 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]withall/*support. - Runtime language switching flow: changing language through
/boatracing admin language <code>now persists intoconfig.ymland 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-INFmanifest/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-stephint 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-readyrequirement details are now resolved throughrace.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 leakedBoatTypetokens with localized labels in RU (тип лодки) and zh_CN (船只类型) adminsetboathelp/usage lines. - Stats chat readability: practice stats output now suppresses empty sector noise (e.g.
0:00.000entries), and unsaved practice tracks use localizedstats.track-unsaved-labelnames 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 snapshotand implementation/risk badges for this build stream. - Configurable minimum racers to start: added
racing.min-players-to-startas a global race-start threshold, with per-track override support viatracks/<name>.ymlunderracing.min-players-to-start. - Localized minimum-player warning: added
race.not-enough-playersto 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 unsavedinstead of an invalid placeholder token (/boatracing race open <track>), preventingtrack not found <track>. - Paper 26.1 Anvil close-event compatibility: added a custom AnvilGUI version-matcher path plus
Wrapper26_R1_Fixedfallback implementation that probes compatiblehandleInventoryCloseEventsignatures 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-SNAPSHOTinpom.xml. - Stable tag status: stable
1.1.4publication 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>%asNEW (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 snapshotand implementation/risk badges for this build stream. - Configurable minimum racers to start: added
racing.min-players-to-startas a global race-start threshold, with per-track override support viatracks/<name>.ymlunderracing.min-players-to-start. - Localized minimum-player warning: added
race.not-enough-playersto 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-SNAPSHOTinpom.xml. - Stable tag status: stable
1.1.4publication 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_Fixedfallback implementation that probes compatiblehandleInventoryCloseEventsignatures 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 defaultOAK. - 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 legacycommand(single string), with safer fallback behavior for missing per-position keys (including position1).
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.ymlstorage for player wins, team wins, best race, and best lap values used by placeholders. - Race back command: added
/boatracing race backso 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, andmessages_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 ofconfig.yml. - Registration announce placeholders:
race.registration.announcenow 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 backis now included in help output and tab suggestions for players withboatracing.race.back. - Language bundle loading: language selection now supports bundled and custom
messages_<lang>.ymlfiles from the plugin folder, with safe fallback to English. - Translation status headers: bundled language headers now consistently mark
messages_en.ymlandmessages_es.ymlas official translations, and all other bundled languages as unofficial community translations. - Chinese locale split: kept
messages_zh_TW.ymlfor Taiwan Traditional Chinese and addedmessages_zh_CN.ymlfor Mainland Simplified Chinese. - Race back window configurability: the
/boatracing race backavailability window is now configurable withracing.lobby.back-window-seconds.
Fixed
- Build break in TeamManager: fixed malformed package declaration in
TeamManager.javathat 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 backflow 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 setlobbyto 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/statusno longer force a disk reload when the requested track is already the active one (notablyunsaved), 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 opentimer callbacks could survive manualstart/force/stopflows 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
- Platform scope documented: README/CHECKLIST now explicitly state that Sponge requires a separate platform port and that Velocity/BungeeCord (proxy layer) cannot run gameplay logic from this plugin jar.
- Explicit SimpleScore compatibility note: docs now explicitly list compatibility with SimpleScore (GitHub: https://github.com/RuiPereiraDev/SimpleScore, Modrinth: https://modrinth.com/plugin/simplescore).
- Explicit TAB compatibility note: docs now explicitly list compatibility with TAB (GitHub: https://github.com/NEZNAMY/TAB, Modrinth: https://modrinth.com/plugin/tab-was-taken).
Комментарии
Загружаем…