9
0
mirror of https://github.com/HibiscusMC/HibiscusCommons.git synced 2025-12-19 15:09:26 +00:00

feat: improve activating AllHooksActive event to better handle late loading

This commit is contained in:
LoJoSho
2025-01-09 15:47:28 -06:00
parent 5c7825bf4f
commit 09faac9131
5 changed files with 41 additions and 12 deletions

View File

@@ -13,10 +13,12 @@ public abstract class Hook implements Listener {
private final String id; private final String id;
private boolean detected = false;
private boolean active = false; private boolean active = false;
private boolean itemHook = false; private boolean itemHook = false;
private boolean entityHook = false; private boolean entityHook = false;
private boolean lateLoadHook = false;
public Hook(@NotNull String id, HookFlag... flags) { public Hook(@NotNull String id, HookFlag... flags) {
this.id = id; this.id = id;
@@ -28,6 +30,9 @@ public abstract class Hook implements Listener {
case ENTITY_SUPPORT: case ENTITY_SUPPORT:
setEnabledEntityHook(true); setEnabledEntityHook(true);
break; break;
case LATE_LOAD:
setEnabledLateLoadHook(true);
break;
} }
} }
@@ -92,9 +97,15 @@ public abstract class Hook implements Listener {
public final void setActive(boolean active) { public final void setActive(boolean active) {
this.active = active; this.active = active;
if (active) { if (hasEnabledLateLoadHook()) Hooks.checkHookLoadingStatus();
Hooks.checkHookLoadingStatus(); }
}
public final boolean isDetected() {
return this.detected;
}
public final void setDetected(boolean detected) {
this.detected = detected;
} }
/** /**
@@ -111,6 +122,10 @@ public abstract class Hook implements Listener {
return entityHook; return entityHook;
} }
public final boolean hasEnabledLateLoadHook() {
return lateLoadHook;
}
/** /**
* Sets whether the method {@link #getItem(String)} should return a non-null value * Sets whether the method {@link #getItem(String)} should return a non-null value
* *
@@ -124,6 +139,10 @@ public abstract class Hook implements Listener {
entityHook = enabled; entityHook = enabled;
} }
public final void setEnabledLateLoadHook(boolean enabled) {
lateLoadHook = enabled;
}
public String getItemString(@NotNull ItemStack itemStack) { public String getItemString(@NotNull ItemStack itemStack) {
return null; return null;
} }

View File

@@ -3,4 +3,5 @@ package me.lojosho.hibiscuscommons.hooks;
public enum HookFlag { public enum HookFlag {
ITEM_SUPPORT, ITEM_SUPPORT,
ENTITY_SUPPORT, ENTITY_SUPPORT,
LATE_LOAD
} }

View File

@@ -7,6 +7,7 @@ import me.lojosho.hibiscuscommons.api.events.HibiscusHooksAllActiveEvent;
import me.lojosho.hibiscuscommons.hooks.items.*; import me.lojosho.hibiscuscommons.hooks.items.*;
import me.lojosho.hibiscuscommons.hooks.misc.*; import me.lojosho.hibiscuscommons.hooks.misc.*;
import me.lojosho.hibiscuscommons.hooks.placeholders.HookPlaceholderAPI; import me.lojosho.hibiscuscommons.hooks.placeholders.HookPlaceholderAPI;
import me.lojosho.hibiscuscommons.util.MessagesUtil;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
@@ -16,12 +17,12 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
public class Hooks { public class Hooks {
private static final HashMap<String, Hook> HOOK_POOL = new HashMap<>(); private static final HashMap<String, Hook> HOOK_POOL = new HashMap<>();
private static final HookNexo NEXO_HOOK = new HookNexo(); private static final HookNexo NEXO_HOOK = new HookNexo();
private static final HookOraxen ORAXEN_HOOK = new HookOraxen(); private static final HookOraxen ORAXEN_HOOK = new HookOraxen();
private static final HookItemAdder ITEMADDER_HOOK = new HookItemAdder(); private static final HookItemAdder ITEMADDER_HOOK = new HookItemAdder();
@@ -40,7 +41,6 @@ public class Hooks {
private static final HookCustomFishing CF_HOOK = new HookCustomFishing(); private static final HookCustomFishing CF_HOOK = new HookCustomFishing();
private static final HookGSit GSIT_HOOK = new HookGSit(); private static final HookGSit GSIT_HOOK = new HookGSit();
private static final Map<String, Hook> HOOKED = new HashMap<>();
private static boolean allHooksActive = false; private static boolean allHooksActive = false;
public static Hook getHook(@NotNull String id) { public static Hook getHook(@NotNull String id) {
@@ -72,10 +72,9 @@ public class Hooks {
for (Hook hook : HOOK_POOL.values()) { for (Hook hook : HOOK_POOL.values()) {
if (Bukkit.getPluginManager().getPlugin(hook.getId()) != null) { if (Bukkit.getPluginManager().getPlugin(hook.getId()) != null) {
HibiscusCommonsPlugin.getInstance().getServer().getPluginManager().registerEvents(hook, HibiscusCommonsPlugin.getInstance()); HibiscusCommonsPlugin.getInstance().getServer().getPluginManager().registerEvents(hook, HibiscusCommonsPlugin.getInstance());
hook.setDetected(true);
hook.load(); hook.load();
HOOKED.put(hook.getId(), hook);
HibiscusCommonsPlugin.getInstance().getLogger().info("Successfully hooked into " + hook.getId()); HibiscusCommonsPlugin.getInstance().getLogger().info("Successfully hooked into " + hook.getId());
} }
} }
@@ -87,16 +86,26 @@ public class Hooks {
* This is an operation that occurs only once to allow plugins * This is an operation that occurs only once to allow plugins
* load their stuff successfully when all hooks are active. * load their stuff successfully when all hooks are active.
*/ */
static void checkHookLoadingStatus() { public static void checkHookLoadingStatus() {
if (allHooksActive) { if (allHooksActive) {
return; return;
} }
if (!HOOKED.values().stream() List<Hook> lateLoadHooks = HOOK_POOL.values().stream().filter(Hook::isDetected).filter(Hook::hasEnabledLateLoadHook).toList();
.allMatch(Hook::isActive)) { if (lateLoadHooks.isEmpty()) {
MessagesUtil.sendDebugMessages("Not awaiting anymore plugins... All hooks are now active.");
setAllHooksActive();
return; return;
} }
List<Hook> activeLateHooks = lateLoadHooks.stream().filter(Hook::isActive).toList();
if (activeLateHooks.size() == lateLoadHooks.size()) {
MessagesUtil.sendDebugMessages("Match Hook");
setAllHooksActive();
}
}
private static void setAllHooksActive() {
allHooksActive = true; allHooksActive = true;
Bukkit.getPluginManager().callEvent(new HibiscusHooksAllActiveEvent()); Bukkit.getPluginManager().callEvent(new HibiscusHooksAllActiveEvent());
} }

View File

@@ -23,7 +23,7 @@ import org.jetbrains.annotations.NotNull;
public class HookItemAdder extends Hook { public class HookItemAdder extends Hook {
public HookItemAdder() { public HookItemAdder() {
super("itemsadder", HookFlag.ITEM_SUPPORT); super("itemsadder", HookFlag.ITEM_SUPPORT, HookFlag.LATE_LOAD);
} }
/** /**

View File

@@ -19,7 +19,7 @@ import org.jetbrains.annotations.NotNull;
public class HookNexo extends Hook { public class HookNexo extends Hook {
public HookNexo() { public HookNexo() {
super("nexo", HookFlag.ITEM_SUPPORT); super("nexo", HookFlag.ITEM_SUPPORT, HookFlag.LATE_LOAD);
} }
/** /**