The item created via /withdraw now stores its value in an invisible PersistentDataContainer tag. When redeeming, only this tag is used — the item's name (which can be changed) is now irrelevant.
Previously, an item renamed with an anvil could be used to create coins from nothing. This is now impossible.
No More Server Freezes with Offline Players
Commands like /pay, /updatecoins, and /coins targeting offline players no longer trigger a [B]blocking web request on the main thread[/B]. Name resolution now uses the cached [ICODE]OfflinePlayer — it's fast, offline-safe, and prevents lag spikes.
Clean Vault Registration
CoinSystem now only registers as a Vault economy provider if settings.vault.enable is active, and it uses a Normal priority (previously, it always registered with Highest, overriding other economy plugins). The switch now works as expected.
️ Economy Integrity
The transfer() method is now refund-safe: if the recipient cannot be credited after the sender has been charged, the sender's balance is automatically restored. Coins can no longer vanish or be created.
The /pay command now uses this atomic transfer logic.
Singular/Plural Currency in Messages
The :currency: token now respects the amount. For a value of exactly 1, the singular name is used; otherwise, the plural is used (e.g., "1 Coin" instead of "1 Coins").
SQLite Files Moved
The database files are now located in plugins/CoinSystem/sqlite/ for a cleaner folder structure. Existing databases are moved automatically on first start.
[HR]
⚠️ Important Notes
The vault.enable setting is now enforced. If you use CoinSystem as your Vault economy, ensure this is set to true in your config.
Old withdraw items (created before v3.1.3) do not have the new security tag and are no longer redeemable. It is best to have your players redeem them before updating.