Add option to allow re-queueing for groups

This commit is contained in:
ajgeiss0702
2023-07-20 22:41:41 -05:00
parent 67358a4d58
commit 13380dbd88
5 changed files with 39 additions and 16 deletions
@@ -1,8 +1,9 @@
package us.ajg0702.queue.api.queues;
import org.jetbrains.annotations.Nullable;
import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.api.server.AdaptedServer;
public interface Balancer {
AdaptedServer getIdealServer(AdaptedPlayer player);
AdaptedServer getIdealServer(@Nullable AdaptedPlayer player);
}
@@ -188,11 +188,13 @@ public class QueueManagerImpl implements QueueManager {
}
}
List<AdaptedServer> notInServers = new ArrayList<>(server.getServers());
notInServers.removeIf(adaptedServer -> !adaptedServer.getName().equals(player.getServerName()));
if(notInServers.size() > 0) {
player.sendMessage(msgs.getComponent("errors.already-connected", "SERVER:"+server.getAlias()));
return false;
if(!server.isGroup() || !main.getConfig().getBoolean("allow-group-requeue")) {
List<AdaptedServer> notInServers = new ArrayList<>(server.getServers());
notInServers.removeIf(adaptedServer -> !adaptedServer.getName().equals(player.getServerName()));
if(notInServers.size() > 0) {
player.sendMessage(msgs.getComponent("errors.already-connected", "SERVER:"+server.getAlias()));
return false;
}
}
ImmutableList<QueueServer> beforeQueues = getPlayerQueues(player);
@@ -438,7 +440,7 @@ public class QueueManagerImpl implements QueueManager {
"TIME:"+ TimeUtils.timeString(time, msgs.getString("format.time.mins"), msgs.getString("format.time.secs"))
);
Title title = Title.title(titleMessage, subTitleMessage, Title.Times.of(Duration.ZERO, Duration.ofSeconds(2L), Duration.ZERO));
Title title = Title.title(titleMessage, subTitleMessage, Title.Times.times(Duration.ZERO, Duration.ofSeconds(2L), Duration.ZERO));
player.showTitle(title);
}
}
@@ -688,7 +690,7 @@ public class QueueManagerImpl implements QueueManager {
"title.sending-now.subtitle",
"SERVER:"+server.getAlias()
),
Title.Times.of(Duration.ZERO, Duration.ofSeconds(2L), Duration.ZERO)
Title.Times.times(Duration.ZERO, Duration.ofSeconds(2L), Duration.ZERO)
));
}
sendingNowAntiSpam.put(nextPlayer, System.currentTimeMillis());
@@ -1,15 +1,13 @@
package us.ajg0702.queue.common.queues.balancers;
import org.jetbrains.annotations.Nullable;
import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.api.queues.Balancer;
import us.ajg0702.queue.api.queues.QueueServer;
import us.ajg0702.queue.api.server.AdaptedServer;
import us.ajg0702.queue.api.server.AdaptedServerPing;
import us.ajg0702.queue.common.QueueMain;
import us.ajg0702.queue.common.utils.Debug;
import us.ajg0702.utils.common.GenUtils;
import java.util.HashMap;
import java.util.List;
public class DefaultBalancer implements Balancer {
@@ -22,7 +20,13 @@ public class DefaultBalancer implements Balancer {
}
@Override
public AdaptedServer getIdealServer(AdaptedPlayer player) {
public AdaptedServer getIdealServer(@Nullable AdaptedPlayer player) {
AdaptedServer alreadyConnected;
if(player == null) {
alreadyConnected = null;
} else {
alreadyConnected = player.getCurrentServer();
}
List<AdaptedServer> servers = server.getServers();
AdaptedServer selected = null;
int selectednum = 0;
@@ -31,6 +35,7 @@ public class DefaultBalancer implements Balancer {
} else {
for(AdaptedServer sv : servers) {
if(!sv.isOnline()) continue;
if(sv.equals(alreadyConnected)) continue;
int online = sv.getPlayerCount();
if(selected == null) {
selected = sv;
@@ -1,13 +1,15 @@
package us.ajg0702.queue.common.queues.balancers;
import org.jetbrains.annotations.Nullable;
import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.api.queues.Balancer;
import us.ajg0702.queue.api.queues.QueueServer;
import us.ajg0702.queue.api.server.AdaptedServer;
import us.ajg0702.queue.api.server.AdaptedServerPing;
import us.ajg0702.queue.common.QueueMain;
import java.util.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class MinigameBalancer implements Balancer {
@@ -19,7 +21,13 @@ public class MinigameBalancer implements Balancer {
}
@Override
public AdaptedServer getIdealServer(AdaptedPlayer player) {
public AdaptedServer getIdealServer(@Nullable AdaptedPlayer player) {
AdaptedServer alreadyConnected;
if(player == null) {
alreadyConnected = null;
} else {
alreadyConnected = player.getCurrentServer();
}
List<AdaptedServer> servers = server.getServers();
if(servers.size() == 1) {
return servers.get(0);
@@ -30,6 +38,7 @@ public class MinigameBalancer implements Balancer {
for(AdaptedServer si : svs) {
if(!si.isOnline()) continue;
if(si.equals(alreadyConnected)) continue;
int online = si.getPlayerCount();
int max = si.getMaxPlayers();
if(online < max && si.isJoinable(player)) {
+7 -1
View File
@@ -108,6 +108,12 @@ server-groups:
balancer-types:
- "bedwars:minigame"
# If a player is in a server that is in a group and they re-queue for that group, should we allow it?
# false - prevent player from re-queueing; say "already connected" message
# true - let player re-queue; will send them to a server other than the one they're connected to
# Default: false
allow-group-requeue: false
# What priority should we give whitelisted players priority when the server is whitelisted?
# This will have no effect if the server isn't whitelisted
@@ -371,4 +377,4 @@ debug: false
# Don't touch this number please
config-version: 37
config-version: 38