File tree Expand file tree Collapse file tree
src/main/java/world/bentobox/bentobox Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -206,6 +206,11 @@ private void completeSetup(long loadTime) {
206206 // Enable addons
207207 addonsManager .enableAddons ();
208208
209+ // Addons may register a Vault economy provider during their onEnable (e.g. InvSwitcher),
210+ // after the early Vault hook already failed for lack of any economy. Retry now so getVault()
211+ // reflects an economy an addon has since provided.
212+ hookRegistrar .registerVaultHookIfNeeded ();
213+
209214 // Register default gamemode placeholders
210215 addonsManager .getGameModeAddons ().forEach (placeholdersManager ::registerDefaultPlaceholders );
211216
Original file line number Diff line number Diff line change @@ -36,6 +36,22 @@ public void registerEarlyHooks() {
3636 hooksManager .registerHook (new PlaceholderAPIHook ());
3737 }
3838
39+ /**
40+ * Re-attempts the Vault economy hook after addons have been enabled.
41+ * <p>
42+ * BentoBox hooks Vault during {@link #registerEarlyHooks()}, before addons are enabled. An addon
43+ * may register a Vault economy provider in its own {@code onEnable()} (e.g. InvSwitcher, which
44+ * provides per-world balances), after that early attempt already failed for lack of any economy.
45+ * A failed hook is discarded by {@link HooksManager}, so {@link BentoBox#getVault()} would stay
46+ * empty even though an economy now exists. This gives the now-present economy a chance to be
47+ * picked up. No-op if Vault is already hooked.
48+ */
49+ public void registerVaultHookIfNeeded () {
50+ if (plugin .getVault ().isEmpty ()) {
51+ hooksManager .registerHook (new VaultHook ());
52+ }
53+ }
54+
3955 /**
4056 * Registers world-manager hooks (Multiverse variants) that load after BentoBox worlds.
4157 * Must be called after {@code islandWorldManager.registerWorldsToMultiverse()} is ready.
You can’t perform that action at this time.
0 commit comments