priority and bypass contexts
This commit is contained in:
@@ -11,4 +11,6 @@ public interface PermissionGetter {
|
|||||||
int getPriority(AdaptedPlayer player);
|
int getPriority(AdaptedPlayer player);
|
||||||
|
|
||||||
int getServerPriotity(String server, 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();
|
QueueLogger logger = main.getLogger();
|
||||||
boolean debug = main.getConfig().getBoolean("priority-queue-debug");
|
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) {
|
if(debug) {
|
||||||
logger.info("[priority] "+player.getName()+" bypass");
|
logger.info("[priority] "+player.getName()+" bypass");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,6 +60,15 @@ public class PermissionGetterImpl implements PermissionGetter {
|
|||||||
return getHighestPermission(player, "ajqueue.serverpriority."+server+".");
|
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) {
|
private int getHighestPermission(AdaptedPlayer player, String prefix) {
|
||||||
if(getSelected() == null) {
|
if(getSelected() == null) {
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
@@ -2,9 +2,11 @@ package us.ajg0702.queue.logic.permissions.hooks;
|
|||||||
|
|
||||||
import net.luckperms.api.LuckPerms;
|
import net.luckperms.api.LuckPerms;
|
||||||
import net.luckperms.api.LuckPermsProvider;
|
import net.luckperms.api.LuckPermsProvider;
|
||||||
|
import net.luckperms.api.context.Context;
|
||||||
import net.luckperms.api.model.user.User;
|
import net.luckperms.api.model.user.User;
|
||||||
import net.luckperms.api.node.Node;
|
import net.luckperms.api.node.Node;
|
||||||
import net.luckperms.api.node.NodeType;
|
import net.luckperms.api.node.NodeType;
|
||||||
|
import net.luckperms.api.query.QueryMode;
|
||||||
import net.luckperms.api.query.QueryOptions;
|
import net.luckperms.api.query.QueryOptions;
|
||||||
import us.ajg0702.queue.api.players.AdaptedPlayer;
|
import us.ajg0702.queue.api.players.AdaptedPlayer;
|
||||||
import us.ajg0702.queue.common.QueueMain;
|
import us.ajg0702.queue.common.QueueMain;
|
||||||
@@ -43,7 +45,40 @@ public class LuckPermsHook implements PermissionHook {
|
|||||||
for (Node node : nodes) {
|
for (Node node : nodes) {
|
||||||
if (!node.getType().equals(NodeType.PERMISSION)) continue;
|
if (!node.getType().equals(NodeType.PERMISSION)) continue;
|
||||||
if (!node.getValue()) 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;
|
return perms;
|
||||||
|
|||||||
Reference in New Issue
Block a user