Seasons
Rotating the ladder in two database writes, what survives it, and the restart that follows.
A season is a numbered period every stat row is stamped with. Rotating one closes the current season and opens the next; nothing is copied, uploaded or deleted, so it finishes in milliseconds no matter how many players the server has.
The three tiers of stats
| Tier | Table | Reset by a rotation |
|---|---|---|
| Season | practice_player_season_stats | Effectively yes — the new season starts with no rows |
| Lifetime | practice_player_lifetime_stats | No, ever |
| Match history | practice_match_history | No; rows carry the season they were played in |
Nothing is destroyed by a rotation. The previous season's rows stay in the table under their season number, which is what lets a season selector show old standings.
Rotating
/epc → Data Management → New Season, then confirm. There is no command form.
Lock the queue
Matchmaking is held for the length of the two writes.
Close and open
The active season row is marked closed with an end timestamp; the next number is written as the new active season; the settings row's mirror of the number is updated.
Switch everybody over
Online players start writing into the new season immediately, without reconnecting.
Cancel boosts
Every personal and global ELO boost is cancelled — a boost belongs to the season that granted it.
Tell the web
Best-effort. Seasons are identified by number, so a late or retried notification converges to the same result.
The restart
| Setting | Default | What it does |
|---|---|---|
season.restart-after-rotation | true | Restart the server once the rotation finishes |
season.restart-delay-seconds | 15 | The countdown players are warned with |
With it on, the plugin drains the web outbox up to three times, warns
everybody, waits out the countdown, and calls Bukkit.spigot().restart() — falling back to a plain
shutdown if that is unavailable.
The queue stays locked through the countdown on purpose: reopening it would let somebody start a match the restart is about to interrupt.
restart() only relaunches the process when restart-script in spigot.yml points at a working
script. Otherwise it stops cleanly, and something outside Minecraft has to bring it back — which is the
right arrangement for a containerised server anyway.
With restart-after-rotation off, the queue reopens as soon as the two writes land and play continues
on the new season.
The progress bar
season.progress-bossbar in config.yml is the bar shown while a rotation runs, with %phase% and
%percent%.
Repair on boot
The plugin resolves the active season on every start and quietly repairs the two states that should not happen:
- No season at all — a fresh install gets season 1.
- Several marked active — a rotation interrupted mid-write. The highest number wins and the rest are closed, with a warning naming each.
- Every season closed — a rotation that died between closing and opening. The newest is reopened rather than a new number invented.
What a rotation does not do
It does not clear match history, it does not touch kit loadouts, it does not reset arenas, and it does not upload anything synchronously. If you want the previous season's stats gone rather than archived, that is Data Management → Clear all stats, which is a different and irreversible action.
Something missing on this page? Tell us on Discord