diff --git a/api/src/main/java/us/ajg0702/queue/api/AjQueueAPI.java b/api/src/main/java/us/ajg0702/queue/api/AjQueueAPI.java index 4e1d906..fc868e3 100644 --- a/api/src/main/java/us/ajg0702/queue/api/AjQueueAPI.java +++ b/api/src/main/java/us/ajg0702/queue/api/AjQueueAPI.java @@ -3,6 +3,7 @@ package us.ajg0702.queue.api; import us.ajg0702.queue.api.events.utils.EventReceiver; import us.ajg0702.queue.api.premium.Logic; import us.ajg0702.queue.api.premium.LogicGetter; +import us.ajg0702.queue.api.premium.PermissionHookRegistry; import us.ajg0702.queue.api.queueholders.QueueHolderRegistry; import us.ajg0702.queue.api.spigot.AjQueueSpigotAPI; import us.ajg0702.queue.api.util.QueueLogger; @@ -15,6 +16,8 @@ public abstract class AjQueueAPI { public static QueueHolderRegistry queueHolderRegistry = new QueueHolderRegistry(); + public static PermissionHookRegistry permissionHookRegistry = new PermissionHookRegistry(); + public static AjQueueAPI INSTANCE; public static AjQueueSpigotAPI SPIGOT_INSTANCE; @@ -128,6 +131,10 @@ public abstract class AjQueueAPI { return queueHolderRegistry; } + public static PermissionHookRegistry getPermissionHookRegistry() { + return permissionHookRegistry; + } + public abstract void listen(Class event, EventReceiver handler); public abstract ExecutorService getServersUpdateExecutor(); diff --git a/api/src/main/java/us/ajg0702/queue/api/premium/PermissionHookRegistry.java b/api/src/main/java/us/ajg0702/queue/api/premium/PermissionHookRegistry.java new file mode 100644 index 0000000..8762cf9 --- /dev/null +++ b/api/src/main/java/us/ajg0702/queue/api/premium/PermissionHookRegistry.java @@ -0,0 +1,24 @@ +package us.ajg0702.queue.api.premium; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +public class PermissionHookRegistry { + private final Map hooks = new HashMap<>(); + + public void register(PermissionHook... permissionHooks) { + for (PermissionHook hook : permissionHooks) { + if(hooks.containsKey(hook.getName())) { + throw new IllegalArgumentException("Hook " + hook.getName() + " is already registered!"); + } + } + for (PermissionHook hook : permissionHooks) { + hooks.put(hook.getName(), hook); + } + } + + public Collection getRegisteredHooks() { + return hooks.values(); + } +} diff --git a/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetterImpl.java b/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetterImpl.java index 9cff1a4..e624b0e 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetterImpl.java +++ b/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetterImpl.java @@ -1,9 +1,11 @@ package us.ajg0702.queue.logic.permissions; +import us.ajg0702.queue.api.AjQueueAPI; import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.premium.PermissionGetter; import us.ajg0702.queue.api.premium.PermissionHook; import us.ajg0702.queue.common.QueueMain; +import us.ajg0702.queue.common.utils.Debug; import us.ajg0702.queue.logic.permissions.hooks.AquaCoreHook; import us.ajg0702.queue.logic.permissions.hooks.BuiltInHook; import us.ajg0702.queue.logic.permissions.hooks.LuckPermsHook; @@ -13,16 +15,15 @@ import java.util.*; public class PermissionGetterImpl implements PermissionGetter { - private final List hooks; - private final QueueMain main; + private PermissionHook builtInHook; public PermissionGetterImpl(QueueMain main) { - hooks = Arrays.asList( - new BuiltInHook(main), + AjQueueAPI.getPermissionHookRegistry().register( new LuckPermsHook(main), new UltraPermissionsHook(main), new AquaCoreHook(main) ); + builtInHook = new BuiltInHook(main); this.main = main; } @@ -30,16 +31,15 @@ public class PermissionGetterImpl implements PermissionGetter { @Override public PermissionHook getSelected() { if(selected != null) return selected; - if(hooks == null) { - throw new IllegalStateException("Hooks are not initialized yet!"); - } - for(PermissionHook hook : hooks) { - if(hook.canUse()) { + for(PermissionHook hook : AjQueueAPI.getPermissionHookRegistry().getRegisteredHooks()) { + boolean canUse = hook.canUse(); + Debug.info(hook.getName() + " "+ canUse); + if(canUse) { selected = hook; } } if(selected == null) { - throw new IllegalStateException("All hooks are unusable!"); + selected = builtInHook; } main.getLogger().info("Using "+selected.getName()+" for permissions."); return selected;