Sueta

DonutScoreboard

2.0

This plugin creates a scoreboard easy adjustment and configuration exactly like the famous server "DonutSMP" that owned but "DrDonutt"

·Plugin
Tested MC versions
1.21, 26.1, 26.2, 26.3

DonutScoreboard


Paper
Purpur
Spigot
Bukkit
Velocity
BungeeCord
Waterfall
Modrinth


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


What

  • 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.

Features

  • 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 above default and you are done.
  • Animations: Define animated text in animations.yml and 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 /sb choice 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 enable or /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.0 on startup, and the original is kept in backups/.
  • PlaceholderAPI & Vault: Any %placeholder% works inside lines, and Vault economy placeholders are supported when Vault is installed.
  • Safe Backups: /dsb export create zips every data file with metadata, and /dsb import restores it in one command.

Commands

Commands

CommandPermissionDescription
/donutscoreboardEveryoneShows plugin info and available commands
/donutscoreboard reloaddonutscoreboard.adminReloads the configuration file
/donutscoreboard resetdonutscoreboard.adminResets config to defaults and rebuilds all scoreboards
/donutscoreboard interval <seconds>donutscoreboard.adminSets the scoreboard refresh rate (1-60 seconds)
/donutscoreboard title edit [text]donutscoreboard.adminChanges the scoreboard title
/donutscoreboard title resetdonutscoreboard.adminResets the title to default
/donutscoreboard line add [text]donutscoreboard.adminAdds a new line to the scoreboard
/donutscoreboard line edit <number> [text]donutscoreboard.adminEdits a specific line
/donutscoreboard line delete <number>donutscoreboard.adminRemoves a line from the scoreboard
/donutscoreboard line empty <number>donutscoreboard.adminClears a line (makes it blank)
/donutscoreboard line reset [number]donutscoreboard.adminResets a line (or all lines) to default
/donutscoreboard line swap <n> with <n>donutscoreboard.adminSwaps two lines
/donutscoreboard keyall time set <time>donutscoreboard.adminSets the keyall countdown (example: 30m, 1h, 2d)
/donutscoreboard keyall time resetdonutscoreboard.adminResets keyall countdown to max duration
/donutscoreboard keyall duration <time>donutscoreboard.adminSets the max keyall duration (example: 2h, 3d)
/donutscoreboard keyall triggerdonutscoreboard.adminFires the keyall event immediately
/donutscoreboard world listdonutscoreboard.adminLists all worlds and their status
/donutscoreboard world disable <world>donutscoreboard.adminDisables the scoreboard in a world
/donutscoreboard world enable <world>donutscoreboard.adminEnables the scoreboard in a world
/donutscoreboard auto-world listdonutscoreboard.adminLists auto-disable patterns
/donutscoreboard auto-world add <pattern>donutscoreboard.adminAdds an auto-disable pattern (supports * wildcard)
/donutscoreboard auto-world remove <pattern>donutscoreboard.adminRemoves an auto-disable pattern
/donutscoreboard animation preview <name>donutscoreboard.adminPreviews the current frame of an animation
/donutscoreboard animation interval <name> <ticks>donutscoreboard.adminChanges an animation's frame interval
/donutscoreboard animation delete <name>donutscoreboard.adminDeletes an animation
/donutscoreboard style <new|old>donutscoreboard.adminSwitches between preset scoreboard layouts
/donutscoreboard scoreboard-numbers <enable|disable>donutscoreboard.adminToggles the side numbers on the scoreboard (Paper 1.20.5+)
/donutscoreboard board listdonutscoreboard.adminLists every configured scoreboard and its condition
/donutscoreboard condition test <expression>donutscoreboard.adminTests a condition against yourself before you use it
/donutscoreboard debugdonutscoreboard.adminShows config version, renderer, active boards and hooks
/donutscoreboard export createdonutscoreboard.adminCreates a full config backup zip
/donutscoreboard export listdonutscoreboard.adminLists all available backup exports
/donutscoreboard import <filename>donutscoreboard.adminImports a config backup zip
/donutscoreboard toggle <player>donutscoreboard.adminToggles another player's scoreboard visibility
/sbdonutscoreboard.toggleToggles your scoreboard on or off
/sb enabledonutscoreboard.toggleShows your scoreboard
/sb disabledonutscoreboard.toggleHides your scoreboard

Permissions

PermissionDefaultDescription
donutscoreboard.adminOPFull access to all admin commands (grants every child permission below)
donutscoreboard.viewEveryoneRequired to see the scoreboard at all
donutscoreboard.toggleEveryoneAccess to the /sb toggle command
donutscoreboard.toggle.othersOPAccess to /dsb toggle <player> to toggle other players
donutscoreboard.reloadOP/dsb reload
donutscoreboard.resetOP/dsb reset
donutscoreboard.intervalOP/dsb interval
donutscoreboard.titleOP/dsb title
donutscoreboard.lineOP/dsb line
donutscoreboard.keyallOP/dsb keyall
donutscoreboard.worldOP/dsb world
donutscoreboard.auto-worldOP/dsb auto-world
donutscoreboard.animationOP/dsb animation
donutscoreboard.styleOP/dsb style
donutscoreboard.boardOP/dsb board
donutscoreboard.scoreboard-numbersOP/dsb scoreboard-numbers
donutscoreboard.exportOP/dsb export
donutscoreboard.importOP/dsb import

Configuration

  • A folder named DonutScoreboard is created in your plugins folder automatically. Inside you will find a clean config.yml file.
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"

Installation

  • Download the latest version of DonutScoreboard.
  • Drop the .jar file into your server's plugins folder.
  • 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.


Modrinth Gallery

Example


© All Rights Reversed. Created by SirSnaryo.

Similar projects

Plugin →