diff --git a/RELEASE_NOTES_1.10.0.md b/RELEASE_NOTES_1.10.0.md
new file mode 100644
index 0000000..4680574
--- /dev/null
+++ b/RELEASE_NOTES_1.10.0.md
@@ -0,0 +1,69 @@
+## ๐ What's new
+
+Bank 1.10.0 is a modernisation release. The addon now targets **Java 21, Paper 1.21.11 and BentoBox 3.14.0**, and its entire locale set has been migrated to BentoBox's modern **MiniMessage** colour format. Alongside the platform work, this release adds a brand-new `latest_transaction` placeholder, ships a full set of language files (including a new Russian translation), and rebuilds the test suite on JUnit 5 + MockBukkit.
+
+Because of the platform and locale-format changes, this is not a drop-in update โ please read the **Updating** notes below before installing.
+
+## โจ Highlights
+
+### ๐บ Platform modernisation โ Java 21, Paper 1.21.11, BentoBox 3.14.0 (#65)
+- Build upgraded to **Java 21**, **Paper 1.21.11** and **BentoBox 3.14.0**
+- `plugin.yml` `api-version` bumped to **1.21**
+- Test suite migrated to **JUnit 5 + MockBukkit**
+- All Maven plugins updated to the latest stable versions and ~120 SonarCloud issues resolved (complexity, variable shadowing, test smells)
+
+### ๐ก ๐บ MiniMessage locale format (#64)
+- All locale files converted from legacy `&`/`ยง` colour codes to BentoBox's **MiniMessage** format
+- Aligns Bank with the rest of the 3.14.0 ecosystem and unlocks richer text formatting
+- Any custom locale edits you've made will need to be re-expressed in MiniMessage syntax
+
+### ๐ก New transaction placeholder (#61)
+- Adds `{gamemode}_latest_transaction`, showing a user's most recent island bank transaction
+- Renders as `[Username] [TxType] $[Amount]` (e.g. `tastybento Deposited $500.0`)
+- The placeholder text is fully localised
+
+### ๐ก Complete language coverage (#63)
+- Adds a new **Russian** locale plus every other language file BentoBox ships, so Bank now matches the full BentoBox locale set (23 languages)
+
+### ๐ Hardening
+- Hardened bank transaction-history parsing against malformed entries (#66)
+- Localised the latest-transaction placeholder fallback text (#66)
+- Numerous code-quality and safety fixes flagged by static analysis (#66)
+
+## โ๏ธ Compatibility
+
+โ๏ธ BentoBox API 3.14.0
+โ๏ธ Minecraft 1.21.5 - 26.1.x
+โ๏ธ Java 21
+
+## ๐บ Updating โ important notes
+
+๐บ **BentoBox 3.14.0 and Java 21 are required.** Update BentoBox first and make sure your server runs Java 21 before installing this version.
+
+๐ก ๐บ **Locale files were migrated to MiniMessage.** If you have customised any Bank language files, back them up and re-apply your changes in MiniMessage format. The simplest path is to delete the old locale files and let the addon regenerate them, then redo your edits.
+
+๐ก **New placeholder available.** `{gamemode}_latest_transaction` can be used wherever PlaceholderAPI placeholders are supported (e.g. scoreboards, holograms).
+
+## ๐ฅ How to update
+1. Stop the server
+2. Back up your BentoBox folder (especially any customised Bank locale files)
+3. Update BentoBox to 3.14.0 and confirm the server is running Java 21
+4. Drop the new Bank jar into the `addons` folder and remove the old one
+5. Start the server, then re-apply any custom locale edits in MiniMessage format
+6. You should be good to go!
+
+## Legend
+
+* ๐ก locale files may need to be regenerated or updated
+* โ๏ธ config options have been removed, renamed, or added
+* ๐บ special attention needed
+
+## What's Changed
+
+* ๐ก Add latest transaction placeholder by @tastybento in https://github.com/BentoBoxWorld/Bank/pull/61
+* ๐ก Add Russian locale and all missing BentoBox languages by @tastybento in https://github.com/BentoBoxWorld/Bank/pull/63
+* ๐ก ๐บ Convert locale color codes to MiniMessage format by @tastybento in https://github.com/BentoBoxWorld/Bank/pull/64
+* ๐บ Modernise to Java 21 / Paper 1.21.11 / BentoBox 3.14.0 by @tastybento in https://github.com/BentoBoxWorld/Bank/pull/65
+* ๐ก Release 1.10.0 โ harden history parsing, localise placeholder, code-quality fixes by @tastybento in https://github.com/BentoBoxWorld/Bank/pull/66
+
+**Full Changelog**: https://github.com/BentoBoxWorld/Bank/compare/1.9.1...1.10.0
diff --git a/pom.xml b/pom.xml
index 93f7bbb..f875cb9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,7 +63,7 @@
-LOCAL
- 1.10.0
+ 1.10.1
BentoBoxWorld_Bank
bentobox-world
https://sonarcloud.io
diff --git a/src/main/java/world/bentobox/bank/Bank.java b/src/main/java/world/bentobox/bank/Bank.java
index 791446c..86d4f74 100644
--- a/src/main/java/world/bentobox/bank/Bank.java
+++ b/src/main/java/world/bentobox/bank/Bank.java
@@ -37,16 +37,20 @@ public class Bank extends Addon {
public void onEnable() {
// Register flag
this.registerFlag(BANK_ACCESS);
- // Vault hook
+ // Vault hook. BentoBox hooks Vault before addons enable, so if no economy plugin had
+ // registered an economy provider yet, that early hook failed and was discarded. An addon
+ // (e.g. InvSwitcher) can provide an economy during enable, so retry the hook before giving up.
+ if (getPlugin().getVault().isEmpty()) {
+ getPlugin().getHooks().registerHook(new VaultHook());
+ }
if (getPlugin().getVault().isEmpty()) {
// Vault is required
logError("Vault is required - disabling Bank - please install the Vault plugin");
this.setState(State.DISABLED);
return;
- } else {
- // Get economy
- vault = getPlugin().getVault().get();
}
+ // Get economy
+ vault = getPlugin().getVault().get();
saveDefaultConfig();
settings = config.loadConfigObject();
if (settings == null) {
diff --git a/src/main/resources/addon.yml b/src/main/resources/addon.yml
index 560fb9e..7c5c47c 100644
--- a/src/main/resources/addon.yml
+++ b/src/main/resources/addon.yml
@@ -6,7 +6,7 @@ api-version: 1.15.4
authors: tastybento
-softdepend: AcidIsland, BSkyBlock, CaveBlock, SkyGrid, AOneBlock
+softdepend: AcidIsland, BSkyBlock, CaveBlock, SkyGrid, AOneBlock, InvSwitcher
permissions:
'[gamemode].bank.user':