Skip to content

Commit 6d9bfca

Browse files
fix: resolve issues
1 parent 4e57271 commit 6d9bfca

3 files changed

Lines changed: 9 additions & 1 deletion

File tree

shared/src/main/java/net/pistonmaster/pistonqueue/shared/queue/QueueType.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.LinkedHashMap;
2929
import java.util.List;
3030
import java.util.Map;
31+
import java.util.Set;
3132
import java.util.UUID;
3233
import java.util.concurrent.ConcurrentHashMap;
3334
import java.util.concurrent.atomic.AtomicInteger;
@@ -42,6 +43,7 @@ public class QueueType {
4243
private final ReadWriteLock queueLock = new ReentrantReadWriteLock();
4344
private final ReadWriteLock durationLock = new ReentrantReadWriteLock();
4445
private final Map<UUID, Map<Integer, Instant>> positionCache = new ConcurrentHashMap<>();
46+
private final Set<UUID> activeTransfers = ConcurrentHashMap.newKeySet();
4547
private final AtomicInteger playersWithTypeInTarget = new AtomicInteger();
4648
private final String name;
4749
@Setter

shared/src/main/java/net/pistonmaster/pistonqueue/shared/queue/logic/QueueConnector.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ public void connectPlayers(QueueGroup group, QueueType type) {
8686

8787
Optional<PlayerWrapper> optional = environment.plugin().getPlayer(entry.getKey());
8888
if (optional.isEmpty()) {
89+
type.getActiveTransfers().remove(entry.getKey());
8990
continue;
9091
}
9192
PlayerWrapper player = optional.get();
@@ -118,6 +119,7 @@ public void connectPlayers(QueueGroup group, QueueType type) {
118119
}
119120

120121
player.connect(entry.getValue().targetServer());
122+
type.getActiveTransfers().remove(entry.getKey());
121123

122124
movesLeft--;
123125
}
@@ -183,6 +185,7 @@ private Map.Entry<UUID, QueueType.QueuedPlayer> pollNextQueueEntry(QueueType typ
183185

184186
Map.Entry<UUID, QueueType.QueuedPlayer> entry = iterator.next();
185187
iterator.remove();
188+
type.getActiveTransfers().add(entry.getKey());
186189
return new AbstractMap.SimpleEntry<>(entry);
187190
} finally {
188191
writeLock.unlock();
@@ -193,6 +196,7 @@ private void requeuePlayer(QueueType type, Map.Entry<UUID, QueueType.QueuedPlaye
193196
Lock writeLock = type.getQueueLock().writeLock();
194197
writeLock.lock();
195198
try {
199+
type.getActiveTransfers().remove(entry.getKey());
196200
type.getQueueMap().put(entry.getKey(), entry.getValue());
197201
} finally {
198202
writeLock.unlock();

shared/src/main/java/net/pistonmaster/pistonqueue/shared/queue/logic/QueueRecoveryHandler.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ public void recoverPlayer(PlayerWrapper player) {
4444
QueueGroup group = environment.resolveGroupForType(type);
4545

4646
Optional<String> currentServer = player.getCurrentServer();
47-
if (currentServer.isPresent() && currentServer.get().equals(group.getQueueServer())) {
47+
if (currentServer.isPresent()
48+
&& currentServer.get().equals(group.getQueueServer())
49+
&& !type.getActiveTransfers().contains(player.getUniqueId())) {
4850
boolean addedToQueue = false;
4951
Lock writeLock = type.getQueueLock().writeLock();
5052
writeLock.lock();

0 commit comments

Comments
 (0)