!EzEconomy benchmark
Configuration: moved MySQL tuning keys into performance.mysql in the main config.yml. The plugin now prefers performance.mysql.* with fallbacks to mysql.* in config-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: /eco command permissions tightened. New granular permission nodes added: ezeconomy.eco.give, ezeconomy.eco.take, ezeconomy.eco.set, ezeconomy.eco.gui (GUI opens require ezeconomy.eco.gui), and ezeconomy.eco remains the umbrella admin node. Console execution still allowed.
debug flag: new top-level debug: false option in config.yml controls 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.DailyRewardManager and MessagingService now respect the unified debug flag instead of the previous per-feature toggles (daily-reward.debug and cross-server.verbose-logging).daily-reward.debug and cross-server.verbose-logging from config.yml - superseded by the new top-level debug option.!Bungeecord and Velocity support
ezeconomy-velocity module provides a Velocity proxy plugin for cross-server payment notifications and global player list broadcasting. Deploy ezeconomy-velocity.jar on your Velocity proxy alongside the main plugin on backend servers.MessagingService, MessagingTransport, and MessageType abstractions in core. Supports three transports: Velocity plugin messaging, BungeeCord plugin messaging, and Redis pub/sub.RedisMessagingTransport in the ezeconomy-redis module enables proxy-independent cross-server messaging via Redis pub/sub. Ideal for multi-proxy setups or networks already running Redis.StorageProvider.persistPlayerInfo() stores UUID/name/display name on join, enabling resolvePlayerByName() for cross-server name lookups.locking section in config.yml with ttl-ms, retry-ms, and max-attempts settings, replacing hardcoded values.docs/feature/cross-server.md and docs/integration/velocity.md covering all three messaging transports, configuration, and deployment.ezeconomy-velocity module.eco_give, baltop_footer, payment_cancelled, recipient_offline_queued./pay alias: ezpay.MySQLStorageProvider.persistPlayerInfo() implementation for explicit player data upserts.EzBungeeProxyPlugin now implements Listener, registers both ezeconomy:locks and ezeconomy:notify channels, handles payment notification forwarding, sends RECIPIENT_OFFLINE responses, and broadcasts the global player list every 3 seconds.main class reference, added description, enabled resource filtering for ${project.version}.<version> tags).docs/feature/proxy-network.md and docs/integration/bungeecord.md to reflect Velocity support and cross-server messaging.StorageProvider.transfer() now uses configurable lock timing via EzEconomyPlugin.getLockTtlMs/RetryMs/MaxAttempts().plugin.yml - Main class was pointing to the wrong class (EzBungeeProxy instead of EzBungeeProxyPlugin)./pay failing silently - Payments to players on other backend servers failed because the recipient was looked up only in Bukkit's local player cache. PayCommand now checks MessagingService.isNetworkPlayer() and StorageProvider.resolvePlayerByName() when local lookups fail.PaymentExecutor was using Bukkit.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 the StorageProvider interface was being used. Now queries the players table by name to return the correct UUID.plugin.yml now declares folia-supported: true so EzEconomy loads on Folia servers without being rejected as an unsupported plugin.api-version changed from 26.1.2 to 1.21 in both the main and PAPI module plugin.yml files. Paper build 69 introduced strict Minecraft-version format validation that rejected the old dotted build-number form.jdk25 Maven profile was setting maven.compiler.release=25, producing class file version 69 that Java 21 JVMs cannot load (UnsupportedClassVersionError). Lowered the release target to 21 (class file version 65) in both the default properties and the profile; the build JDK requirement ([25,)) is unchanged.
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.