add players back to queue and preserve paused state on reload
This commit is contained in:
@@ -19,7 +19,7 @@ import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class QueueManagerImpl implements QueueManager {
|
||||
|
||||
private final List<QueueServer> servers = new CopyOnWriteArrayList<>();
|
||||
private List<QueueServer> servers = new CopyOnWriteArrayList<>();
|
||||
|
||||
private final QueueMain main;
|
||||
private final Messages msgs;
|
||||
@@ -36,6 +36,27 @@ public class QueueManagerImpl implements QueueManager {
|
||||
}, delay, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
public List<QueueServer> buildServers() {
|
||||
List<QueueServer> result = new ArrayList<>();
|
||||
List<AdaptedServer> servers = main.getServerBuilder().getServers();
|
||||
|
||||
for(AdaptedServer server : servers) {
|
||||
QueueServer previousServer = main.getQueueManager().findServer(server.getName());
|
||||
List<QueuePlayer> previousPlayers = previousServer == null ? new ArrayList<>() : previousServer.getQueue();
|
||||
if(previousPlayers.size() > 0) {
|
||||
main.getLogger().info("Adding "+previousPlayers.size()+" players back to the queue for "+server.getName());
|
||||
}
|
||||
QueueServer queueServer = new QueueServerImpl(server.getName(), main, server, previousPlayers);
|
||||
if(previousServer != null) {
|
||||
queueServer.setPaused(previousServer.isPaused());
|
||||
queueServer.setLastSentTime(previousServer.getLastSentTime());
|
||||
}
|
||||
result.add(queueServer);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addToQueue(AdaptedPlayer player, QueueServer server) {
|
||||
if(player == null || server == null) {
|
||||
@@ -190,19 +211,19 @@ public class QueueManagerImpl implements QueueManager {
|
||||
main.getLogger().severe("[MAN] Config is null");
|
||||
}
|
||||
|
||||
servers.clear();
|
||||
List<QueueServer> oldServers = ImmutableList.copyOf(servers);
|
||||
|
||||
servers.addAll(main.getServerBuilder().buildServers());
|
||||
servers = buildServers();
|
||||
|
||||
List<String> groupsRaw = main.getConfig().getStringList("server-groups");
|
||||
for(String groupraw : groupsRaw) {
|
||||
if(groupraw.isEmpty()) {
|
||||
for(String groupRaw : groupsRaw) {
|
||||
if(groupRaw.isEmpty()) {
|
||||
main.getLogger().warning("Empty group string! If you dont want server groups, set server-groups like this: server-groups: []");
|
||||
continue;
|
||||
}
|
||||
|
||||
String groupName = groupraw.split(":")[0];
|
||||
String[] serversraw = groupraw.split(":")[1].split(",");
|
||||
String groupName = groupRaw.split(":")[0];
|
||||
String[] serversraw = groupRaw.split(":")[1].split(",");
|
||||
|
||||
if(findServer(groupName) != null) {
|
||||
main.getLogger().warning("The name of a group ('"+groupName+"') cannot be the same as the name of a server!");
|
||||
@@ -227,7 +248,15 @@ public class QueueManagerImpl implements QueueManager {
|
||||
continue;
|
||||
}
|
||||
|
||||
this.servers.add(new QueueServerImpl(groupName, main, groupServers));
|
||||
|
||||
final List<QueuePlayer> previousPlayers = new ArrayList<>();
|
||||
oldServers.forEach(queueServer -> {
|
||||
if(queueServer.getName().equals(groupName)) {
|
||||
previousPlayers.addAll(queueServer.getQueue());
|
||||
}
|
||||
});
|
||||
|
||||
this.servers.add(new QueueServerImpl(groupName, main, groupServers, previousPlayers));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package us.ajg0702.queue.common.players;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import us.ajg0702.queue.api.players.AdaptedPlayer;
|
||||
import us.ajg0702.queue.api.players.QueuePlayer;
|
||||
@@ -20,14 +21,22 @@ public class QueuePlayerImpl implements QueuePlayer {
|
||||
|
||||
private final int maxOfflineTime;
|
||||
|
||||
public QueuePlayerImpl(UUID uuid, String name, QueueServer server, int highestPriority, int maxOfflineTime) {
|
||||
this(null, name, uuid, server, highestPriority, maxOfflineTime);
|
||||
}
|
||||
|
||||
public QueuePlayerImpl(AdaptedPlayer player, QueueServer server, int highestPriority, int maxOfflineTime) {
|
||||
this(player, player.getName(), player.getUniqueId(), server, highestPriority, maxOfflineTime);
|
||||
}
|
||||
|
||||
private QueuePlayerImpl(@Nullable AdaptedPlayer player, String name, @NotNull UUID uuid, QueueServer server, int highestPriority, int maxOfflineTime) {
|
||||
this.player = player;
|
||||
this.server = server;
|
||||
|
||||
this.highestPriority = highestPriority;
|
||||
|
||||
uuid = player.getUniqueId();
|
||||
name = player.getName();
|
||||
this.uuid = uuid;
|
||||
this.name = name;
|
||||
|
||||
this.maxOfflineTime = maxOfflineTime;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ 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.players.QueuePlayerImpl;
|
||||
import us.ajg0702.utils.common.GenUtils;
|
||||
import us.ajg0702.utils.common.Messages;
|
||||
|
||||
@@ -20,14 +21,37 @@ public class QueueServerImpl implements QueueServer {
|
||||
|
||||
private final String name;
|
||||
|
||||
public QueueServerImpl(String name, QueueMain main, AdaptedServer server) {
|
||||
this(name, main, Collections.singletonList(server));
|
||||
public QueueServerImpl(String name, QueueMain main, AdaptedServer server, List<QueuePlayer> previousPlayers) {
|
||||
this(name, main, Collections.singletonList(server), previousPlayers);
|
||||
}
|
||||
|
||||
public QueueServerImpl(String name, QueueMain main, List<AdaptedServer> servers) {
|
||||
public QueueServerImpl(String name, QueueMain main, List<AdaptedServer> servers, List<QueuePlayer> previousPlayers) {
|
||||
this.name = name;
|
||||
this.servers = servers;
|
||||
this.main = main;
|
||||
|
||||
for(QueuePlayer queuePlayer : previousPlayers) {
|
||||
if(queuePlayer.getPlayer() == null) {
|
||||
addPlayer(
|
||||
new QueuePlayerImpl(
|
||||
queuePlayer.getUniqueId(),
|
||||
queuePlayer.getName(),
|
||||
this,
|
||||
queuePlayer.getPriority(),
|
||||
queuePlayer.getMaxOfflineTime()
|
||||
)
|
||||
);
|
||||
} else {
|
||||
addPlayer(
|
||||
new QueuePlayerImpl(
|
||||
queuePlayer.getPlayer(),
|
||||
this,
|
||||
queuePlayer.getPriority(),
|
||||
queuePlayer.getMaxOfflineTime()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private final QueueMain main;
|
||||
@@ -251,6 +275,7 @@ public class QueueServerImpl implements QueueServer {
|
||||
@Override
|
||||
public synchronized void addPlayer(QueuePlayer player, int position) {
|
||||
if(!player.getQueueServer().equals(this) || queue.contains(player)) return;
|
||||
|
||||
if(position > 0) {
|
||||
queue.add(position, player);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user