premium logic finished

This commit is contained in:
ajgeiss0702
2021-07-28 14:25:05 -07:00
parent a88a142348
commit 15fd7f61ad
26 changed files with 267 additions and 91 deletions
+8
View File
@@ -9,6 +9,8 @@ group = "us.ajg0702.queue"
repositories {
mavenCentral()
maven { url = uri("https://repo.ajg0702.us") }
maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots") }
}
dependencies {
@@ -22,6 +24,12 @@ dependencies {
compileOnly("us.ajg0702:ajUtils:1.1.6")
compileOnly("net.kyori:adventure-api:4.8.1")
compileOnly("net.luckperms:api:5.0")
}
tasks.shadowJar {
archiveFileName.set("${baseName}-${version}.${extension}")
}
publishing {
@@ -3,12 +3,13 @@ package us.ajg0702.queue.logic;
import us.ajg0702.queue.api.AliasManager;
import us.ajg0702.queue.api.Logic;
import us.ajg0702.queue.api.LogicGetter;
import us.ajg0702.queue.common.QueueMain;
import us.ajg0702.utils.common.Config;
public class LogicGetterImpl implements LogicGetter {
@Override
public Logic constructLogic() {
return new PremiumLogic();
return new PremiumLogic(QueueMain.getInstance());
}
@Override
@@ -11,6 +11,12 @@ import us.ajg0702.queue.common.players.QueuePlayerImpl;
import us.ajg0702.queue.logic.permissions.PermissionGetter;
public class PremiumLogic implements Logic {
private final PermissionGetter permissionGetter;
public PremiumLogic(QueueMain main) {
permissionGetter = new PermissionGetter(main);
}
@Override
public boolean isPremium() {
return true;
@@ -18,27 +24,34 @@ public class PremiumLogic implements Logic {
@Override
public QueuePlayer priorityLogic(QueueServer server, AdaptedPlayer player) {
int maxOfflineTime = PermissionGetter.getMaxOfflineTime(player);
int maxOfflineTime = permissionGetter.getMaxOfflineTime(player);
QueueMain main = QueueMain.getInstance();
QueueLogger logger = main.getLogger();
boolean debug = main.getConfig().getBoolean("priority-queue-debug");
if(player.hasPermission("ajqueue.bypass") || player.hasPermission("ajqueue.serverbypass."+server.getName())) {
if(debug) {
logger.info("[priority] "+player.getName()+" bypass");
}
QueuePlayer queuePlayer = new QueuePlayerImpl(player, server, Integer.MAX_VALUE, maxOfflineTime);
server.addPlayer(queuePlayer, 0);
main.getQueueManager().sendPlayers(server);
return queuePlayer;
}
int priority = PermissionGetter.getPriority(player);
int serverPriority = PermissionGetter.getServerPriotity(server.getName(), player);
int priority = permissionGetter.getPriority(player);
int serverPriority = permissionGetter.getServerPriotity(server.getName(), player);
if(debug) {
logger.info("[priority] Using "+permissionGetter.getSelected().getName()+" for permissions");
}
int highestPriority = Math.max(priority, serverPriority);
QueuePlayer queuePlayer = new QueuePlayerImpl(player, server, highestPriority, maxOfflineTime);
QueueLogger logger = main.getLogger();
boolean debug = main.getConfig().getBoolean("priority-queue-debug");
if(debug) {
logger.info("[priority] "+player.getName()+" highestPriority: "+highestPriority);
logger.info("[priority] "+player.getName()+" priority: "+priority);
@@ -1,20 +1,70 @@
package us.ajg0702.queue.logic.permissions;
import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.common.QueueMain;
import us.ajg0702.queue.logic.permissions.hooks.BuiltIn;
import us.ajg0702.queue.logic.permissions.hooks.LuckPermsHook;
import java.util.*;
public class PermissionGetter {
//TODO: all of this
private final List<PermissionHook> hooks;
public static int getMaxOfflineTime(AdaptedPlayer player) {
return -1;
private QueueMain main;
public PermissionGetter(QueueMain main) {
hooks = Arrays.asList(
new BuiltIn(main),
new LuckPermsHook(main)
);
}
public static int getPriority(AdaptedPlayer player) {
return -1;
private PermissionHook selected;
public PermissionHook getSelected() {
if(selected != null) return selected;
if(hooks == null) {
throw new IllegalStateException("Hooks are not initialized yet!");
}
for(PermissionHook hook : hooks) {
if(hook.canUse()) {
selected = hook;
}
}
return selected;
}
public static int getServerPriotity(String server, AdaptedPlayer player) {
return -1;
public int getMaxOfflineTime(AdaptedPlayer player) {
return getHighestPermission(player, "ajqueue.stayqueued.");
}
public int getPriority(AdaptedPlayer player) {
return getHighestPermission(player, "ajqueue.priority.");
}
public int getServerPriotity(String server, AdaptedPlayer player) {
return getHighestPermission(player, "ajqueue.serverpriority."+server+".");
}
private int getHighestPermission(AdaptedPlayer player, String prefix) {
if(getSelected() == null) {
return -1;
}
List<String> perms = getSelected().getPermissions(player);
Iterator<String> it = perms.iterator();
String highestPerm = prefix+"0";
while(it.hasNext()) {
String perm = it.next();
if(!perm.startsWith(prefix)) continue;
if(highestPerm.isEmpty()) {
highestPerm = perm;
continue;
}
int level = Integer.parseInt(perm.substring(prefix.length()));
int highestlevel = Integer.parseInt(highestPerm.substring(prefix.length()));
if(level > highestlevel) {
highestPerm = perm;
}
}
return Integer.parseInt(highestPerm.substring(prefix.length()));
}
}
@@ -0,0 +1,11 @@
package us.ajg0702.queue.logic.permissions;
import us.ajg0702.queue.api.players.AdaptedPlayer;
import java.util.List;
public interface PermissionHook {
String getName();
boolean canUse();
List<String> getPermissions(AdaptedPlayer player);
}
@@ -0,0 +1,34 @@
package us.ajg0702.queue.logic.permissions.hooks;
import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.common.QueueMain;
import us.ajg0702.queue.logic.permissions.PermissionHook;
import java.util.ArrayList;
import java.util.List;
public class BuiltIn implements PermissionHook {
private final QueueMain main;
public BuiltIn(QueueMain main) {
this.main = main;
}
@Override
public String getName() {
return "Built-In";
}
@Override
public boolean canUse() {
return true;
}
@Override
public List<String> getPermissions(AdaptedPlayer player) {
if(main.getPlatformMethods().getImplementationName().equals("velocity")) {
return new ArrayList<>();
}
return player.getPermissions();
}
}
@@ -0,0 +1,51 @@
package us.ajg0702.queue.logic.permissions.hooks;
import net.luckperms.api.LuckPerms;
import net.luckperms.api.LuckPermsProvider;
import net.luckperms.api.model.user.User;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.NodeType;
import net.luckperms.api.query.QueryOptions;
import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.common.QueueMain;
import us.ajg0702.queue.logic.permissions.PermissionHook;
import java.util.*;
public class LuckPermsHook implements PermissionHook {
private final QueueMain main;
public LuckPermsHook(QueueMain main) {
this.main = main;
}
@Override
public String getName() {
return "LuckPerms";
}
@Override
public boolean canUse() {
return main.getPlatformMethods().hasPlugin("LuckPerms");
}
@Override
public List<String> getPermissions(AdaptedPlayer player) {
LuckPerms api = LuckPermsProvider.get();
User user = api.getUserManager().getUser(player.getUniqueId());
assert user != null;
SortedSet<Node> nodes = user.resolveDistinctInheritedNodes(QueryOptions.defaultContextualOptions());
List<String> perms = new ArrayList<>();
for (Node node : nodes) {
if (!node.getType().equals(NodeType.PERMISSION)) continue;
if (!node.getValue()) continue;
perms.add(node.getKey());
}
return perms;
}
}