MegaBlock Survivors Leaderboard
MegaBlock Survivors records every non-cheated completed run to a persistent leaderboard stored in plugins/MegaBlockSurvivors/leaderboard.yml. Cheated runs (any match where /mbs cheat was used) are explicitly excluded.
Categories
Each entry carries a game mode and a difficulty tag, so the leaderboard is split into 6 independent buckets:
| Mode | Difficulty |
|---|---|
| Challenge | Easy |
| Challenge | Medium |
| Challenge | Hard |
| Endless | Easy |
| Endless | Medium |
| Endless | Hard |
Buckets are ranked independently, and each bucket holds up to 100 entries on disk. The top 10 are surfaced to players.
Ranking Rules
| Mode | Primary sort | Tiebreaker |
|---|---|---|
| Challenge | Fastest completion time (ascending) | Newer entries win ties |
| Endless | Highest wave reached (descending) | Time survived (longer wins), then timestamp |
This split makes sense because Challenge mode has a fixed endpoint (the final boss), so "fastest completion" is the obvious skill metric. Endless has no end, so "highest wave reached" is the meaningful measure.
In-World Hologram
A single TextDisplay hologram is spawned in the mbs_spawn lobby world (at world coordinates ~4.5, 67, -14.5). The hologram is bottom-anchored -- the bottom edge of the text always sits at the anchor Y so adding new sections grows the display upward rather than downward through the floor.
The hologram renders up to six sections (Challenge x {Easy, Medium, Hard} followed by Endless x {Easy, Medium, Hard}). Sections with zero entries are silently skipped so a fresh server doesn't display six empty buckets. If every bucket is empty, a single "no highscores yet" line is shown instead.
The hologram is respawned automatically:
- On plugin enable / reload.
- After every new leaderboard entry is recorded.
- When the anchor chunk in
mbs_spawnreloads (Paper removes non-persistent display entities on chunk unload, so the listener re-spawns the hologram every time the lobby chunk comes back).
If mbs_spawn does not exist on disk, the hologram is silently skipped and a WARN is logged.
Per-Run Chat Display
When a non-cheated run ends, the player sees the top 10 of their run's bucket as a chat block. The player's own row is highlighted (> #N). If the player's rank is outside the top 10, an ellipsis row is shown followed by their actual rank line.
Cheated victories show a "Leaderboard not updated (cheating detected)" notice instead.
Entry Schema
Each entry tracks:
| Field | Description |
|---|---|
playerName | The Bukkit display name at run-end. |
playerUUID | The player's UUID. |
timeSeconds | Total duration of the run in seconds. |
kills | Total non-boss kills. |
level | Player's final level. |
highestWave | Highest wave reached. Primary stat for Endless. |
gameMode | CHALLENGE or ENDLESS. |
difficulty | EASY, MEDIUM, or HARD. |
timestamp | Epoch millis when the run ended. |
Legacy entries from before this split are auto-tagged with Challenge / Medium on read so old leaderboards continue to render.
Clearing the Leaderboard
There is no in-game command to wipe the leaderboard. To reset, stop the server and delete plugins/MegaBlockSurvivors/leaderboard.yml.