Repository navigation
1.4.0
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
Java API changes (informational — nothing depends on this plugin)
- 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);
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