Skip to content

Commit d580fb2

Browse files
authored
Merge pull request #2995 from BentoBoxWorld/fix/retry-vault-hook-after-addons
fix: retry Vault hook after addons enable
2 parents f3d1f88 + 9f0dc68 commit d580fb2

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

src/main/java/world/bentobox/bentobox/BentoBox.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff 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

src/main/java/world/bentobox/bentobox/hooks/BentoBoxHookRegistrar.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff 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.

0 commit comments

Comments
 (0)