Content generated with AI — it may contain mistakes.

Competitive

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

TierTableReset by a rotation
Seasonpractice_player_season_statsEffectively yes — the new season starts with no rows
Lifetimepractice_player_lifetime_statsNo, ever
Match historypractice_match_historyNo; 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

SettingDefaultWhat it does
season.restart-after-rotationtrueRestart the server once the rotation finishes
season.restart-delay-seconds15The 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.

Whether the server comes back is your supervisor's job

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