Add re-check-priority option to re-queue players when their priority increases

This commit is contained in:
ajgeiss0702
2023-07-26 20:53:48 -05:00
parent 4fc7ca38ca
commit 71c471c407
6 changed files with 48 additions and 4 deletions
@@ -38,6 +38,8 @@ public interface Logic {
*/ */
PermissionGetter getPermissionGetter(); PermissionGetter getPermissionGetter();
int getHighestPriority(QueueServer queueServer, AdaptedServer server, AdaptedPlayer player);
static int getUnJoinablePriorities(QueueServer queueServer, AdaptedServer server, AdaptedPlayer player) { static int getUnJoinablePriorities(QueueServer queueServer, AdaptedServer server, AdaptedPlayer player) {
Config config = AjQueueAPI.getInstance().getConfig(); Config config = AjQueueAPI.getInstance().getConfig();
int highest = 0; int highest = 0;
@@ -239,6 +239,7 @@ public class QueueMain extends AjQueueAPI {
d.put("status.now-in-empty-queue", ""); d.put("status.now-in-empty-queue", "");
d.put("status.sending-now", "&aSending you to &f{SERVER} &anow.."); d.put("status.sending-now", "&aSending you to &f{SERVER} &anow..");
d.put("status.making-room", "<gold>Making room for you.."); d.put("status.making-room", "<gold>Making room for you..");
d.put("status.priority-increased", "<gold>You now have higher priority! <green>Moving you up in the queue..");
d.put("errors.server-not-exist", "&cThe server {SERVER} does not exist!"); d.put("errors.server-not-exist", "&cThe server {SERVER} does not exist!");
d.put("errors.already-queued", "&cYou are already queued for that server!"); d.put("errors.already-queued", "&cYou are already queued for that server!");
@@ -447,6 +447,7 @@ public class QueueManagerImpl implements QueueManager {
} }
protected final Map<AdaptedPlayer, Long> pausedAntiSpam = new ConcurrentHashMap<>(); protected final Map<AdaptedPlayer, Long> pausedAntiSpam = new ConcurrentHashMap<>();
private boolean skipPriorityCheck = true;
@Override @Override
public void sendQueueEvents() { public void sendQueueEvents() {
@@ -489,6 +490,27 @@ public class QueueManagerImpl implements QueueManager {
main.getPlatformMethods().sendPluginMessage(player, "inqueueevent", "true"); main.getPlatformMethods().sendPluginMessage(player, "inqueueevent", "true");
} }
} }
if(main.getConfig().getBoolean("re-check-priority")) {
if(skipPriorityCheck) {
skipPriorityCheck = false;
} else {
for (QueueServer server : servers) {
for (QueuePlayer queuePlayer : server.getQueue()) {
if(queuePlayer.getPlayer() == null) continue;
AdaptedPlayer player = queuePlayer.getPlayer();
AdaptedServer ideal = server.getIdealServer(player);
int currentHighestPriority = main.getLogic().getHighestPriority(server, ideal, player);
if(queuePlayer.getPriority() >= currentHighestPriority) continue;
player.sendMessage(main.getMessages().getComponent("status.priority-increased"));
server.removePlayer(queuePlayer);
addToQueue(player, server);
}
}
}
}
} }
@Override @Override
@@ -683,7 +705,7 @@ public class QueueManagerImpl implements QueueManager {
// first, we need to find what the lowest priority on the server is // first, we need to find what the lowest priority on the server is
int lowestPriority = Integer.MAX_VALUE; int lowestPriority = Integer.MAX_VALUE;
for (AdaptedPlayer player : players) { for (AdaptedPlayer player : players) {
int priority = main.getLogic().getPermissionGetter().getPriority(player); int priority = main.getLogic().getHighestPriority(server, selected, player);
if(priority < lowestPriority) lowestPriority = priority; if(priority < lowestPriority) lowestPriority = priority;
} }
@@ -692,8 +714,8 @@ public class QueueManagerImpl implements QueueManager {
long selectedTime = kickLongest ? Long.MAX_VALUE : 0; long selectedTime = kickLongest ? Long.MAX_VALUE : 0;
AdaptedPlayer selectedPlayer = null; AdaptedPlayer selectedPlayer = null;
for (AdaptedPlayer player : players) { for (AdaptedPlayer player : players) {
int priority = main.getLogic().getPermissionGetter().getPriority(player); int priority = main.getLogic().getHighestPriority(server, selected, player);
if(priority > lowestPriority) continue; // dont select players with higher priorities if(priority > lowestPriority) continue; // don't select players with higher priorities
long switchTime = main.getServerTimeManager().getLastServerChange(player); long switchTime = main.getServerTimeManager().getLastServerChange(player);
if(selectedPlayer == null) { if(selectedPlayer == null) {
selectedPlayer = player; selectedPlayer = player;
@@ -28,6 +28,11 @@ public class FreeLogic implements Logic {
return null; return null;
} }
@Override
public int getHighestPriority(QueueServer queueServer, AdaptedServer server, AdaptedPlayer player) {
return player.hasPermission("ajqueue.priority") ? 1 : 0;
}
@Override @Override
public boolean hasAnyBypass(AdaptedPlayer player, String server) { public boolean hasAnyBypass(AdaptedPlayer player, String server) {
return false; return false;
+6 -1
View File
@@ -301,6 +301,11 @@ make-room-kick-to: lobby
make-room-kick-longest-playtime: true make-room-kick-longest-playtime: true
# Should we check every 4 seconds if a player has a higher priority permission than before
# If they do, they are removed and re-added to the queue (only if they would be put in a higher position)
# Default: false
re-check-priority: false
# Should we check to make sure that people don't get sent quicker than wait-time? # Should we check to make sure that people don't get sent quicker than wait-time?
# Default: true # Default: true
check-last-player-sent-time: true check-last-player-sent-time: true
@@ -399,4 +404,4 @@ debug: false
# Don't touch this number please # Don't touch this number please
config-version: 39 config-version: 40
@@ -18,6 +18,15 @@ public class PremiumLogic implements Logic {
return permissionGetter; return permissionGetter;
} }
@Override
public int getHighestPriority(QueueServer queueServer, AdaptedServer server, AdaptedPlayer player) {
int normalPriority = permissionGetter.getPriority(player);
int serverPriority = permissionGetter.getServerPriotity(queueServer.getName(), player);
int unJoinablePriority = Logic.getUnJoinablePriorities(queueServer, server, player);
return Math.max(normalPriority, Math.max(serverPriority, unJoinablePriority));
}
private final PermissionGetter permissionGetter; private final PermissionGetter permissionGetter;
public PremiumLogic(QueueMain main) { public PremiumLogic(QueueMain main) {
permissionGetter = new PermissionGetterImpl(main); permissionGetter = new PermissionGetterImpl(main);