Added api to register custom PermissionHooks

This commit is contained in:
ajgeiss0702
2023-09-22 09:40:11 -07:00
parent c0b736b781
commit 52938eeb4d
3 changed files with 41 additions and 10 deletions
@@ -3,6 +3,7 @@ package us.ajg0702.queue.api;
import us.ajg0702.queue.api.events.utils.EventReceiver; import us.ajg0702.queue.api.events.utils.EventReceiver;
import us.ajg0702.queue.api.premium.Logic; import us.ajg0702.queue.api.premium.Logic;
import us.ajg0702.queue.api.premium.LogicGetter; 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.queueholders.QueueHolderRegistry;
import us.ajg0702.queue.api.spigot.AjQueueSpigotAPI; import us.ajg0702.queue.api.spigot.AjQueueSpigotAPI;
import us.ajg0702.queue.api.util.QueueLogger; import us.ajg0702.queue.api.util.QueueLogger;
@@ -15,6 +16,8 @@ public abstract class AjQueueAPI {
public static QueueHolderRegistry queueHolderRegistry = new QueueHolderRegistry(); public static QueueHolderRegistry queueHolderRegistry = new QueueHolderRegistry();
public static PermissionHookRegistry permissionHookRegistry = new PermissionHookRegistry();
public static AjQueueAPI INSTANCE; public static AjQueueAPI INSTANCE;
public static AjQueueSpigotAPI SPIGOT_INSTANCE; public static AjQueueSpigotAPI SPIGOT_INSTANCE;
@@ -128,6 +131,10 @@ public abstract class AjQueueAPI {
return queueHolderRegistry; return queueHolderRegistry;
} }
public static PermissionHookRegistry getPermissionHookRegistry() {
return permissionHookRegistry;
}
public abstract <E> void listen(Class<E> event, EventReceiver<E> handler); public abstract <E> void listen(Class<E> event, EventReceiver<E> handler);
public abstract ExecutorService getServersUpdateExecutor(); public abstract ExecutorService getServersUpdateExecutor();
@@ -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<String, PermissionHook> 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<PermissionHook> getRegisteredHooks() {
return hooks.values();
}
}
@@ -1,9 +1,11 @@
package us.ajg0702.queue.logic.permissions; package us.ajg0702.queue.logic.permissions;
import us.ajg0702.queue.api.AjQueueAPI;
import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.api.premium.PermissionGetter; import us.ajg0702.queue.api.premium.PermissionGetter;
import us.ajg0702.queue.api.premium.PermissionHook; import us.ajg0702.queue.api.premium.PermissionHook;
import us.ajg0702.queue.common.QueueMain; 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.AquaCoreHook;
import us.ajg0702.queue.logic.permissions.hooks.BuiltInHook; import us.ajg0702.queue.logic.permissions.hooks.BuiltInHook;
import us.ajg0702.queue.logic.permissions.hooks.LuckPermsHook; import us.ajg0702.queue.logic.permissions.hooks.LuckPermsHook;
@@ -13,16 +15,15 @@ import java.util.*;
public class PermissionGetterImpl implements PermissionGetter { public class PermissionGetterImpl implements PermissionGetter {
private final List<PermissionHook> hooks;
private final QueueMain main; private final QueueMain main;
private PermissionHook builtInHook;
public PermissionGetterImpl(QueueMain main) { public PermissionGetterImpl(QueueMain main) {
hooks = Arrays.asList( AjQueueAPI.getPermissionHookRegistry().register(
new BuiltInHook(main),
new LuckPermsHook(main), new LuckPermsHook(main),
new UltraPermissionsHook(main), new UltraPermissionsHook(main),
new AquaCoreHook(main) new AquaCoreHook(main)
); );
builtInHook = new BuiltInHook(main);
this.main = main; this.main = main;
} }
@@ -30,16 +31,15 @@ public class PermissionGetterImpl implements PermissionGetter {
@Override @Override
public PermissionHook getSelected() { public PermissionHook getSelected() {
if(selected != null) return selected; if(selected != null) return selected;
if(hooks == null) { for(PermissionHook hook : AjQueueAPI.getPermissionHookRegistry().getRegisteredHooks()) {
throw new IllegalStateException("Hooks are not initialized yet!"); boolean canUse = hook.canUse();
} Debug.info(hook.getName() + " "+ canUse);
for(PermissionHook hook : hooks) { if(canUse) {
if(hook.canUse()) {
selected = hook; selected = hook;
} }
} }
if(selected == null) { if(selected == null) {
throw new IllegalStateException("All hooks are unusable!"); selected = builtInHook;
} }
main.getLogger().info("Using "+selected.getName()+" for permissions."); main.getLogger().info("Using "+selected.getName()+" for permissions.");
return selected; return selected;