diff --git a/api/src/main/java/us/ajg0702/queue/api/premium/PermissionGetter.java b/api/src/main/java/us/ajg0702/queue/api/premium/PermissionGetter.java index d050a44..8960206 100644 --- a/api/src/main/java/us/ajg0702/queue/api/premium/PermissionGetter.java +++ b/api/src/main/java/us/ajg0702/queue/api/premium/PermissionGetter.java @@ -11,4 +11,6 @@ public interface PermissionGetter { int getPriority(AdaptedPlayer player); int getServerPriotity(String server, AdaptedPlayer player); + + boolean hasContextBypass(AdaptedPlayer player, String server); } diff --git a/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java b/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java index a9bcc87..eb1c545 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java +++ b/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java @@ -36,7 +36,11 @@ public class PremiumLogic implements Logic { QueueLogger logger = main.getLogger(); boolean debug = main.getConfig().getBoolean("priority-queue-debug"); - if(player.hasPermission("ajqueue.bypass") || player.hasPermission("ajqueue.serverbypass."+server.getName())) { + if( + player.hasPermission("ajqueue.bypass") || + player.hasPermission("ajqueue.serverbypass."+server.getName()) || + permissionGetter.hasContextBypass(player, server.getName()) + ) { if(debug) { logger.info("[priority] "+player.getName()+" bypass"); } 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 6ca9d1a..c2b02d2 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 @@ -60,6 +60,15 @@ public class PermissionGetterImpl implements PermissionGetter { return getHighestPermission(player, "ajqueue.serverpriority."+server+"."); } + @Override + public boolean hasContextBypass(AdaptedPlayer player, String server) { + if(getSelected() == null) { + return false; + } + List perms = getSelected().getPermissions(player); + return perms.contains("ajqueue.serverbypass."+server); + } + private int getHighestPermission(AdaptedPlayer player, String prefix) { if(getSelected() == null) { return -1; diff --git a/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/LuckPermsHook.java b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/LuckPermsHook.java index ed892ce..ed7401b 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/LuckPermsHook.java +++ b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/LuckPermsHook.java @@ -2,9 +2,11 @@ package us.ajg0702.queue.logic.permissions.hooks; import net.luckperms.api.LuckPerms; import net.luckperms.api.LuckPermsProvider; +import net.luckperms.api.context.Context; import net.luckperms.api.model.user.User; import net.luckperms.api.node.Node; import net.luckperms.api.node.NodeType; +import net.luckperms.api.query.QueryMode; import net.luckperms.api.query.QueryOptions; import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.common.QueueMain; @@ -43,7 +45,40 @@ public class LuckPermsHook implements PermissionHook { for (Node node : nodes) { if (!node.getType().equals(NodeType.PERMISSION)) continue; if (!node.getValue()) continue; - perms.add(node.getKey()); + String permission = node.getKey(); + + + if(permission.equalsIgnoreCase("ajqueue.contextbypass")) { + boolean skip = false; + for(Context context : node.getContexts()) { + if(context.getKey().equalsIgnoreCase("server")) { + skip = true; + perms.add("ajqueue.serverbypass."+context.getValue()); + } + } + if(skip) continue; + } + + if(permission.toLowerCase(Locale.ROOT).startsWith("ajqueue.contextpriority.")) { + boolean skip = false; + int level; + try { + level = Integer.parseInt(permission.substring(0, 24)); + } catch(NumberFormatException e) { + main.getLogger().warning("A non-number is in the priority permission "+permission); + continue; + } + for(Context context : node.getContexts()) { + if(context.getKey().equalsIgnoreCase("server")) { + skip = true; + perms.add("ajqueue.serverpriority."+context.getValue()+"."+level); + } + } + if(skip) continue; + } + + + perms.add(permission); } return perms;