add players back to queue and preserve paused state on reload
This commit is contained in:
@@ -5,7 +5,7 @@ import us.ajg0702.queue.api.queues.QueueServer;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface ServerBuilder {
|
public interface ServerBuilder {
|
||||||
List<QueueServer> buildServers();
|
List<AdaptedServer> getServers();
|
||||||
|
|
||||||
AdaptedServer getServer(String name);
|
AdaptedServer getServer(String name);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
|
|
||||||
public class QueueManagerImpl implements QueueManager {
|
public class QueueManagerImpl implements QueueManager {
|
||||||
|
|
||||||
private final List<QueueServer> servers = new CopyOnWriteArrayList<>();
|
private List<QueueServer> servers = new CopyOnWriteArrayList<>();
|
||||||
|
|
||||||
private final QueueMain main;
|
private final QueueMain main;
|
||||||
private final Messages msgs;
|
private final Messages msgs;
|
||||||
@@ -36,6 +36,27 @@ public class QueueManagerImpl implements QueueManager {
|
|||||||
}, delay, TimeUnit.MILLISECONDS);
|
}, 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
|
@Override
|
||||||
public boolean addToQueue(AdaptedPlayer player, QueueServer server) {
|
public boolean addToQueue(AdaptedPlayer player, QueueServer server) {
|
||||||
if(player == null || server == null) {
|
if(player == null || server == null) {
|
||||||
@@ -190,19 +211,19 @@ public class QueueManagerImpl implements QueueManager {
|
|||||||
main.getLogger().severe("[MAN] Config is null");
|
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");
|
List<String> groupsRaw = main.getConfig().getStringList("server-groups");
|
||||||
for(String groupraw : groupsRaw) {
|
for(String groupRaw : groupsRaw) {
|
||||||
if(groupraw.isEmpty()) {
|
if(groupRaw.isEmpty()) {
|
||||||
main.getLogger().warning("Empty group string! If you dont want server groups, set server-groups like this: server-groups: []");
|
main.getLogger().warning("Empty group string! If you dont want server groups, set server-groups like this: server-groups: []");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
String groupName = groupraw.split(":")[0];
|
String groupName = groupRaw.split(":")[0];
|
||||||
String[] serversraw = groupraw.split(":")[1].split(",");
|
String[] serversraw = groupRaw.split(":")[1].split(",");
|
||||||
|
|
||||||
if(findServer(groupName) != null) {
|
if(findServer(groupName) != null) {
|
||||||
main.getLogger().warning("The name of a group ('"+groupName+"') cannot be the same as the name of a server!");
|
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;
|
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;
|
package us.ajg0702.queue.common.players;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import us.ajg0702.queue.api.players.AdaptedPlayer;
|
import us.ajg0702.queue.api.players.AdaptedPlayer;
|
||||||
import us.ajg0702.queue.api.players.QueuePlayer;
|
import us.ajg0702.queue.api.players.QueuePlayer;
|
||||||
@@ -20,14 +21,22 @@ public class QueuePlayerImpl implements QueuePlayer {
|
|||||||
|
|
||||||
private final int maxOfflineTime;
|
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) {
|
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.player = player;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
|
|
||||||
this.highestPriority = highestPriority;
|
this.highestPriority = highestPriority;
|
||||||
|
|
||||||
uuid = player.getUniqueId();
|
this.uuid = uuid;
|
||||||
name = player.getName();
|
this.name = name;
|
||||||
|
|
||||||
this.maxOfflineTime = maxOfflineTime;
|
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.AdaptedServer;
|
||||||
import us.ajg0702.queue.api.server.AdaptedServerPing;
|
import us.ajg0702.queue.api.server.AdaptedServerPing;
|
||||||
import us.ajg0702.queue.common.QueueMain;
|
import us.ajg0702.queue.common.QueueMain;
|
||||||
|
import us.ajg0702.queue.common.players.QueuePlayerImpl;
|
||||||
import us.ajg0702.utils.common.GenUtils;
|
import us.ajg0702.utils.common.GenUtils;
|
||||||
import us.ajg0702.utils.common.Messages;
|
import us.ajg0702.utils.common.Messages;
|
||||||
|
|
||||||
@@ -20,14 +21,37 @@ public class QueueServerImpl implements QueueServer {
|
|||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
public QueueServerImpl(String name, QueueMain main, AdaptedServer server) {
|
public QueueServerImpl(String name, QueueMain main, AdaptedServer server, List<QueuePlayer> previousPlayers) {
|
||||||
this(name, main, Collections.singletonList(server));
|
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.name = name;
|
||||||
this.servers = servers;
|
this.servers = servers;
|
||||||
this.main = main;
|
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;
|
private final QueueMain main;
|
||||||
@@ -251,6 +275,7 @@ public class QueueServerImpl implements QueueServer {
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void addPlayer(QueuePlayer player, int position) {
|
public synchronized void addPlayer(QueuePlayer player, int position) {
|
||||||
if(!player.getQueueServer().equals(this) || queue.contains(player)) return;
|
if(!player.getQueueServer().equals(this) || queue.contains(player)) return;
|
||||||
|
|
||||||
if(position > 0) {
|
if(position > 0) {
|
||||||
queue.add(position, player);
|
queue.add(position, player);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+1
-1
@@ -42,7 +42,7 @@ public class BungeeQueue extends Plugin implements Listener {
|
|||||||
new BungeeMethods(this, getProxy(), logger),
|
new BungeeMethods(this, getProxy(), logger),
|
||||||
dataFolder
|
dataFolder
|
||||||
);
|
);
|
||||||
main.setServerBuilder(new BungeeServerBuilder(main, getProxy()));
|
main.setServerBuilder(new BungeeServerBuilder(getProxy()));
|
||||||
|
|
||||||
getProxy().registerChannel("ajqueue:tospigot");
|
getProxy().registerChannel("ajqueue:tospigot");
|
||||||
getProxy().registerChannel("ajqueue:toproxy");
|
getProxy().registerChannel("ajqueue:toproxy");
|
||||||
|
|||||||
+7
-15
@@ -2,33 +2,25 @@ package us.ajg0702.queue.platforms.bungeecord.server;
|
|||||||
|
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
import net.md_5.bungee.api.config.ServerInfo;
|
import net.md_5.bungee.api.config.ServerInfo;
|
||||||
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.ServerBuilder;
|
import us.ajg0702.queue.api.server.ServerBuilder;
|
||||||
import us.ajg0702.queue.common.QueueMain;
|
|
||||||
import us.ajg0702.queue.common.queues.QueueServerImpl;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class BungeeServerBuilder implements ServerBuilder {
|
public class BungeeServerBuilder implements ServerBuilder {
|
||||||
|
|
||||||
private final ProxyServer proxyServer;
|
private final ProxyServer proxyServer;
|
||||||
private final QueueMain main;
|
|
||||||
public BungeeServerBuilder(QueueMain main, ProxyServer proxyServer) {
|
public BungeeServerBuilder(ProxyServer proxyServer) {
|
||||||
this.proxyServer = proxyServer;
|
this.proxyServer = proxyServer;
|
||||||
this.main = main;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<QueueServer> buildServers() {
|
public List<AdaptedServer> getServers() {
|
||||||
List<QueueServer> result = new ArrayList<>();
|
List<AdaptedServer> result = new ArrayList<>();
|
||||||
Map<String, ServerInfo> servers = proxyServer.getServers();
|
|
||||||
|
|
||||||
for(String serverName : servers.keySet()) {
|
proxyServer.getServers().forEach((s, serverInfo) -> result.add(new BungeeServer(serverInfo)));
|
||||||
ServerInfo serverInfo = servers.get(serverName);
|
|
||||||
AdaptedServer adaptedServer = new BungeeServer(serverInfo);
|
|
||||||
result.add(new QueueServerImpl(adaptedServer.getName(), main, adaptedServer));
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -69,7 +69,7 @@ public class VelocityQueue {
|
|||||||
new VelocityMethods(this, proxyServer, logger),
|
new VelocityMethods(this, proxyServer, logger),
|
||||||
dataFolder
|
dataFolder
|
||||||
);
|
);
|
||||||
main.setServerBuilder(new VelocityServerBuilder(main, proxyServer));
|
main.setServerBuilder(new VelocityServerBuilder(proxyServer));
|
||||||
|
|
||||||
commands = Arrays.asList(
|
commands = Arrays.asList(
|
||||||
new QueueCommand(main),
|
new QueueCommand(main),
|
||||||
|
|||||||
+6
-15
@@ -2,35 +2,26 @@ package us.ajg0702.queue.platforms.velocity.server;
|
|||||||
|
|
||||||
import com.velocitypowered.api.proxy.ProxyServer;
|
import com.velocitypowered.api.proxy.ProxyServer;
|
||||||
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
||||||
import us.ajg0702.queue.api.server.ServerBuilder;
|
|
||||||
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.common.QueueMain;
|
import us.ajg0702.queue.api.server.ServerBuilder;
|
||||||
import us.ajg0702.queue.common.queues.QueueServerImpl;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class VelocityServerBuilder implements ServerBuilder {
|
public class VelocityServerBuilder implements ServerBuilder {
|
||||||
|
|
||||||
private final ProxyServer proxyServer;
|
private final ProxyServer proxyServer;
|
||||||
private final QueueMain main;
|
|
||||||
public VelocityServerBuilder(QueueMain main, ProxyServer proxyServer) {
|
public VelocityServerBuilder(ProxyServer proxyServer) {
|
||||||
this.proxyServer = proxyServer;
|
this.proxyServer = proxyServer;
|
||||||
this.main = main;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<QueueServer> buildServers() {
|
public List<AdaptedServer> getServers() {
|
||||||
List<QueueServer> result = new ArrayList<>();
|
List<AdaptedServer> result = new ArrayList<>();
|
||||||
Collection<RegisteredServer> servers = proxyServer.getAllServers();
|
|
||||||
|
|
||||||
for(RegisteredServer server : servers) {
|
proxyServer.getAllServers().forEach(registeredServer -> result.add(new VelocityServer(registeredServer)));
|
||||||
AdaptedServer adaptedServer = new VelocityServer(server);
|
|
||||||
result.add(new QueueServerImpl(adaptedServer.getName(), main, adaptedServer));
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user