Tracks races played, wins, total laps, and best times per player and per race, recorded off the main thread after each finish. Backed by a StatsStorage interface with two implementations: the default YamlStatsStorage (stats.yml, zero setup) and MySqlStatsStorage (HikariCP-pooled, auto-creates its tables, configured via config.yml). MySQL init failures fall back to YAML rather than blocking plugin startup. Adds /boatparty stats and /boatparty top commands. Bundles and relocates HikariCP + MySQL Connector/J via shadow (bumped to 9.0.2, the prior 8.3.5 couldn't shade Java 25 class files). Co-Authored-By: Claude Sonnet 5 <[email protected]>
BoatParty
An ice-and-boat lap racing minigame for PaperMC, targeting the latest Minecraft server API (Paper 26.2).
How it works
Build an ice track, place checkpoints along it, and race other players in boats for the fastest lap times over a configurable number of laps.
Commands (/boatparty, alias /bp)
| Command | Description |
|---|---|
/bp create <name> |
Create a new race |
/bp delete <name> |
Delete a race |
/bp setlobby <name> |
Set the waiting-area location (your current position) |
/bp setstart <name> |
Set the race start/grid location |
/bp addcheckpoint <name> |
Append a checkpoint at your current position |
/bp removecheckpoint <name> |
Remove the last checkpoint |
/bp setlaps <name> <n> |
Set number of laps |
/bp setminplayers <name> <n> |
Minimum players required to auto-start the countdown |
/bp setcountdown <name> <seconds> |
Countdown length before a race begins |
/bp setradius <name> <blocks> |
Checkpoint trigger radius |
/bp join <name> / /bp leave |
Join or leave a race |
/bp start <name> / /bp stop <name> |
Force-start or stop a race (admin) |
/bp list / /bp info <name> |
List races / show race details |
/bp stats [player] |
Show races played, wins, total laps, and best time |
/bp top <name> [limit] |
Leaderboard of best times for a race (default top 10) |
The last checkpoint added also serves as the finish line — crossing it completes a lap.
Permissions
boatparty.admin(default: op) — configure and control racesboatparty.play(default: true) — join and play races
Stat storage
Every race finish records the player's placement, laps, and time. Storage is
configured in config.yml:
storage:
type: yaml # or "mysql"
mysql:
host: localhost
port: 3306
database: boatparty
username: root
password: ""
use-ssl: false
table-prefix: "boatparty_"
yaml (default) writes to stats.yml in the plugin's data folder — no setup required.
mysql pools connections via HikariCP and creates its players and race_times tables
automatically on first startup. All stat reads/writes happen off the main thread. If the
MySQL connection fails to initialize, the plugin logs an error and falls back to YAML
storage rather than failing to start.
Building
./gradlew build
The compiled plugin jar is produced at build/libs/BoatParty-<version>.jar. It bundles
and relocates HikariCP and the MySQL Connector/J driver, so no extra dependency jars are
needed on the server.
Requirements
- Java 21+ to run Gradle; the plugin itself compiles against and targets Java 25 (required by the Paper 26.2 API)
- PaperMC (latest, built against Paper API 26.2)