Mailboxes
0
First released September 25, 2021 · Last updated October 12, 2026
Downloads from this site
126 total
12 latest (v1.5.1)
Allows players and plugins to send persistent messages to players.
Usage
2
Active servers (30 days)
Last reported in use 2 hours ago
97 server starts in the last 30 days
Server starts per day
Versions in use, by share of active servers
1.5.1
100% · 2 servers
Usage reported by trace — how it works. CI and test servers are excluded.
Verified before release
Version 1.5.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 GitHubAutomated build of main at 3e8c4d8cc5f4b61a80eb86003bc90bc9fc5353eb.
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 mailboxes --experimentalReturn to published releases with /dpm get mailboxes --stable.
1.5.1
For a server running v1.5.0, this is a maintenance release with no change to how mailboxes, commands, permissions or configuration work. It updates the bundled usage-reporting client and points the usage-reporting details link at a new page. Usage reporting sends the same data, follows the same opt-outs and keeps the same server ID. No PR numbers were recorded for this release.
Changes
Usage reporting
- The link to usage-reporting details now points to https://danielstephenson.dev/usage-reporting. This affects the startup console message, the comment in a newly generated
config.ymland the comment in a newly createdplugins/trace/config.yml. Existing config files are not rewritten. - The bundled trace client is updated from 0.5.0 to 0.6.1. Mailboxes keeps using the server-wide
server-idinplugins/trace/config.yml, and every opt-out works as before:usage-reporting.enabled: false,enabled: falseinplugins/trace/config.yml,TRACE_USAGE_REPORTING=offandDO_NOT_TRACK=1.
Version
v1.5.0 → 1.5.1 — PATCH. Mechanical floor from comparing the two jars: PATCH.
Judgment: The only API additions are in the bundled trace client: TraceClient.installIdFromFile(File) and Builder.installIdFile(File). Mailboxes calls neither, so the plugin keeps resolving its install ID from server-id in plugins/trace/config.yml exactly as before. Everything else just changes the usage-reporting details link in the console message, the default config.yml comment and the comment in a newly generated plugins/trace/config.yml. Commands, permissions, config keys and stored mailbox data are untouched, so the patch floor stands.
- no interface or storage difference observed between the jars
<details><summary>Java API changes (informational — nothing depends on this plugin)</summary>
- dansplugins.mailboxes.trace.TraceClient: added public static java.lang.String installIdFromFile(java.io.File);
- dansplugins.mailboxes.trace.TraceClient$Builder: added public dansplugins.mailboxes.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.0was 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 safe drop-in upgrade with no data migration. Several crashes and silent misconfigurations are fixed, and the plugin now checks config.yml every time it starts. Usage reporting, which is on by default, now also sends a random server ID. On first start that ID is added to plugins/trace/config.yml. It does not identify any player, account or IP address. Minecraft 26.3 is now a supported version.
Changes
Configuration
- On every start the plugin checks the values in config.yml. Any whole-number option set below 1 or to something that isn't a number, and any true/false option set to something else, is replaced with its default. A console warning names the option, the old value and the new one. For example,
maxMessageIDNumber: 0used to break the first/m send(#111). /m config setnow accepts onlytrueorfalse(in any case) for true/false options. Before, values likeyes,1or a misspelledtruewere saved asfalsewhile still reporting success (#111).
Fixes
- New mailboxes no longer get a mailbox ID that is already in use. If random picks keep hitting taken IDs, the plugin uses the lowest free ID. If every ID is taken, the player is told to contact an administrator and an error is logged, instead of an ID being reused (#121).
/m openwith an ID that isn't a number now shows an "Invalid message ID" message instead of throwing an error (#115).
Usage reporting
- Each event now includes a random server ID so that servers can be counted. It is stored as the
server-idline inplugins/trace/config.ymland created on first start only while reporting is enabled. Delete the line to get a new one. The startup notice and config.yml comments now mention it (#122, #124). - Every event now includes the plugin version, including command events, not just the startup event (#118).
plugins/trace/config.ymlnow supports an optionaltags:block that is added to every event from plugins on this server. For example, setci: "true"on test servers (#117).
Compatibility
- Minecraft 26.3 is now supported. The supported versions are 1.19.4, 1.21.11, 26.2 and 26.3 (#125, #116).
Upgrade notes
- After the first start, check the console for warnings about config.yml. Any invalid values listed there have been replaced with defaults in the file. Set the values you want again.
- If you don't want the server ID sent, turn usage reporting off. Set
usage-reporting.enabled: falsein this plugin's config.yml, setenabled: falseinplugins/trace/config.ymlfor every plugin that reports, or setDO_NOT_TRACK=1. When reporting is off, no server ID is created or written.
Version
v1.4.0 → 1.5.0 — MINOR. Mechanical floor from comparing the two jars: PATCH.
Judgment: The mechanical floor is patch, but this release adds behaviour that check cannot see. Usage reporting now creates a random server ID, appends it as a server-id line to plugins/trace/config.yml and sends it with every event, along with the plugin version and any server-wide tags. On each start the plugin now checks config.yml and writes defaults over invalid values. No data format, permission or config key changes meaning. The only command that now refuses input it used to take is /m config set with values like yes, which used to be saved as false, so this is a bug fix and does not justify major. The TraceClient.builder signature change is in a bundled internal client, not the plugin's API.
- no interface or storage difference observed between the jars
<details><summary>Java API changes (informational — nothing depends on this plugin)</summary>
- dansplugins.mailboxes.factories.MailboxFactory: added public dansplugins.mailboxes.factories.MailboxFactory(dansplugins.mailboxes.services.ConfigService, dansplugins.mailboxes.data.PersistentData, dansplugins.mailboxes.utils.Logger, java.util.Random);
- dansplugins.mailboxes.services.ConfigService: added public void replaceUnusableConfigValues();
- dansplugins.mailboxes.trace.TraceClient: removed/changed public static dansplugins.mailboxes.trace.TraceClient$Builder builder(java.lang.String, java.lang.String);
- dansplugins.mailboxes.trace.TraceClient: added public java.lang.String installId();
- dansplugins.mailboxes.trace.TraceClient: added public static dansplugins.mailboxes.trace.TraceClient$Builder builder(java.lang.String, java.lang.String, java.lang.String);
- dansplugins.mailboxes.trace.TraceClient: added public static final java.lang.String VERSION;
- dansplugins.mailboxes.trace.TraceClient$Builder: added public dansplugins.mailboxes.trace.TraceClient$Builder installId(java.lang.String);
</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.4.0was 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
A server on v1.3.0 can drop this build in without touching its data or existing configuration. Two things are new and visible: players get a /m stats command, and the plugin now reports anonymous usage events (plugin name, version, command names) to the author's trace server, on by default, with the switch written into config.yml on first start. Several long-standing crashes and message ID collisions are also fixed.
Changes
New commands
- Added
/m stats, which shows a player their total, active, archived and unread message counts. Guarded by the newmailboxes.statspermission, which defaults to allowed, and listed in/m helpand tab completion. (#88)
Usage reporting
- The plugin sends a small event at startup and on each command use to
https://trace.danielstephenson.dev. Nothing about players or the server is included; sending happens off the main thread and is dropped silently if the server is unreachable. (#105) - Reporting can be turned off per plugin with
usage-reporting.enabled: falseinconfig.yml, for every trace-reporting plugin on the server withenabled: falseinplugins/trace/config.yml(created on first start), or for the whole process withTRACE_USAGE_REPORTING=offorDO_NOT_TRACK=1. The console states at every start whether reporting is on and, if not, why. (#105, #107) - An existing
config.ymlthat lacks theusage-reportingblock is rewritten on startup so the opt-out is visible on disk. (#107)
Fixes
/m deleteand/m archiveno longer throw when given a non-numeric ID or when the player has no mailbox; they report the problem instead. (#90)- New messages no longer reuse the ID of an archived message, which could previously make an archived message unreachable or shadow a new one. (#97)
- When random ID draws keep colliding, the plugin now sweeps for the lowest free ID instead of handing out one that is already taken. If every ID up to
maxMessageIDNumberis in use, message creation is refused with a console error and the sender is told the message could not be created. (#100) /m config setnow rejects non-numeric, zero and negative values formaxMessageIDNumber,maxMailboxIDNumberandmaxAttachmentStackSizeinstead of storing them; a zero or negativemaxMessageIDNumberpreviously broke all message creation. (#102)- Help and usage text now shows the required
(ID)argument for/m open,/m deleteand/m archive, the accepted/m listtypes, double quotes around the message in/m send, and the correct/m config setusage. (#97)
Upgrade notes
- Usage reporting is on by default. If you do not want it, set
usage-reporting.enabled: falseinplugins/Mailboxes/config.yml, or setenabled: falseinplugins/trace/config.ymlto turn it off for every plugin that reports to trace. Both files are created or updated on first start of this version. mailboxes.statsdefaults to allowed. If you manage permissions with an explicit allow-list, add it for players who should see/m stats.
Version
v1.3.0 → 1.4.0 — MINOR. Mechanical floor from comparing the two jars: MINOR.
Judgment: Nothing here changes what an existing v1.3.0 server has on disk, how an existing command is invoked, or what an existing config key or permission means. The candidate adds behaviour: a /m stats command with its permission, opt-out usage reporting that writes a new usage-reporting block into config.yml and creates plugins/trace/config.yml, and bug fixes for message ID collisions, command crashes, and config validation. MessageFactory's create methods can now return null, but only in the saturated-ID case where they previously handed out a duplicate ID, so that is treated as a fix rather than an incompatible API change. The mechanical floor of minor stands.
- minor: permission added: mailboxes.stats
- 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/mailboxes/data/PersistentData.java
<details><summary>Java API changes (informational — nothing depends on this plugin)</summary>
- public class added: dansplugins.mailboxes.commands.StatsCommand
- public class added: dansplugins.mailboxes.trace.TraceClient
- public class added: dansplugins.mailboxes.trace.TraceClient$Builder
- dansplugins.mailboxes.data.PersistentData: added public boolean isMessageIDInUse(int);
- dansplugins.mailboxes.data.PersistentData: added public java.util.Set<java.lang.Integer> getMessageIDsInUse();
- dansplugins.mailboxes.factories.MessageFactory: added public dansplugins.mailboxes.factories.MessageFactory(dansplugins.mailboxes.utils.UUIDChecker, dansplugins.mailboxes.services.ConfigService, dansplugins.mailboxes.data.PersistentData, dansplugins.mailboxes.utils.Logger, java.util.Random);
- dansplugins.mailboxes.services.ConfigService: added public boolean isUsageReportingEnabled();
- dansplugins.mailboxes.services.ConfigService: added public java.lang.String getUsageReportingEndpoint();
- dansplugins.mailboxes.services.ConfigService: added public java.lang.String getUsageReportingKey();
- dansplugins.mailboxes.utils.Logger: added public void logError(java.lang.String);
</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 Mailboxes'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/Mailboxes/pull/95.
Drafted by Claude on behalf of Daniel Stephenson.
This release focuses on usability and polish, making Mailboxes faster to use and easier to navigate.
Highlights
Tab Completion for Commands & Arguments
Commands are now easier and faster to use with intelligent tab completion.Paginated
/m listCommand
Large mailbox lists are now split into pages with clickable navigation.Enhanced Mailbox UI
Message IDs are now clickable, with added action buttons for quicker interaction directly from the UI.
Full Changelog
What's Changed
- Architecture refactor: Moved away from the Singleton pattern to improve flexibility, testability, and long-term maintainability.
- New feature: Added support for item attachments in mail messages, allowing mail to include items directly.
Full Changelog
https://github.com/Dans-Plugins/Mailboxes/compare/v1.1...v1.2.0
Changes in Mailboxes v1.1
- Added an API call to the external API.
- Informed players how many unread messages they have, not just that they have some.
- Fixed archived and unread messages not getting listed simplistically like active messages when specified in the /m list command.
- Fixed messages getting cut off if an apostrophe was used. Players will now be required to designate messages between double quotes.
Changes in Mailboxes v1.0
- Fixed active messages getting saved as archived messages and archived messages not getting saved at all.
- Added a config option for whether or not messages are surrounded by quotes when displayed.
- Added a legend to the output of the /m list command and simplified the output.
Changes in Mailboxes v0.10
- Added a config option for whether or not the mailbox assignment alert is displayed to the player.
- Implemented a caching system for mailbox lookups.
- Added the "unread" field to Message.java.
- Made it so that when a message is opened, its "unread" field will be set to false.
- Distinguished between read and unread messages when listing messages.
- Added a config option for whether or not players are alerted if they have unread messages when they join the server.
- Allowed players to list their unread messages with the /m list unread command.
- Created the Plugin Message class.
- Allowed developers to easily send a plugin message to a player.
- Fixed messages not getting loaded using child classes.
- Displayed the timestamp in a better format when listing messages.
Changes in Mailboxes v0.9
- Added a config option for whether or not the mailbox assignment alert is displayed to the player when they join the server for the first time.
- Added a config option for whether or not players are alerted if they have active messages when they join the server.
- Implemented a caching system for mailbox lookups.
Changes in Mailboxes v0.8
- Fixed the permissions for the delete and archive command being incorrectly specified in the plugin.yml.
- Fixed players not being alerted after successfully sending a message to another player.
Changes in Mailboxes v0.7
- Fixed the "maxMailboxIDNumber" config option not being listed in the output of the /m config show command.
- Added descriptions to the commands listed in the output of the help command.
- Allowed players to send messages to players without putting their IGNs between single quotes.
- Added a config option to prevent players from sending messages to themselves.
Changes in Mailboxes v0.6
- Integrated bStats with the plugin.
- Created an external API for developers to use.
Changes in Mailboxes v0.5
- Fixed saving and loading not working for messages.
- Added the /m delete command.
- Added the /m archive command.
- Made archived messages get saved separately.
- Allowed players to list archived messages by typing /m list archived.
Changes in Mailboxes v0.4
- Added the /m list command.
- Added the /m send command, allowing players to send messages to other players.
- Added the /m open command.
Changes in Mailboxes v0.3
- Implemented the Storage Manager class
- Made messages get saved and loaded.
- Made mailboxes get saved and loaded.
- Implemented the Scheduler class.
- Implemented an autosave feature.
Changes in Mailboxes v0.2
- Added the /m config command.
- Implemented the Config Manager class.
- Added the "debugMode" config option.
- Implemented the Message class.
- Implemented the Mailbox class.
- Implemented the Persistent Data class.
- Implemented the Join Handler class.
Related plugins
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.
