All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
- The
Dev Releaseworkflow now retries publishing thedevprerelease before giving up. The release and its tag have to be deleted and recreated for the tag to move to the new commit, and a transient API failure inside that window previously left the repository with nodevrelease at all until the workflow was re-run by hand. Each attempt now starts from a clean slate, and an exhausted retry fails loudly.
- The plugin now reports usage events —
startupon enable,commandon each use of/currencyor/coinpurse— to the author's trace server so it is known which plugins are in use. Events carry the plugin name, the event name, and the plugin version or command name; nothing about players or the server. Reporting runs off the main thread, never delays a tick, drops silently when the server is unreachable, and is turned off withusage-reporting.enabled: falseinconfig.yml. The default config carries the plugin's key, so reporting is active out of the box unless turned off — including on servers upgraded from a version before theusage-reportingblock existed, whoseconfig.ymlis never rewritten bysaveDefaultConfig(): the plugin reads the bundled defaults for any key the file lacks - Added the project's first unit tests, covering
/currencysubcommand routing and its usage message. The Medieval Factions jar is now also on the test runtime classpath, which mocking the plugin class requires; it remainscompileOnlyfor the shaded jar - Extended the unit tests to
/currency setrouting and tab completion, and to/currency balance, whose report is built on the scheduler's async thread and is now exercised by capturing and running the scheduled task - Extended the unit tests to
/currency retire, covering its permission and faction-role gates, the confirmation prompt and its clickable confirm component, multi-word currency name resolution, and the save-failure path. Retiring a currency is one of the two supply-mutating commands, so its behaviour is now locked in against regression - A
Dev Releaseworkflow, which republishes a rollingdevprerelease ofmainon every non-documentation push. This is what Dan's Plugin Manager's experimental channel installs from:/dpm get currencies --experimentalreadsreleases/tags/dev, so without it there is nothing for that command to download. The prerelease is unreleased, unreviewed code and is marked as such.
- Fixed the
/currencyusage message omitting therenamesubcommand, which is both routed and tab-completed but was never advertised - Fixed
/currency retireand/currency infofailing to resolve a currency whose name was given in double quotes. Bukkit splits arguments on spaces before the plugin sees them, and neither command stripped the quote characters afterwards, so/currency retire "Gold Coin" confirmreported that no such currency existed. Both commands now unquote their arguments, as/currency mint,/currency set nameand/currency set descriptionalready did
- Currencies is now developed AI-first. Day-to-day feature work, grooming, review and maintenance run through AI agents working directly against this repository, with the maintainers setting direction and approving what lands. The major version bump marks that change in how the project is built — it is not a break in behaviour, configuration or stored data, and existing installations can upgrade in place. Released as
3.0.0-SNAPSHOT-8-8-2026: the AI-first line has not yet been verified in live operation, and the dated snapshot designation stays until it has.
- Added attribution for alyphen to the developers table in
README.md
- Documented that
/currency createuses the item held in the main hand and accepts--rename/--no-renameto answer its rename prompt up front - Corrected
/currency list, which lists every active currency on the server rather than only the caller's faction's, and documented itsall/retired/faction filters and page argument - Documented that the amount argument of
/currency mintis optional and defaults to1 - Documented the
confirmargument of/currency retireand the confirmation prompt shown without it - Documented that
/currency set nameand/currency set descriptionfall back to a chat prompt when the new value is omitted - Corrected the description of
currencies.showAmountMinted, which controls theMinted:line in/currency inforather than a message shown after minting - Corrected
currencies.powerCost, which is a decimal charged per coin minted rather than an integer charged per mint operation - Corrected the power cost wording throughout, since the cost is deducted from the minting player's power rather than faction power
- Corrected the description of
currencies.itemCostEnabled, which consumes the currency's own item type per coin rather than a cost configured per currency
- Removed Currencies 1 migration code (
legacypackage and the associated startup migration checks), since servers now run exclusively on Currencies 2
- Fixed
/currency createwith--rename/--no-renamefailing with a database constraint error when a currency with that name already existed, because the duplicate-name check compared against the raw arguments (including the flag) instead of the parsed currency name
- Updated dependencies
- Database-backed storage using jOOQ and Flyway
- HikariCP connection pooling
- Support for MariaDB and H2 databases
- PlaceholderAPI integration
- bStats metrics (plugin ID 12810)
- Migrated codebase to Kotlin
- Rewrote currency and balance services
- Initial release
- Faction-based currency creation and minting
- Coinpurse inventory system
- Power cost and item cost for minting
- Protection against crafting, smelting, placement, and anvil usage of currency items