Add re-check-priority option to re-queue players when their priority increases
This commit is contained in:
@@ -38,6 +38,8 @@ public interface Logic {
|
||||
*/
|
||||
PermissionGetter getPermissionGetter();
|
||||
|
||||
int getHighestPriority(QueueServer queueServer, AdaptedServer server, AdaptedPlayer player);
|
||||
|
||||
static int getUnJoinablePriorities(QueueServer queueServer, AdaptedServer server, AdaptedPlayer player) {
|
||||
Config config = AjQueueAPI.getInstance().getConfig();
|
||||
int highest = 0;
|
||||
|
||||
@@ -239,6 +239,7 @@ public class QueueMain extends AjQueueAPI {
|
||||
d.put("status.now-in-empty-queue", "");
|
||||
d.put("status.sending-now", "&aSending you to &f{SERVER} &anow..");
|
||||
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.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<>();
|
||||
private boolean skipPriorityCheck = true;
|
||||
|
||||
@Override
|
||||
public void sendQueueEvents() {
|
||||
@@ -489,6 +490,27 @@ public class QueueManagerImpl implements QueueManager {
|
||||
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
|
||||
@@ -683,7 +705,7 @@ public class QueueManagerImpl implements QueueManager {
|
||||
// first, we need to find what the lowest priority on the server is
|
||||
int lowestPriority = Integer.MAX_VALUE;
|
||||
for (AdaptedPlayer player : players) {
|
||||
int priority = main.getLogic().getPermissionGetter().getPriority(player);
|
||||
int priority = main.getLogic().getHighestPriority(server, selected, player);
|
||||
if(priority < lowestPriority) lowestPriority = priority;
|
||||
}
|
||||
|
||||
@@ -692,8 +714,8 @@ public class QueueManagerImpl implements QueueManager {
|
||||
long selectedTime = kickLongest ? Long.MAX_VALUE : 0;
|
||||
AdaptedPlayer selectedPlayer = null;
|
||||
for (AdaptedPlayer player : players) {
|
||||
int priority = main.getLogic().getPermissionGetter().getPriority(player);
|
||||
if(priority > lowestPriority) continue; // dont select players with higher priorities
|
||||
int priority = main.getLogic().getHighestPriority(server, selected, player);
|
||||
if(priority > lowestPriority) continue; // don't select players with higher priorities
|
||||
long switchTime = main.getServerTimeManager().getLastServerChange(player);
|
||||
if(selectedPlayer == null) {
|
||||
selectedPlayer = player;
|
||||
|
||||
@@ -28,6 +28,11 @@ public class FreeLogic implements Logic {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHighestPriority(QueueServer queueServer, AdaptedServer server, AdaptedPlayer player) {
|
||||
return player.hasPermission("ajqueue.priority") ? 1 : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasAnyBypass(AdaptedPlayer player, String server) {
|
||||
return false;
|
||||
|
||||
@@ -301,6 +301,11 @@ make-room-kick-to: lobby
|
||||
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?
|
||||
# Default: true
|
||||
check-last-player-sent-time: true
|
||||
@@ -399,4 +404,4 @@ debug: false
|
||||
|
||||
|
||||
# Don't touch this number please
|
||||
config-version: 39
|
||||
config-version: 40
|
||||
|
||||
@@ -18,6 +18,15 @@ public class PremiumLogic implements Logic {
|
||||
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;
|
||||
public PremiumLogic(QueueMain main) {
|
||||
permissionGetter = new PermissionGetterImpl(main);
|
||||
|
||||
Reference in New Issue
Block a user