
EzEconomy
Modern, fast, and flexible Vault economy provider for Minecraft servers. Supports YML, MySQL, SQLite, MongoDB, and custom storage. Multi-currency, async caching, and robust permissions for any server size.
Added
- Performance and reliability improvements to balance fast-path caching and background persistence.
Changed
- Reduced DB contention and improved fast-path caching semantics for balances to provide more consistent immediate responses under load.
- Withdraw fast-path: added per-key striped locking to prevent concurrent over-reservations.
- Shutdown ordering: background persistence flush now runs before closing JDBC pools to guarantee pending deltas are persisted.

-
Configuration: moved MySQL tuning keys into
performance.mysqlin the mainconfig.yml. The plugin now prefersperformance.mysql.*with fallbacks tomysql.*inconfig-mysql.yml; documentation and default configs were updated. -
Added MySQL tuning options and safer defaults: background persistence batching/queueing settings and additional Hikari pool tuning keys (
leak-detection-threshold-ms,validation-timeout-ms,initialization-fail-timeout-ms,auto-commit). JDBC params now include UTF-8 encoding by default. -
Security:
/ecocommand permissions tightened. New granular permission nodes added:ezeconomy.eco.give,ezeconomy.eco.take,ezeconomy.eco.set,ezeconomy.eco.gui(GUI opens requireezeconomy.eco.gui), andezeconomy.ecoremains the umbrella admin node. Console execution still allowed.
Fixed
- Race conditions where multiple concurrent withdraws could exceed the persisted balance.
- Background flush failures during shutdown caused by closed connections.
Added
- Global
debugflag: new top-leveldebug: falseoption inconfig.ymlcontrols all verbose/diagnostic logging in one place. When enabled, Jaloquent's internal SQL logging and plugin-level debug messages (cross-server messaging, daily-reward diagnostics) are written to the server console.
Changed
DailyRewardManagerandMessagingServicenow respect the unifieddebugflag instead of the previous per-feature toggles (daily-reward.debugandcross-server.verbose-logging).
Removed
- Per-feature debug flags
daily-reward.debugandcross-server.verbose-loggingfromconfig.yml- superseded by the new top-leveldebugoption.
- Global

Added
- Velocity proxy support - New
ezeconomy-velocitymodule provides a Velocity proxy plugin for cross-server payment notifications and global player list broadcasting. Deployezeconomy-velocity.jaron your Velocity proxy alongside the main plugin on backend servers. - Cross-server messaging layer - New
MessagingService,MessagingTransport, andMessageTypeabstractions in core. Supports three transports: Velocity plugin messaging, BungeeCord plugin messaging, and Redis pub/sub. - Redis pub/sub messaging - New
RedisMessagingTransportin theezeconomy-redismodule enables proxy-independent cross-server messaging via Redis pub/sub. Ideal for multi-proxy setups or networks already running Redis. - Pending notifications - Payment notifications for offline players are now stored in the database and delivered on next join. Implemented in all four storage backends (YML, MySQL, SQLite, MongoDB).
- Player info persistence -
StorageProvider.persistPlayerInfo()stores UUID/name/display name on join, enablingresolvePlayerByName()for cross-server name lookups. - Configurable lock timing - New
lockingsection inconfig.ymlwithttl-ms,retry-ms, andmax-attemptssettings, replacing hardcoded values. - VaultEconomyImpl distributed locking - Withdraw and bank withdraw operations now acquire distributed locks (with local fallback) to prevent race conditions in multi-server environments.
- Cross-server documentation - New
docs/feature/cross-server.mdanddocs/integration/velocity.mdcovering all three messaging transports, configuration, and deployment. - Velocity CI workflow - GitHub Actions workflow for the
ezeconomy-velocitymodule. - MessagingComponent - Bootstrap component that initialises cross-server messaging during plugin startup.
- New message keys:
eco_give,baltop_footer,payment_cancelled,recipient_offline_queued. /payalias:ezpay.MySQLStorageProvider.persistPlayerInfo()implementation for explicit player data upserts.
Changed
- BungeeCord proxy overhaul -
EzBungeeProxyPluginnow implementsListener, registers bothezeconomy:locksandezeconomy:notifychannels, handles payment notification forwarding, sendsRECIPIENT_OFFLINEresponses, and broadcasts the global player list every 3 seconds. - BungeeCord proxy plugin.yml - Fixed
mainclass reference, addeddescription, enabled resource filtering for${project.version}. - All sub-module POM versions now inherit from the parent (removed explicit
<version>tags). - Updated README with cross-server messaging, Velocity integration, and distributed locking documentation links.
- Updated
docs/feature/proxy-network.mdanddocs/integration/bungeecord.mdto reflect Velocity support and cross-server messaging. StorageProvider.transfer()now uses configurable lock timing viaEzEconomyPlugin.getLockTtlMs/RetryMs/MaxAttempts().
Fixed
- BungeeCord proxy
plugin.yml- Main class was pointing to the wrong class (EzBungeeProxyinstead ofEzBungeeProxyPlugin). - BungeeCord channel mismatches - Unified lock and notification channels across server and proxy modules.
- PaymentExecutor cross-server notifications - Offline recipients now receive payment notifications via cross-server messaging instead of silently dropping the message.
- Cross-server
/payfailing silently - Payments to players on other backend servers failed because the recipient was looked up only in Bukkit's local player cache.PayCommandnow checksMessagingService.isNetworkPlayer()andStorageProvider.resolvePlayerByName()when local lookups fail. - Incorrect UUID for cross-server recipients -
PaymentExecutorwas usingBukkit.getOfflinePlayer(name)which generates an offline-mode UUID for players who have never joined the local server. It now resolves the correct UUID from the messaging service or shared database. MySQLStorageProvider.resolvePlayerByName()not implemented - The default no-op from theStorageProviderinterface was being used. Now queries theplayerstable by name to return the correct UUID.
- Velocity proxy support - New
Fixed
- Folia compatibility —
plugin.ymlnow declaresfolia-supported: trueso EzEconomy loads on Folia servers without being rejected as an unsupported plugin. - API version format —
api-versionchanged from26.1.2to1.21in both the main and PAPI moduleplugin.ymlfiles. Paper build 69 introduced strict Minecraft-version format validation that rejected the old dotted build-number form. - Java 21 runtime compatibility — The
jdk25Maven profile was settingmaven.compiler.release=25, producing class file version 69 that Java 21 JVMs cannot load (UnsupportedClassVersionError). Lowered the release target to21(class file version 65) in both the default properties and the profile; the build JDK requirement ([25,)) is unchanged.
- Folia compatibility —
Added
Changed
Fixed
Removed
Added
Changed
Fixed
Removed
Added
Changed
Fixed
Removed
Added
Changed
Fixed
Removed
Added
Changed
Fixed
Removed
Added
- Auto-create bank on join - Players now automatically get a personal bank named after themselves on first join. Controlled by
banking.auto-create-on-join(defaulttrue); respects the existingbanking.enabledgate. Idempotent: no duplicate bank is created if one already exists. bank_not_foundmessage key - "Bank does not exist" errors now route through a localisedbank_not_foundmessage key (&cprefix) instead of a raw white string. Added to bothenandnllocales./bank deposit//bank withdrawoptional name - Both commands now accept[name] <amount> [currency]so players can run/bank deposit 100to deposit into their own bank without having to type their name.usage_bank_deposit/usage_bank_withdrawmessage keys - Matching usage hint messages added toenandnllocales.
Fixed
- Server deadlock -
callSyncMethod(...).get()was called unconditionally from the main thread during bank commands, causing the server to hang indefinitely. AnisPrimaryThread()guard now ensures events fired from the main thread are dispatched directly, while background-thread calls still schedule and await a sync task. autoCreateBankearly-return bug -autoCreateBank()was placed after thestore-on-joingate inPlayerJoinListener, meaning it was never called whenstore-on-join.enabledis false (the default). It now runs independently of that gate.
Refactored
- Introduced
util/EventDispatcher- a single, reusable utility class that encapsulates the thread-safe Bukkit event dispatch pattern (fireSync/fireSyncAndAllow). All storage providers andPaymentExecutornow delegate to this class instead of duplicating the guard inline.
Tests
- Added
PlayerJoinListenerAutoCreateBankTest(4 tests) covering: bank created on join, creation skipped whenauto-create-on-join: false, creation skipped whenbanking.enabled: false, and no duplicate creation for a pre-existing bank.
- Auto-create bank on join - Players now automatically get a personal bank named after themselves on first join. Controlled by
What's Changed
- cd: added Modrinth release in https://github.com/ez-plugins/EzEconomy/pull/139
- fixed: issue #138 (3.0.1 not released to Github Packages)
Full Changelog: https://github.com/ez-plugins/EzEconomy/compare/3.0.1...3.0.2
- Updated to Minecraft 26.1
- Updated to Java 25
- Refactored back-end to Jaloquent
- Added Github Pages documentation: https://ez-plugins.github.io/EzEconomy
Make sure with upgrading to this version you renew the main configuration file and your messages file.
For a more stable version recommended for now to use
2.4.3. The2.5.0is still in testing phase- Banking toggle by @ez-plugins in https://github.com/ez-plugins/EzEconomy/pull/65
- Added redis lock support for proxy networks by @ez-plugins in https://github.com/ez-plugins/EzEconomy/pull/62
- Bungeecord locking strategy by @ez-plugins in https://github.com/ez-plugins/EzEconomy/pull/67
- Added
locking-strategyconfiguration option toconfig.yml - Added
caching-strategyconfiguration option toconfig.yml
- Added
- Up version to 2.5.0 by @ez-plugins in https://github.com/ez-plugins/EzEconomy/pull/66
Full Changelog: https://github.com/ez-plugins/EzEconomy/compare/2.4.3...2.5.0
- Fix BigDecimal for currency conversion by @ez-plugins in https://github.com/ez-plugins/EzEconomy/pull/63
- Added prevention zero-rounded currency conversions (#59)
What's Changed
- docs: add /currency convert usage to commands.md by @ez-plugins in https://github.com/ez-plugins/EzEconomy/pull/49
- Fix BalanceCommand: prefer currency arg and avoid Mojang lookups; add… by @ez-plugins in https://github.com/ez-plugins/EzEconomy/pull/52
- Create user account through provider on join by @ez-plugins in https://github.com/ez-plugins/EzEconomy/pull/53
- Improve Spigot update check by @ez-plugins in https://github.com/ez-plugins/EzEconomy/pull/54
- Store player display names for easier cached display by @ez-plugins in https://github.com/ez-plugins/EzEconomy/pull/55
- fix: check if balance is available before convertion by @ez-plugins in https://github.com/ez-plugins/EzEconomy/pull/57
Full Changelog: https://github.com/ez-plugins/EzEconomy/compare/2.4.0...2.4.1
Recommended to reset your configuration files and check differences when using custom configurations and doing a bigger update from earlier versions.
- Separated PlaceholderAPI to it's own .jar file
- Fixed issue storage type loading the wrong path resulting in
ymlbeing chosen by default
- Fixed issue storage type loading the wrong path resulting in
What's Changed
- feat: added player eco GUIs by @ez-plugins in https://github.com/ez-plugins/EzEconomy/pull/35
- Refactor: moved bootstrap logic by @ez-plugins in https://github.com/ez-plugins/EzEconomy/pull/42
- Add configurable price_message_format for message templates by @ez-plugins in https://github.com/ez-plugins/EzEconomy/pull/45
Full Changelog: https://github.com/ez-plugins/EzEconomy/compare/2.2.4...2.3.0
Feature changes
- Added
<currency>argument to/balance <player> [<currency>] - Added
<currency>argument to/pay <player> [<currency>] - Added new conversion calculation subcommand
/currency convert <fromCurrency> <toCurrency> <amount> - Added new messages and placeholders to give better support for multi-currency usage
Code changes
- Improved feature tests
- Added
CurrencyUtilfor easier reusage
- Added
