diff --git a/api/src/main/java/us/ajg0702/queue/api/players/QueuePlayer.java b/api/src/main/java/us/ajg0702/queue/api/players/QueuePlayer.java index 70085531..9e5a3ff2 100644 --- a/api/src/main/java/us/ajg0702/queue/api/players/QueuePlayer.java +++ b/api/src/main/java/us/ajg0702/queue/api/players/QueuePlayer.java @@ -1,6 +1,7 @@ package us.ajg0702.queue.api.players; import us.ajg0702.queue.api.queues.QueueServer; +import us.ajg0702.queue.api.server.AdaptedServer; import javax.annotation.Nullable; import java.util.UUID; @@ -68,4 +69,10 @@ public interface QueuePlayer { * @return the max number of seconds this player can be offline before being removed from the queue */ int getMaxOfflineTime(); + + /** + * Gets the server that the player was in when they joined the queue + * @return the server that the player was in when they joined the queue + */ + AdaptedServer getInitialServer(); } 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 6b31a11a..61384556 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java @@ -626,7 +626,9 @@ public void sendPlayers(QueueServer queueServer) { // If the first person int the queue is offline or already in the server, find the next online player in the queue int i = 0; - while((nextPlayer == null || server.getServerNames().contains(nextPlayer.getServerName())) && i < server.getQueue().size()) { + List excludableServers = new ArrayList<>(server.getServerNames()); + if(nextQueuePlayer.getInitialServer() != null) excludableServers.remove(nextQueuePlayer.getInitialServer().getName()); + while((nextPlayer == null || excludableServers.contains(nextPlayer.getServerName())) && i < server.getQueue().size()) { if(nextPlayer != null) { // Remove them if they are already in the server server.removePlayer(nextQueuePlayer); if(server.getQueue().size() > i) { diff --git a/common/src/main/java/us/ajg0702/queue/common/players/QueuePlayerImpl.java b/common/src/main/java/us/ajg0702/queue/common/players/QueuePlayerImpl.java index 379e7f63..47a7b7d5 100644 --- a/common/src/main/java/us/ajg0702/queue/common/players/QueuePlayerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/players/QueuePlayerImpl.java @@ -5,6 +5,7 @@ import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.players.QueuePlayer; import us.ajg0702.queue.api.queues.QueueServer; +import us.ajg0702.queue.api.server.AdaptedServer; import java.util.UUID; @@ -21,6 +22,8 @@ public class QueuePlayerImpl implements QueuePlayer { private final int maxOfflineTime; + private final AdaptedServer initialServer; + public int lastPosition; public QueuePlayerImpl(UUID uuid, String name, QueueServer server, int highestPriority, int maxOfflineTime) { @@ -42,6 +45,8 @@ private QueuePlayerImpl(@Nullable AdaptedPlayer player, String name, @NotNull UU this.maxOfflineTime = maxOfflineTime; + initialServer = player != null ? player.getCurrentServer() : null; + lastPosition = getPosition(); } @@ -106,6 +111,11 @@ public int getMaxOfflineTime() { return maxOfflineTime; } + @Override + public AdaptedServer getInitialServer() { + return initialServer; + } + private long leaveTime = 0; public void setLeaveTime(long leaveTime) {