priority and bypass contexts
This commit is contained in:
@@ -11,4 +11,6 @@ public interface PermissionGetter {
|
||||
int getPriority(AdaptedPlayer player);
|
||||
|
||||
int getServerPriotity(String server, AdaptedPlayer player);
|
||||
|
||||
boolean hasContextBypass(AdaptedPlayer player, String server);
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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<String> perms = getSelected().getPermissions(player);
|
||||
return perms.contains("ajqueue.serverbypass."+server);
|
||||
}
|
||||
|
||||
private int getHighestPermission(AdaptedPlayer player, String prefix) {
|
||||
if(getSelected() == null) {
|
||||
return -1;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user