premium logic finished
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user