From 93ce4b60f39b72db61f9e4ecb8ea390f7a4ab847 Mon Sep 17 00:00:00 2001 From: jascotty2 Date: Mon, 26 Aug 2019 16:30:32 -0500 Subject: [PATCH] fix plugin-specific hooks --- .../songoda/core/hooks/HologramManager.java | 11 ++++++---- .../com/songoda/core/hooks/HookManager.java | 22 ++++++++++++++++--- .../com/songoda/core/hooks/PluginHook.java | 4 ++-- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/songoda/core/hooks/HologramManager.java b/src/main/java/com/songoda/core/hooks/HologramManager.java index a2cc2151..0786c66c 100644 --- a/src/main/java/com/songoda/core/hooks/HologramManager.java +++ b/src/main/java/com/songoda/core/hooks/HologramManager.java @@ -3,6 +3,7 @@ package com.songoda.core.hooks; import com.songoda.core.hooks.holograms.Holograms; import org.bukkit.Location; import java.util.List; +import org.bukkit.plugin.Plugin; /** * A convenience class for static access to a Holograms HookManager @@ -12,11 +13,13 @@ public class HologramManager { private static final HookManager manager = new HookManager(Holograms.class); /** - * Load all supported economy plugins.
- * Note: This method should be called in your plugin's onEnable() section + * Load all supported economy plugins.
+ * Note: This method should be called in your plugin's onEnable() section + * + * @param plugin plugin that will be using the holograms */ - public static void load() { - manager.load(); + public static void load(Plugin plugin) { + manager.load(plugin); } public static HookManager getManager() { diff --git a/src/main/java/com/songoda/core/hooks/HookManager.java b/src/main/java/com/songoda/core/hooks/HookManager.java index 977f2df1..e5c00c15 100644 --- a/src/main/java/com/songoda/core/hooks/HookManager.java +++ b/src/main/java/com/songoda/core/hooks/HookManager.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import org.bukkit.plugin.Plugin; public class HookManager { @@ -23,7 +24,22 @@ public class HookManager { */ public void load() { if (!loaded) { - registeredHooks.putAll(PluginHook.loadHooks(typeClass).entrySet().stream() + registeredHooks.putAll(PluginHook.loadHooks(typeClass, null).entrySet().stream() + .collect(Collectors.toMap(e -> e.getKey(), e -> (T) e.getValue()))); + if (!registeredHooks.isEmpty()) { + defaultHook = (T) registeredHooks.values().iterator().next(); + } + loaded = true; + } + } + + /** + * Load all supported plugins. + * @param hookingPlugin plugin to pass to the hook handler + */ + public void load(Plugin hookingPlugin) { + if (!loaded) { + registeredHooks.putAll(PluginHook.loadHooks(typeClass, hookingPlugin).entrySet().stream() .collect(Collectors.toMap(e -> e.getKey(), e -> (T) e.getValue()))); if (!registeredHooks.isEmpty()) { defaultHook = (T) registeredHooks.values().iterator().next(); @@ -127,8 +143,8 @@ public class HookManager { * @return an immutable collection of plugin names that can be used. */ public List getPossiblePlugins() { - return PluginHook.loadHooks(typeClass).values().stream() - .map(v -> v.getName()) + return PluginHook.getHooks(typeClass).stream() + .map(v -> v.plugin) .collect(Collectors.toList()); } diff --git a/src/main/java/com/songoda/core/hooks/PluginHook.java b/src/main/java/com/songoda/core/hooks/PluginHook.java index b32b5576..ddd0210a 100644 --- a/src/main/java/com/songoda/core/hooks/PluginHook.java +++ b/src/main/java/com/songoda/core/hooks/PluginHook.java @@ -61,13 +61,13 @@ public final class PluginHook { } } - protected static Map loadHooks(Class type) { + protected static Map loadHooks(Class type, Plugin plugin) { Map loaded = new LinkedHashMap<>(); PluginManager pluginManager = Bukkit.getPluginManager(); for (PluginHook hook : getHooks(type)) { if (pluginManager.isPluginEnabled(hook.plugin)) { - Hook handler = (Hook) hook.load(); + Hook handler = (Hook) (plugin != null ? hook.load(plugin) : hook.load()); if (handler != null && handler.isEnabled()) { loaded.put(hook, handler); }