Skip to main content
Dan's Plugins Community
HomeNewsGuidesLeaderboardAboutRoad MapCommissionsDev PortalAccount
All plugins
KDR Tracker icon

KDR Tracker

0

Latest: v0.3.1
21 downloads on GitHub

First released August 8, 2026 · Last updated October 11, 2026

Downloads from this site

24 total

4 latest (v0.3.1)

Keeps track of players' kill/death ratios.

utility
DownloadUser guideSource
A recreated chat panel: every line is the plugin’s real output, captured from commands a bot player ran on a test server.

Verified before release

Version 0.3.1 was started on real servers running Minecraft 1.19.4, 1.21.11, 26.2 and 26.3 before it was published. The jar you download is the exact one that passed. How releases work

Versions

All releases on GitHub
Development build
Pre-release
October 11, 2026· 1 download

Automated build of main at 57fe230326bce918e6603b7d48e84b263303ddb0.

This is not a release. It is unreleased, unreviewed code that has not been through any release check, and a broken build can stop a server from starting. Do not run it on a server you care about without a backup.

Install it with Dan's Plugin Manager:

/dpm get kdrtracker --experimental

Return to published releases with /dpm get kdrtracker --stable.

KDRTracker-0.3.2-SNAPSHOT.jar (91.2 KB)

0.3.1

For a server running v0.3.0, this is a drop-in maintenance release. Kill/death tracking, commands, permissions and saved data all work exactly as before, and usage reporting keeps the same switches and the same server ID. The only change you might notice is a new link for usage-reporting details.

Changes

  • Usage reporting: The details link in the startup message, the comment in the bundled config.yml and a newly created plugins/trace/config.yml now points to https://danielstephenson.dev/usage-reporting. Existing config files are left as they are.
  • Usage reporting: The bundled usage-reporting client was updated to 0.6.1. What gets reported and how to turn it off are unchanged.

Version

v0.3.0 → 0.3.1 — PATCH. Mechanical floor from comparing the two jars: PATCH. Judgment: The only API additions are in the bundled trace client (installIdFromFile and Builder.installIdFile), and KDRTracker itself never calls them. The plugin still takes its server ID from server-id in plugins/trace/config.yml, so server behaviour and stored data are unchanged. The other operator-visible change is the usage-reporting details link, which now points somewhere else in the startup message, the bundled config.yml comment and a newly created plugins/trace/config.yml. No commands, permissions, config keys or data formats change, and the merged PR (#49) only adds tests, so the patch floor holds.

  • no interface or storage difference observed between the jars

<details><summary>Java API changes (informational — nothing depends on this plugin)</summary>

  • dansplugins.kdrtracker.trace.TraceClient: added public static java.lang.String installIdFromFile(java.io.File);
  • dansplugins.kdrtracker.trace.TraceClient$Builder: added public dansplugins.kdrtracker.trace.TraceClient$Builder installIdFile(java.io.File);

</details>

Verification

Verified on a real Spigot server before publication; this release carries the exact jar that was verified.

  • boot gate run: booted twice on a fresh Spigot server running Minecraft 1.19.4 (11 assertions passed).
  • boot gate run: booted twice on a fresh Spigot server running Minecraft 1.21.11 (11 assertions passed).
  • boot gate run: booted twice on a fresh Spigot server running Minecraft 26.2 (11 assertions passed).
  • boot gate run: booted twice on a fresh Spigot server running Minecraft 26.3 (11 assertions passed).
  • save-compatibility gate run: data written by v0.3.0 was loaded by this release across two restarts with nothing lost (16 assertions passed).

Install with Dan's Plugin Manager: /dpm get <plugin>. How stable releases are made: Release channels.


drafted by Claude on behalf of Daniel Stephenson

0.3.0

For a server running v0.2.0, this is a drop-in upgrade. Kill and death records stay in the same file and format. Records are now saved every 5 minutes as well as on shutdown, so a crash loses far less. The debugMode setting now actually produces debug output. Usage reporting, which you can still turn off, now includes the plugin version and a random server ID with every event. Your existing config.yml keeps working without edits.

Changes

Data safety

  • Player records are now saved every few minutes, not only when the plugin is disabled, so a crash or a killed server loses at most one interval of kills and deaths. The new saveInterval option sets the minutes between saves (default 5); set it to 0 to save only on disable. A config.yml without the key uses the 5-minute default. (#39)
  • Loading and saving player records now writes a line to the console when debug mode is on. (#39)

Debugging

  • debugMode now sends messages through the plugin's own logger with a [DEBUG] prefix. Before, it printed to standard output under the wrong plugin name. Debug mode now logs record creation on join, each recorded kill and death, and kills or deaths skipped because a player has no record. A config reload turns debug output on or off without a restart. (#32)

Player messages

  • Kill and death messages now use the singular for a count of 1 ("You now have 1 kill.") instead of "1 kills". (#44)

Compatibility

  • Minecraft 26.3 is now a supported version. (#42)

Usage reporting

  • Every usage-reporting event, including command events, now carries the plugin version. (#36)
  • Every event now also carries a random server ID. It is generated on first start and stored as the server-id line in plugins/trace/config.yml, so servers can be counted rather than raw events. It identifies no person, account or IP address; delete the line to get a new one. The plugin never generates or writes an ID while reporting is turned off. The startup console notice and the config.yml comments now mention the ID. (#40, #41)
  • plugins/trace/config.yml now accepts an optional tags: block. Its tags are added to every event that plugins on the server report; for example, ci: "true" on a test server keeps its events out of real-installation counts. (#35)
  • As before, reporting can be turned off with usage-reporting.enabled: false in this plugin's config.yml, enabled: false in plugins/trace/config.yml, or the TRACE_USAGE_REPORTING=off / DO_NOT_TRACK=1 environment variables.

Version

v0.2.0 → 0.3.0 — MINOR. Mechanical floor from comparing the two jars: MINOR. Judgment: The changes add behaviour without breaking anything that already works: a new saveInterval option (defaulting to 5 minutes), periodic autosave, debug output that now honours debugMode, and a random server ID with version tags on usage-reporting events. playerRecords.json keeps the same path and format; the storage-path flag comes from log lines added to StorageService, not a change to where or how data is written. Commands, permissions and existing config keys keep their meaning, and the constructor changes only touch internal listener and service classes, so nothing justifies major. Minor (the floor) stays.

  • minor: default config key added: saveInterval
  • minor: storage path changed: src/main/java/dansplugins/kdrtracker/services/StorageService.java

<details><summary>Java API changes (informational — nothing depends on this plugin)</summary>

  • public class added: dansplugins.kdrtracker.services.AutoSaveService
  • dansplugins.kdrtracker.listeners.DeathListener: removed/changed public dansplugins.kdrtracker.listeners.DeathListener(dansplugins.kdrtracker.data.PersistentData);
  • dansplugins.kdrtracker.listeners.DeathListener: added public dansplugins.kdrtracker.listeners.DeathListener(dansplugins.kdrtracker.data.PersistentData, dansplugins.kdrtracker.utils.Logger);
  • dansplugins.kdrtracker.listeners.JoinListener: removed/changed public dansplugins.kdrtracker.listeners.JoinListener(dansplugins.kdrtracker.data.PersistentData, dansplugins.kdrtracker.factories.PlayerRecordFactory);
  • dansplugins.kdrtracker.listeners.JoinListener: added public dansplugins.kdrtracker.listeners.JoinListener(dansplugins.kdrtracker.data.PersistentData, dansplugins.kdrtracker.factories.PlayerRecordFactory, dansplugins.kdrtracker.utils.Logger);
  • dansplugins.kdrtracker.services.ConfigService: added public int getSaveInterval();
  • dansplugins.kdrtracker.services.StorageService: removed/changed public dansplugins.kdrtracker.services.StorageService(dansplugins.kdrtracker.data.PersistentData, dansplugins.kdrtracker.factories.PlayerRecordFactory);
  • dansplugins.kdrtracker.services.StorageService: added public dansplugins.kdrtracker.services.StorageService(dansplugins.kdrtracker.data.PersistentData, dansplugins.kdrtracker.factories.PlayerRecordFactory, dansplugins.kdrtracker.utils.Logger);
  • dansplugins.kdrtracker.trace.TraceClient: removed/changed public static dansplugins.kdrtracker.trace.TraceClient$Builder builder(java.lang.String, java.lang.String);
  • dansplugins.kdrtracker.trace.TraceClient: added public java.lang.String installId();
  • dansplugins.kdrtracker.trace.TraceClient: added public static dansplugins.kdrtracker.trace.TraceClient$Builder builder(java.lang.String, java.lang.String, java.lang.String);
  • dansplugins.kdrtracker.trace.TraceClient: added public static final java.lang.String VERSION;
  • dansplugins.kdrtracker.trace.TraceClient$Builder: added public dansplugins.kdrtracker.trace.TraceClient$Builder installId(java.lang.String);
  • dansplugins.kdrtracker.utils.Logger: removed/changed public dansplugins.kdrtracker.utils.Logger(dansplugins.kdrtracker.KDRTracker);
  • dansplugins.kdrtracker.utils.Logger: added public dansplugins.kdrtracker.utils.Logger(java.util.logging.Logger, java.util.function.BooleanSupplier);

</details>

Verification

Verified on a real Spigot server before publication; this release carries the exact jar that was verified.

  • boot gate run: booted twice on a fresh Spigot server running Minecraft 1.19.4 (11 assertions passed).
  • boot gate run: booted twice on a fresh Spigot server running Minecraft 1.21.11 (11 assertions passed).
  • boot gate run: booted twice on a fresh Spigot server running Minecraft 26.2 (11 assertions passed).
  • boot gate run: booted twice on a fresh Spigot server running Minecraft 26.3 (11 assertions passed).
  • save-compatibility gate run: data written by v0.2.0 was loaded by this release across two restarts with nothing lost (16 assertions passed).

Install with Dan's Plugin Manager: /dpm get <plugin>. How stable releases are made: Release channels.


drafted by Claude on behalf of Daniel Stephenson

0.2.0

KDRTracker keeps track of how many kills and deaths each player has on your server and lets players look up their kill/death ratio in-game. It suits PvP and survival servers that want a simple stat to compare players, without setting up leaderboards or a database. The plugin creates a record for each player when they join and updates it when players die.

What it adds

  • /kdrtracker and /kdrt: the plugin's commands. Run with no arguments, they show the plugin's default message.
  • /kdrt help: lists the available commands. Permission kdrt.help, which everyone has by default.
  • /kdrt info: shows a player's kills, deaths and K/D ratio. Permission kdrt.info, which everyone has by default.
  • kdrt.view: a permission that everyone has by default.
  • usage-reporting in config.yml: this setting is on by default. When the plugin starts and each time one of its commands is used, it sends a small event to https://trace.danielstephenson.dev. The event contains the plugin name, the event name, and the plugin version or command name. It contains nothing about players or the server. Sending runs off the main thread and never blocks a tick. If the server can't be reached, the event is dropped without an error.
    • To turn it off for this plugin, set usage-reporting.enabled: false.
    • To turn it off for every plugin on the server that reports this way, set enabled: false in plugins/trace/config.yml, or set the environment variable TRACE_USAGE_REPORTING=off or DO_NOT_TRACK=1.
    • The console says at every startup whether reporting is on.
    • key identifies the plugin to the reporting server. It is not a secret. If it is empty, reporting is off.

What it writes

  • plugins/KDRTracker/config.yml: written on first start from the bundled defaults, including their comments.
  • Player kill/death records: stored in the plugin's data folder. They are loaded when the server starts and saved when it shuts down.
  • plugins/trace/config.yml: the server-wide usage-reporting switch. It is created on first start if it doesn't already exist.

Requirements

  • A Bukkit/Spigot server running version 1.13 or later (api-version: 1.13).
  • No other plugins are required.

Since the last prerelease

  • Player records are now actually saved between restarts. Before this fix, a problem with how players were matched stopped records from being saved. (#5)
  • Player kill/death records are now saved to and loaded from disk. (#1)
  • /kdrt info now shows the K/D ratio rounded, not as a long decimal. (#14)
  • kdrt.view is now listed in plugin.yml, so permission plugins can see and assign it. (#19)
  • Added usage reporting to the trace server. It runs off the main thread, and you can turn it off in config.yml. (#20)
  • Usage reporting is now announced on the console at every startup, and you can turn it off for the whole server in plugins/trace/config.yml or with environment variables. When you upgrade, an existing config.yml without a usage-reporting section gets that section added. (#22)

Verification

Verified on a real Spigot server before publication; this release carries the exact jar that was verified.

  • boot gate run: booted twice on a fresh Spigot server (10 assertions passed).

Install with Dan's Plugin Manager: /dpm get <plugin>. How stable releases are made: Release channels.


drafted by Claude on behalf of Daniel Stephenson

Snapshot release marking KDRTracker's move to an AI-first development approach.

Day-to-day feature work, grooming, review and maintenance now run through AI agents working directly against this repository, with the maintainers setting direction and approving what lands. The version bump marks that change in how the project is built — it is not a compatibility break. Behaviour, configuration and stored data are unchanged, and existing installations can upgrade in place.

This is a dated snapshot, not a finished release. It follows the precedent set by Medieval Factions' 6.0.0-SNAPSHOT-7-25-2026: the AI-first line has not yet been verified in live operation, and the snapshot designation stays until it has.

Version changes

  • pom.xml: 0.1 → 0.2.0-SNAPSHOT-8-8-2026

Opened as https://github.com/Dans-Plugins/KDRTracker/pull/7.


Drafted by Claude on behalf of Daniel Stephenson.

Bookshelves You Can Use

Turns bookshelves into usable storage: right-click one to open a small inventory.

Easy Links

Lets players view relevant links with simple commands.

Something wrong, or something missing?

Bugs go to the plugin's issue tracker, where they can actually be fixed and tracked. Ideas for new behaviour go to the Dev Portal, where the community can upvote them.

v0.15.2
Source CodeReport a BugKnowledge BaseFree Server Hosting

More by Daniel Stephenson → danielstephenson.dev · Play his games in your browser