Add option to allow re-queueing for groups

This commit is contained in:
ajgeiss0702
2023-07-20 22:41:41 -05:00
parent 8fe8713aaf
commit 391080483b
5 changed files with 39 additions and 16 deletions
@@ -1,8 +1,9 @@
package us.ajg0702.queue.api.queues; package us.ajg0702.queue.api.queues;
import org.jetbrains.annotations.Nullable;
import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.api.server.AdaptedServer; import us.ajg0702.queue.api.server.AdaptedServer;
public interface Balancer { 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()); if(!server.isGroup() || !main.getConfig().getBoolean("allow-group-requeue")) {
notInServers.removeIf(adaptedServer -> !adaptedServer.getName().equals(player.getServerName())); List<AdaptedServer> notInServers = new ArrayList<>(server.getServers());
if(notInServers.size() > 0) { notInServers.removeIf(adaptedServer -> !adaptedServer.getName().equals(player.getServerName()));
player.sendMessage(msgs.getComponent("errors.already-connected", "SERVER:"+server.getAlias())); if(notInServers.size() > 0) {
return false; player.sendMessage(msgs.getComponent("errors.already-connected", "SERVER:"+server.getAlias()));
return false;
}
} }
ImmutableList<QueueServer> beforeQueues = getPlayerQueues(player); 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")) "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); player.showTitle(title);
} }
} }
@@ -688,7 +690,7 @@ public class QueueManagerImpl implements QueueManager {
"title.sending-now.subtitle", "title.sending-now.subtitle",
"SERVER:"+server.getAlias() "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()); sendingNowAntiSpam.put(nextPlayer, System.currentTimeMillis());
@@ -1,15 +1,13 @@
package us.ajg0702.queue.common.queues.balancers; package us.ajg0702.queue.common.queues.balancers;
import org.jetbrains.annotations.Nullable;
import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.api.queues.Balancer; import us.ajg0702.queue.api.queues.Balancer;
import us.ajg0702.queue.api.queues.QueueServer; import us.ajg0702.queue.api.queues.QueueServer;
import us.ajg0702.queue.api.server.AdaptedServer; 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.QueueMain;
import us.ajg0702.queue.common.utils.Debug;
import us.ajg0702.utils.common.GenUtils; import us.ajg0702.utils.common.GenUtils;
import java.util.HashMap;
import java.util.List; import java.util.List;
public class DefaultBalancer implements Balancer { public class DefaultBalancer implements Balancer {
@@ -22,7 +20,13 @@ public class DefaultBalancer implements Balancer {
} }
@Override @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(); List<AdaptedServer> servers = server.getServers();
AdaptedServer selected = null; AdaptedServer selected = null;
int selectednum = 0; int selectednum = 0;
@@ -31,6 +35,7 @@ public class DefaultBalancer implements Balancer {
} else { } else {
for(AdaptedServer sv : servers) { for(AdaptedServer sv : servers) {
if(!sv.isOnline()) continue; if(!sv.isOnline()) continue;
if(sv.equals(alreadyConnected)) continue;
int online = sv.getPlayerCount(); int online = sv.getPlayerCount();
if(selected == null) { if(selected == null) {
selected = sv; selected = sv;
@@ -1,13 +1,15 @@
package us.ajg0702.queue.common.queues.balancers; package us.ajg0702.queue.common.queues.balancers;
import org.jetbrains.annotations.Nullable;
import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.api.queues.Balancer; import us.ajg0702.queue.api.queues.Balancer;
import us.ajg0702.queue.api.queues.QueueServer; import us.ajg0702.queue.api.queues.QueueServer;
import us.ajg0702.queue.api.server.AdaptedServer; 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.QueueMain;
import java.util.*; import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class MinigameBalancer implements Balancer { public class MinigameBalancer implements Balancer {
@@ -19,7 +21,13 @@ public class MinigameBalancer implements Balancer {
} }
@Override @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(); List<AdaptedServer> servers = server.getServers();
if(servers.size() == 1) { if(servers.size() == 1) {
return servers.get(0); return servers.get(0);
@@ -30,6 +38,7 @@ public class MinigameBalancer implements Balancer {
for(AdaptedServer si : svs) { for(AdaptedServer si : svs) {
if(!si.isOnline()) continue; if(!si.isOnline()) continue;
if(si.equals(alreadyConnected)) continue;
int online = si.getPlayerCount(); int online = si.getPlayerCount();
int max = si.getMaxPlayers(); int max = si.getMaxPlayers();
if(online < max && si.isJoinable(player)) { if(online < max && si.isJoinable(player)) {
+7 -1
View File
@@ -108,6 +108,12 @@ server-groups:
balancer-types: balancer-types:
- "bedwars:minigame" - "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? # What priority should we give whitelisted players priority when the server is whitelisted?
# This will have no effect if the server isn't whitelisted # This will have no effect if the server isn't whitelisted
@@ -371,4 +377,4 @@ debug: false
# Don't touch this number please # Don't touch this number please
config-version: 37 config-version: 38