From 13380dbd886ecb6c5e46892a2df588b9d5472ac7 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Thu, 20 Jul 2023 22:41:41 -0500 Subject: [PATCH] Add option to allow re-queueing for groups --- .../us/ajg0702/queue/api/queues/Balancer.java | 3 ++- .../ajg0702/queue/common/QueueManagerImpl.java | 16 +++++++++------- .../common/queues/balancers/DefaultBalancer.java | 13 +++++++++---- .../queues/balancers/MinigameBalancer.java | 15 ++++++++++++--- common/src/main/resources/config.yml | 8 +++++++- 5 files changed, 39 insertions(+), 16 deletions(-) diff --git a/api/src/main/java/us/ajg0702/queue/api/queues/Balancer.java b/api/src/main/java/us/ajg0702/queue/api/queues/Balancer.java index 331aec4..806aabc 100644 --- a/api/src/main/java/us/ajg0702/queue/api/queues/Balancer.java +++ b/api/src/main/java/us/ajg0702/queue/api/queues/Balancer.java @@ -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); } diff --git a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java index ba04942..6b31a11 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java @@ -188,11 +188,13 @@ public class QueueManagerImpl implements QueueManager { } } - List 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 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 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()); diff --git a/common/src/main/java/us/ajg0702/queue/common/queues/balancers/DefaultBalancer.java b/common/src/main/java/us/ajg0702/queue/common/queues/balancers/DefaultBalancer.java index 6370f5b..8c90fe8 100644 --- a/common/src/main/java/us/ajg0702/queue/common/queues/balancers/DefaultBalancer.java +++ b/common/src/main/java/us/ajg0702/queue/common/queues/balancers/DefaultBalancer.java @@ -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 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; diff --git a/common/src/main/java/us/ajg0702/queue/common/queues/balancers/MinigameBalancer.java b/common/src/main/java/us/ajg0702/queue/common/queues/balancers/MinigameBalancer.java index 941b82e..3eb67c3 100644 --- a/common/src/main/java/us/ajg0702/queue/common/queues/balancers/MinigameBalancer.java +++ b/common/src/main/java/us/ajg0702/queue/common/queues/balancers/MinigameBalancer.java @@ -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 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)) { diff --git a/common/src/main/resources/config.yml b/common/src/main/resources/config.yml index a9c6f07..05a0438 100644 --- a/common/src/main/resources/config.yml +++ b/common/src/main/resources/config.yml @@ -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