FrontierEnderTracker
Who actually killed the dragon? Per-player damage credit, live sidebar and a ranked leaderboard for every Ender Dragon fight.
What it does
From the moment a dragon spawns, every hit a player lands is credited to them — melee, arrows, TNT and tamed pets are all traced back to the responsible player, and non-player damage (crystals, environment) is ignored.
A scoreboard sidebar shows the top contributors live during the fight; when the dragon dies the plugin broadcasts a ranked leaderboard with percentages (and a "Final blow" line if the killer wasn’t the top damager), updates lifetime stats, appends a JSON record to a fight log, and can run reward console commands for the top contributor(s). By default it counts *final* damage (after the dragon’s armor and effects) so the numbers reflect true contribution, and it is reload-safe: a dragon already alive when the plugin loads is adopted on the first hit.
Requires & integrates with
- Required
- Paper 26.2+, Java 25+
- Optional
- None.
- Used by
- None — its
stats.ymlandfights.jsonlare stable, readable files for outside tools.
Commands
/dragondmg also answers to /ddmg and /dragondamage.
| Command | Who | What it does |
|---|---|---|
| /dragondmg | Everyone | Your damage in the current fight, or in the last completed one (player only) |
| /dragondmg top | Everyone | Top 10 for the current fight, or the last fight if none is running |
| /dragondmg stats [player] | Everyone | Lifetime total damage / fights joined / killing blows (defaults to you; console must name a player) |
| /dragondmg history [n] | Everyone | Last n (1–20, default 5) logged fights: id, time, killer, top damager |
| /dragondmg reset | Admin | Clear the current fight’s totals and drop the sidebar (does not touch stats.yml) |
| /dragondmg reload | Admin | Reload config.yml |
Permissions
Player features default to true, staff features to op. Every node follows frontier.<plugin>.<action>, so a LuckPerms setup is e.g. lp group default permission set frontier.shop.use true. Wildcards work: frontier.reputation.*.
| Node | Default | Grants |
|---|---|---|
| frontier.endertracker.use | true | /dragondmg, top, history (base command node) |
| frontier.endertracker.stats | true | /dragondmg stats |
| frontier.endertracker.admin | op | /dragondmg reset, /dragondmg reload |
Config reference
File
plugins/FrontierEnderTracker/config.yml
To apply changes
/dragondmg reload — keys are read live; a running fight keeps its sidebar title until the next fight
| Key | Default | What it controls |
|---|---|---|
| use-final-damage | true | true = damage after armor and effects (true contribution); false = raw pre-mitigation damage |
| show-sidebar | true | Live scoreboard sidebar during a fight |
| sidebar-top-n | 5 | Rows shown on the sidebar (min 1) |
| sidebar-refresh-ticks | 20 | Sidebar refresh period in ticks (min 5); 20 = 1 s |
| sidebar-title | '&5&lDragon Damage' | Sidebar title (& colour codes) |
| broadcast-on-death | true | Ranked chat leaderboard when the dragon dies |
| show-percent | true | Append each player’s share of total damage to the broadcast |
| reward-commands | [] | Console commands run for the top contributor(s); placeholders {player}, {rank}, {damage} (e.g. give {player} diamond 3) |
| reward-top-n | 1 | How many top players receive the reward commands |
| persist-stats | true | Write lifetime totals to stats.yml |
| storage | yaml | Storage backend; only yaml is implemented (sqlite is accepted but ignored) |
| log-fights | true | Append a per-fight record to fights.jsonl on each dragon death |
| max-history | 200 | Trim fights.jsonl to this many lines (0 = unlimited) |
Good to know
- +During a fight the sidebar is set on every online player (not just those in the End) and any other plugin’s sidebar is overridden until the fight ends — set
show-sidebar: falseif another scoreboard plugin matters more. - +Only one dragon is tracked at a time; a second dragon (another End world, or a respawn while the first lives) is ignored until the active one dies or
/dragondmg resetis run. - +
stats.ymlis<uuid>: {name, total, fights, kills};fights.jsonlis one JSON object per line (id,time,world,killer,durationMs,total, rankedparticipants[]) — append-only, trimmed from the head. - +Both files are written on the main thread and
historyreads the whole log each call — fine at the defaultmax-history, so don’t set it to0on a busy server.
← Previous
FrontierTrade
Safe two-sided trade GUI
Next →
FrontierEndLock
Lock the End until staff open it
Looking for something specific? Search the whole suite.