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

Activity Tracker

0

3 servers
Latest: v1.6.1
185 downloads on GitHub
Tested on Minecraft 1.19, 1.21, 26.2
735 downloads on SpigotMC

First released October 5, 2021 · Last updated October 14, 2026

Downloads from this site

99 total

1 latest (v1.6.1)

Tracks the activity of players.

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

Usage

Last reported in use 9 days ago

2 server starts in the last 30 days

Server starts per day

Versions in use, by share of server starts

  • 1.5.0

    50% · 1 start

  • 2.0.0-SNAPSHOT-8-8-2026

    50% · 1 start

Usage reported by trace — how it works. CI and test servers are excluded.

Usage of every plugin


Verified before release

Version 1.6.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 14, 2026· 7 downloads

Automated build of main at 799657104b2eda33a3252d8e12cb8d276539b326.

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 activitytracker --experimental

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

ActivityTracker-1.6.2-SNAPSHOT.jar (3.9 MB)

1.6.1

For a server running v1.6.0, this release changes nothing at runtime. Commands, permissions, configuration and stored activity data all work exactly as before. This release adds automated test coverage that locks in the current behaviour of several commands, which helps protect against regressions in future updates.

Changes

  • Stability: Added tests that pin down how /at stats, /at info and /at average behave today. This covers the usage messages, the handling of players without a record, and the rejection of day values that are not numbers, are zero or are negative (#129).

Version

v1.6.0 → 1.6.1 — PATCH. Mechanical floor from comparing the two jars: PATCH. Judgment: The only changes since v1.6.0 are new unit tests for the StatsCommand, InfoCommand and AverageCommand classes (#129), a CHANGELOG update (#128) and a version bump to a SNAPSHOT. No runtime code, commands, config, permissions or stored data changed. The mechanical floor of patch is correct, and nothing here would justify raising it.

  • no interface or storage difference observed between the jars

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 v1.6.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

1.6.0

For a server running v1.5.0, this is a drop-in upgrade that adds support for Minecraft 26.3. While usage reporting is on, each report now also includes a random server ID. This lets the author count how many servers use the plugin instead of counting raw events. The ID is a random UUID. It is stored as a server-id: line added to plugins/trace/config.yml on first start and does not identify any person, account or IP address. Nothing about players is sent. If reporting is turned off (in this plugin's config.yml, in plugins/trace/config.yml, or with TRACE_USAGE_REPORTING=off / DO_NOT_TRACK=1), no ID is created, read or sent.

Changes

Compatibility

  • Added support for Minecraft 26.3 (#122).

Usage reporting

  • Each usage report now includes a random server ID as the install tag. The ID is created on first start and saved as the server-id: line in plugins/trace/config.yml, with a comment explaining what it is. All plugins that report to trace on the server share this one ID. Delete the line to get a new one (#120).
  • Your existing text in plugins/trace/config.yml is never changed: the ID is added as a block at the end of the file. If the file cannot be read or written, a temporary ID is used until the server restarts, and nothing is written (#120).
  • The startup message and the comments in config.yml now mention the random server ID (#121).
  • The usage-reporting details link now points to https://danielstephenson.dev/usage-reporting (#124).

Version

v1.5.0 → 1.6.0 — MINOR. Mechanical floor from comparing the two jars: PATCH. Judgment: The vendored trace-client update (#120) adds new behaviour that the mechanical check only partly sees. Every usage event now carries a new install tag holding a random server ID. On first start, an enabled client also writes that ID as a new server-id: line in plugins/trace/config.yml. Support for Minecraft 26.3 (#122) is also new. Nothing breaks for an existing server: config keys, commands, permissions and stored data are unchanged, and the existing opt-outs still stop all of it, including the file write, so major is not justified.

  • no interface or storage difference observed between the jars

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

  • dansplugins.activitytracker.trace.TraceClient: added public java.lang.String installId();
  • dansplugins.activitytracker.trace.TraceClient: added public static java.lang.String installIdFromFile(java.io.File);
  • dansplugins.activitytracker.trace.TraceClient$Builder: added public dansplugins.activitytracker.trace.TraceClient$Builder installId(java.lang.String);
  • dansplugins.activitytracker.trace.TraceClient$Builder: added public dansplugins.activitytracker.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 v1.5.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

1.5.0

For a server running v1.4.0, this is a drop-in upgrade. Player activity data, commands, permissions and the plugin's own config are unchanged. The only runtime changes are in optional anonymous usage reporting. Every usage event now includes the plugin version. The shared plugins/trace/config.yml also accepts an optional tags: block, which adds labels to the events the plugin reports. For example, a test or CI server can mark its events so they are kept out of real-installation figures. Reporting still turns off the same ways as before.

Changes

Usage reporting

  • The server-wide file plugins/trace/config.yml can now hold a tags: block, such as ci: "true", that is added to every event the plugin reports. If the plugin's event already has a tag with the same name, the plugin's value is kept. Entries that are malformed or too long are dropped quietly, and the file can never stop reporting or stop the plugin. Setting enabled: false in this file still turns reporting off for every plugin that uses it (#111, #112)
  • When the plugin creates plugins/trace/config.yml for the first time, the file now includes a commented-out example of the tags: block. An existing file is never rewritten (#111)
  • Every usage event now carries the plugin version, not just the startup event (#112)

Version

v1.4.0 → 1.5.0 — MINOR. Mechanical floor from comparing the two jars: PATCH. Judgment: The vendored usage-reporting client went from trace-client 0.2.0 to 0.4.0, which adds operator-visible behaviour the mechanical check only saw as an internal builder signature change. The shared plugins/trace/config.yml can now hold a tags: block that is added to every event this plugin reports, newly created copies of that file include a commented-out example, and every usage event now carries the plugin version (before, only the startup event did). These add new behaviour and new data sent, so the floor rises to minor. The builder change is inside a vendored copy that other plugins do not use, the existing reporting switches work as before, and the pom cleanup, tests, CI and OpenAPI metadata changes do not change runtime behaviour, so this is not major.

  • no interface or storage difference observed between the jars

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

  • dansplugins.activitytracker.trace.TraceClient: removed/changed public static dansplugins.activitytracker.trace.TraceClient$Builder builder(java.lang.String, java.lang.String);
  • dansplugins.activitytracker.trace.TraceClient: added public static dansplugins.activitytracker.trace.TraceClient$Builder builder(java.lang.String, java.lang.String, java.lang.String);
  • dansplugins.activitytracker.trace.TraceClient: added public static final java.lang.String VERSION;

</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).
  • save-compatibility gate run: data written by v1.4.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

1.4.0

This release is a drop-in upgrade for a server running 1.3.0: the activity data on disk is unchanged and every existing command keeps working. Two things are new on startup that you should know about. Usage reporting is on by default — the plugin sends its name, version and the names of commands used (nothing about players or the server) to the author's trace server, and it says so in the console on every start; turn it off with usage-reporting.enabled: false in the plugin's config.yml or for every trace-reporting plugin at once in the new plugins/trace/config.yml. Optional Discord join/quit notifications, a /at average command, an admin /at list command, a /at top player count, and a matching REST endpoint round out the release.

Changes

Usage reporting

  • The plugin reports one event on startup and one per command to the author's trace server, off the main thread, never blocking a tick, and dropped silently if the server is unreachable; a bounded queue keeps an unreachable server from costing memory. (#99)
  • A console line on every startup states whether reporting is on, what is sent, and how to turn it off. Opt out per plugin with usage-reporting.enabled: false, server-wide with enabled: false in plugins/trace/config.yml (created on first start, never turned back on by a plugin), or process-wide with the TRACE_USAGE_REPORTING=off or DO_NOT_TRACK=1 environment variables. (#99, #101)

Discord notifications

  • Player join and quit events can be posted to a Discord webhook. Off by default; enable with discordWebhookEnabled: true and discordWebhookUrl. Messages are templated via discordWebhookJoinMessage and discordWebhookQuitMessage ({player} is replaced with the player's name), and discordWebhookStaffOnly: true limits notifications to players holding the new at.staff permission. Sending happens asynchronously. (#77)

Commands

  • New /at average [player] [days] shows a player's total and average hours per day over the last N days (default 7), with permission at.average (default: everyone). (#69)
  • New /at list shows the 10 most recent sessions across all players, with permission at.list (default: op). (#59)
  • /at top accepts an optional number of players to show, from 1 to 100 (default 10). (#83)
  • /at info now shows the player's activity ranking against all tracked players. (#76)
  • All command output uses a consistent boxed format with colour and progress bars; /at help and /at config list the new commands and keys. (#76)
  • The bare /at command now checks the at.default permission, which is declared with default true. (#96)
  • The /at version header no longer shows a doubled v prefix. (#98)

REST API

  • New GET /api/average-daily-activity/{uuid}?days=N returns average and total hours for a player over the period, documented in openapi.yaml. (#69)

Upgrade notes

  • Decide whether you want usage reporting. It is on unless you turn it off: set usage-reporting.enabled: false in plugins/ActivityTracker/config.yml, or set enabled: false in plugins/trace/config.yml to switch it off for every plugin that reports to trace. The console notice on startup confirms the current state.
  • plugins/trace/config.yml is created on first start if it does not exist. This is expected.
  • New config keys are written to config.yml on first start: usage-reporting.enabled, usage-reporting.endpoint, usage-reporting.key, discordWebhookEnabled, discordWebhookUrl, discordWebhookStaffOnly, discordWebhookJoinMessage, discordWebhookQuitMessage. Existing keys and values are preserved.
  • New permissions: at.default (default true) gates the bare /at command; at.average (default true); at.list (default op); at.staff (default op) marks staff for staff-only Discord notifications. If your permissions plugin denies permissions that are not explicitly granted, grant at.default and at.average to players who should keep using /at.
  • If you run the REST API, the new endpoint is exposed on the same port and needs no configuration.

Version

1.3.0 → 1.4.0 — MINOR. Mechanical floor from comparing the two jars: MINOR. Judgment: Nothing in the diff meets the major criteria: the on-disk activity data format is untouched (PersistentData only gains a read-only getPlayerRank), no existing command changes its arguments or behaviour incompatibly (/at top gains an optional argument, /at info gains a line), no existing config key changes meaning, and the newly declared at.default permission defaults to true so the /at check it now enforces does not lock out anyone who could run it before. The notable changes are additive: usage reporting to the author's trace server (on by default with an opt-out and a new plugins/trace/config.yml written on first start), Discord join/quit webhooks (off by default), /at average, /at list, a new REST endpoint, and new permissions and config keys. The changed JoinHandler/QuitHandler constructors and sendInfoToSender signature are internal plugin classes rather than an API other plugins consume, and the mechanical check already rated them INFO, so the floor of minor is kept.

  • minor: permission added: at.average
  • minor: permission added: at.default
  • minor: permission added: at.list
  • minor: permission added: at.staff
  • minor: default config key added: usage-reporting.enabled
  • minor: default config key added: usage-reporting.endpoint
  • minor: default config key added: usage-reporting.key
  • minor: storage path changed: src/main/java/dansplugins/activitytracker/api/RestApiService.java
  • minor: storage path changed: src/main/java/dansplugins/activitytracker/data/PersistentData.java
  • minor: storage path changed: src/main/java/dansplugins/activitytracker/objects/ActivityRecord.java
  • minor: storage path changed: src/main/java/dansplugins/activitytracker/services/ActivityRecordService.java

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

  • public class added: dansplugins.activitytracker.api.AverageDailyActivityResponse
  • public class added: dansplugins.activitytracker.commands.AverageCommand
  • public class added: dansplugins.activitytracker.commands.ListCommand
  • public class added: dansplugins.activitytracker.services.DiscordWebhookService
  • public class added: dansplugins.activitytracker.trace.TraceClient
  • public class added: dansplugins.activitytracker.trace.TraceClient$Builder
  • dansplugins.activitytracker.data.PersistentData: added public int getPlayerRank(java.util.UUID);
  • dansplugins.activitytracker.eventhandlers.JoinHandler: removed/changed public dansplugins.activitytracker.eventhandlers.JoinHandler(dansplugins.activitytracker.services.ActivityRecordService, dansplugins.activitytracker.data.PersistentData, dansplugins.activitytracker.factories.SessionFactory);
  • dansplugins.activitytracker.eventhandlers.JoinHandler: added public dansplugins.activitytracker.eventhandlers.JoinHandler(dansplugins.activitytracker.services.ActivityRecordService, dansplugins.activitytracker.data.PersistentData, dansplugins.activitytracker.factories.SessionFactory, dansplugins.activitytracker.services.DiscordWebhookService, org.bukkit.plugin.java.JavaPlugin);
  • dansplugins.activitytracker.eventhandlers.QuitHandler: removed/changed public dansplugins.activitytracker.eventhandlers.QuitHandler(dansplugins.activitytracker.data.PersistentData, dansplugins.activitytracker.utils.Logger);
  • dansplugins.activitytracker.eventhandlers.QuitHandler: added public dansplugins.activitytracker.eventhandlers.QuitHandler(dansplugins.activitytracker.data.PersistentData, dansplugins.activitytracker.utils.Logger, dansplugins.activitytracker.services.DiscordWebhookService, org.bukkit.plugin.java.JavaPlugin);
  • dansplugins.activitytracker.objects.ActivityRecord: removed/changed public void sendInfoToSender(org.bukkit.command.CommandSender);
  • dansplugins.activitytracker.objects.ActivityRecord: added public void sendInfoToSender(org.bukkit.command.CommandSender, int, int);
  • dansplugins.activitytracker.services.ActivityRecordService: added public double calculateAverageDailyActivity(dansplugins.activitytracker.objects.ActivityRecord, int);
  • dansplugins.activitytracker.services.ActivityRecordService: added public double calculateTotalHoursInPeriod(dansplugins.activitytracker.objects.ActivityRecord, int);
  • dansplugins.activitytracker.services.ActivityRecordService: added public java.util.ArrayList<dansplugins.activitytracker.objects.ActivityRecord> getTopRecords(int);
  • dansplugins.activitytracker.services.ConfigService: added public boolean isUsageReportingEnabled();
  • dansplugins.activitytracker.services.ConfigService: added public java.lang.String getUsageReportingEndpoint();
  • dansplugins.activitytracker.services.ConfigService: added public java.lang.String getUsageReportingKey();

</details>

Verification

Booted twice on a real Spigot server before publication — boot gate run (10 assertions passed). This release carries the exact jar that was verified.

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 Activity-Tracker'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: 1.3.0 → 2.0.0-SNAPSHOT-8-8-2026

Opened as https://github.com/Dans-Plugins/Activity-Tracker/pull/88.


Drafted by Claude on behalf of Daniel Stephenson.

What's Changed

New Contributors

Full Changelog: https://github.com/Dans-Plugins/Activity-Tracker/compare/1.2.0...1.3.0

What's Changed

New Contributors

Full Changelog: https://github.com/Dans-Plugins/Activity-Tracker/compare/1.2.0...1.3.0-alpha-1

What's Changed

Full Changelog: https://github.com/Dans-Plugins/Activity-Tracker/compare/1.1...1.2.0

Changes in Activity Tracker v1.0

  • Added the top command, allowing players to view the top ten most active players.
  • Added the config command.
  • Allowed players to view their activity record by typing /at info with no arguments.
  • Added first recorded login to the output of the info command.
  • Added the stats command, allowing players to view activity stats for the server.

Changes in Activity Tracker v0.4

  • Implemented an autosave feature.
  • Created a bunch of interfaces.
  • Added "current status" to the output of the info command.
  • Integrated bStats with the plugin.
  • Made doubles get printed with only two digits after the decimal point.
  • When displaying a player's play time, the hours they've spent so far in their current session will now be accounted for.
  • If a player is online, how long they've been online will now be displayed in the output of the info command.
  • If a player is offline, how long they've been offline will now be displayed in the output of the info command.
  • Fixed "most recent session" field not getting saved and loaded for activity records.

Changes in Activity Tracker v0.3

  • Added the help command.
  • Added the info command, allowing players to view the activity record of a player.
  • Fixed the logoutDate field for a player remaining ll if the server was shut down,

Changes in Activity Tracker v0.2

  • Assigned IDs to sessions.
  • Created the Storage Manager class.
  • Made sessions get saved and loaded.
  • Made activity records get saved and loaded.
  • When a player logs out, their session will now be updated and the time they spent online will be calculated.
  • Created the Config Manager class.
  • Added the "debugMode" config option.
The initial version of the plugin. Pretty barebones.
Alternate Account Finder

Identifies accounts that have used the same IP address.

Dan's Essentials

Provides miscellaneous commands.

Dan's Plugin Manager

Lets operators download the community's plugins in-game or from the server console.

Dan's Spawn System

Allows players to use signs to select a custom spawn in their world.

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