Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
ajgeiss0702
2021-09-26 10:43:10 -07:00
4 changed files with 52 additions and 2 deletions
@@ -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;