DonutScoreboard
2.0This plugin creates a scoreboard easy adjustment and configuration exactly like the famous server "DonutSMP" that owned but "DrDonutt"
- Tested MC versions
- 1.21, 26.1, 26.2, 26.3









Please contact me on Discord if you have any suggestions or edits.

- DonutScoreboard makes a Scoreboard exactly like the famous Server "DonutSMP"
- One jar for everything. The same file works on Bukkit, Spigot, Paper, Purpur, Folia, Leaf and Canvas, and on Velocity, Velocity-CTD, BungeeCord and Waterfall. No separate backend or proxy download.

- Same Design: The scoreboard matches the original DonutSMP layout exactly — same icons, same colors, same gradient title.
- Full Customization: Every single line is editable in config.yml. Use MiniMessage tags, hex codes, gradients, or swap any value with a placeholder.
- Conditional Scoreboards: List as many scoreboards as you want under
scoreboards. They are checked top to bottom and the first matching condition wins — perfect for per-rank or per-world boards. - Group Boards Without a Groups File: A group board is just a condition, like
permission:group.staff. Put it abovedefaultand you are done. - Animations: Define animated text in
animations.ymland drop%animation:name%into any line, with its own frame interval. - Zero Flicker: Lines only update when the content actually changes. Players never see a flash or refresh stutter.
- Folia Ready: Folia uses a native packet renderer, so the board works there without the Bukkit scoreboard API.
- Proxy Sync: A player's
/sbchoice follows them across your whole network — the proxy and every backend stay in sync. - Keyall Countdown: A server-wide countdown that resets automatically, with optional commands and feedback when it hits zero.
- Player Toggle: Players show or hide their own board with
/sb enableor/sb disable, with configurable chat, actionbar, title and sound feedback. The choice saves across restarts. - World Control: Disable the scoreboard per world, or use wildcard patterns like
event_*. Moving between worlds is handled automatically. - Automatic Config Migration: Older configs are moved forward to
config-version: 2.0on startup, and the original is kept inbackups/. - PlaceholderAPI & Vault: Any
%placeholder%works inside lines, and Vault economy placeholders are supported when Vault is installed. - Safe Backups:
/dsb export createzips every data file with metadata, and/dsb importrestores it in one command.

Commands
| Command | Permission | Description |
|---|---|---|
/donutscoreboard | Everyone | Shows plugin info and available commands |
/donutscoreboard reload | donutscoreboard.admin | Reloads the configuration file |
/donutscoreboard reset | donutscoreboard.admin | Resets config to defaults and rebuilds all scoreboards |
/donutscoreboard interval <seconds> | donutscoreboard.admin | Sets the scoreboard refresh rate (1-60 seconds) |
/donutscoreboard title edit [text] | donutscoreboard.admin | Changes the scoreboard title |
/donutscoreboard title reset | donutscoreboard.admin | Resets the title to default |
/donutscoreboard line add [text] | donutscoreboard.admin | Adds a new line to the scoreboard |
/donutscoreboard line edit <number> [text] | donutscoreboard.admin | Edits a specific line |
/donutscoreboard line delete <number> | donutscoreboard.admin | Removes a line from the scoreboard |
/donutscoreboard line empty <number> | donutscoreboard.admin | Clears a line (makes it blank) |
/donutscoreboard line reset [number] | donutscoreboard.admin | Resets a line (or all lines) to default |
/donutscoreboard line swap <n> with <n> | donutscoreboard.admin | Swaps two lines |
/donutscoreboard keyall time set <time> | donutscoreboard.admin | Sets the keyall countdown (example: 30m, 1h, 2d) |
/donutscoreboard keyall time reset | donutscoreboard.admin | Resets keyall countdown to max duration |
/donutscoreboard keyall duration <time> | donutscoreboard.admin | Sets the max keyall duration (example: 2h, 3d) |
/donutscoreboard keyall trigger | donutscoreboard.admin | Fires the keyall event immediately |
/donutscoreboard world list | donutscoreboard.admin | Lists all worlds and their status |
/donutscoreboard world disable <world> | donutscoreboard.admin | Disables the scoreboard in a world |
/donutscoreboard world enable <world> | donutscoreboard.admin | Enables the scoreboard in a world |
/donutscoreboard auto-world list | donutscoreboard.admin | Lists auto-disable patterns |
/donutscoreboard auto-world add <pattern> | donutscoreboard.admin | Adds an auto-disable pattern (supports * wildcard) |
/donutscoreboard auto-world remove <pattern> | donutscoreboard.admin | Removes an auto-disable pattern |
/donutscoreboard animation preview <name> | donutscoreboard.admin | Previews the current frame of an animation |
/donutscoreboard animation interval <name> <ticks> | donutscoreboard.admin | Changes an animation's frame interval |
/donutscoreboard animation delete <name> | donutscoreboard.admin | Deletes an animation |
/donutscoreboard style <new|old> | donutscoreboard.admin | Switches between preset scoreboard layouts |
/donutscoreboard scoreboard-numbers <enable|disable> | donutscoreboard.admin | Toggles the side numbers on the scoreboard (Paper 1.20.5+) |
/donutscoreboard board list | donutscoreboard.admin | Lists every configured scoreboard and its condition |
/donutscoreboard condition test <expression> | donutscoreboard.admin | Tests a condition against yourself before you use it |
/donutscoreboard debug | donutscoreboard.admin | Shows config version, renderer, active boards and hooks |
/donutscoreboard export create | donutscoreboard.admin | Creates a full config backup zip |
/donutscoreboard export list | donutscoreboard.admin | Lists all available backup exports |
/donutscoreboard import <filename> | donutscoreboard.admin | Imports a config backup zip |
/donutscoreboard toggle <player> | donutscoreboard.admin | Toggles another player's scoreboard visibility |
/sb | donutscoreboard.toggle | Toggles your scoreboard on or off |
/sb enable | donutscoreboard.toggle | Shows your scoreboard |
/sb disable | donutscoreboard.toggle | Hides your scoreboard |
Permissions
| Permission | Default | Description |
|---|---|---|
donutscoreboard.admin | OP | Full access to all admin commands (grants every child permission below) |
donutscoreboard.view | Everyone | Required to see the scoreboard at all |
donutscoreboard.toggle | Everyone | Access to the /sb toggle command |
donutscoreboard.toggle.others | OP | Access to /dsb toggle <player> to toggle other players |
donutscoreboard.reload | OP | /dsb reload |
donutscoreboard.reset | OP | /dsb reset |
donutscoreboard.interval | OP | /dsb interval |
donutscoreboard.title | OP | /dsb title |
donutscoreboard.line | OP | /dsb line |
donutscoreboard.keyall | OP | /dsb keyall |
donutscoreboard.world | OP | /dsb world |
donutscoreboard.auto-world | OP | /dsb auto-world |
donutscoreboard.animation | OP | /dsb animation |
donutscoreboard.style | OP | /dsb style |
donutscoreboard.board | OP | /dsb board |
donutscoreboard.scoreboard-numbers | OP | /dsb scoreboard-numbers |
donutscoreboard.export | OP | /dsb export |
donutscoreboard.import | OP | /dsb import |

- A folder named
DonutScoreboardis created in yourpluginsfolder automatically. Inside you will find a cleanconfig.ymlfile.
Config.yml
# DonutScoreboard configuration version. Do not edit: older files are migrated
# forward automatically on startup and /dsb reload, with a backup in backups/.
config-version: 2.0
# Print the DSB banner with version, author, platform and download link on startup.
startup-banner: true
# Check Modrinth for a newer release on startup. Silent when offline; never blocks startup.
update-checker: true
enabled: true
update-interval: 1
join-delay: 2
keyall-duration: 3600
date-format: "yyyy-MM-dd"
disabled-worlds: []
auto-disable-worlds: []
placeholders:
"1": "%player_name%"
"money": "%vault_eco_balance_formatted%"
# Scoreboards are checked from top to bottom. The first matching condition wins.
# There is no separate group-scoreboard system. Put group conditions here, for example:
# staff:
# condition: "permission:group.staff || %vault_group% == staff"
# title: "<gradient:#FFD700:#FFA500><bold>Staff</bold></gradient>"
# lines:
# - "<white>Rank <gold>%group%"
# Place a conditional board above `default`, because `default` has an empty condition and always matches.
scoreboards:
default:
condition: ""
title: "<gradient:#007DFC:#00E8FC><bold>DonutSMP</bold></gradient>"
numbers-visible: false
lines:
- " "
- "<#00FF00><bold>$</bold> <white>Money <#00FF00>%money%"
- "<#A503FC>★ <white>Shards <#A503FC>0"
- "<#FF0000>🗡 <white>Kills <#FF0000>%kills%"
- "<#FC7703>☠ <white>Deaths <#FC7703>%deaths%"
- "<#00A6FF>⌛ <white>Keyall <#00A6FF>%keyall%"
- "<#FFE600>⌚ <white>Playtime <#FFE600>%playtime%"
- "<#00A6FF>🪓 <white>Team <#00A6FF>%group%"
- " "
- "<gray>NA East <gray>(<#00A6FF>%ping%ms<gray>)"
toggle:
command: "sb"
command-enabled: true
permission: "donutscoreboard.toggle"
default-on: true
args:
enable: "enable"
disable: "disable"
enable:
chat-enabled: true
chat-message: "<green>You have enabled scoreboard."
actionbar-enabled: true
actionbar-message: "<green>You have enabled scoreboard."
title-enabled: false
title-message: "<green>Scoreboard"
subtitle-message: "<gray>has been enabled"
title-fade-in: 10
title-stay: 40
title-fade-out: 10
sound-enabled: true
sound: "ENTITY_EXPERIENCE_ORB_PICKUP"
disable:
chat-enabled: true
chat-message: "<red>You have disabled scoreboard."
actionbar-enabled: true
actionbar-message: "<red>You have disabled scoreboard."
title-enabled: false
title-message: "<red>Scoreboard"
subtitle-message: "<gray>has been disabled"
title-fade-in: 10
title-stay: 40
title-fade-out: 10
sound-enabled: true
sound: "ENTITY_EXPERIENCE_ORB_PICKUP"
toggle-placeholder:
format-on: "<green><bold>ON"
format-off: "<red><bold>OFF"
adaptive-refresh:
enabled: true
minimum-interval-ticks: 1
scoreboard-conflict-auto-reapply: true
placeholder-intervals:
"%animation:gradient_title%": 15
"%ping%": 20
keyall-execute:
enabled: false
commands:
- "crates key give @a example"
- "broadcast <gold><bold>Keyall keys have been distributed!"
notify:
actionbar-enabled: false
actionbar-message: "<#00A6FF><bold>Keyall</bold> <gray>keys have been given to everyone!"
title-enabled: false
title-message: "<#00A6FF><bold>KEYALL"
subtitle-message: "<gray>Keys have been distributed!"
title-fade-in: 10
title-stay: 60
title-fade-out: 10
sound-enabled: false
sound: "ENTITY_PLAYER_LEVELUP"

- Download the latest version of DonutScoreboard.
- Drop the
.jarfile into your server'spluginsfolder. - Restart your server.
- Done! No additional setup required.
Running a network? Put the same .jar in your proxy's plugins folder as well. The proxy keeps every player's toggle in sync with your backend servers — nothing else to configure.

All Rights Reversed. Created by SirSnaryo.
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
26.2MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
Emotecraft
Create your own emotes in Minecraft.
7.9MSueta
Simple Tpa
A simple tpa plugin which sends requests
5.4MSueta