server groups

This commit is contained in:
ajgeiss0702
2020-07-26 16:22:10 -07:00
parent ec57804544
commit f77ae59fe2
6 changed files with 138 additions and 46 deletions
+12 -12
View File
@@ -163,11 +163,11 @@ public class Main extends Plugin implements Listener {
@EventHandler @EventHandler
public void moveServer(ServerSwitchEvent e) { public void moveServer(ServerSwitchEvent e) {
ProxiedPlayer p = e.getPlayer(); ProxiedPlayer p = e.getPlayer();
List<Server> alreadyqueued = man.findPlayerInQueue(p); List<QueueServer> alreadyqueued = man.findPlayerInQueue(p);
for(Server ser : alreadyqueued) { for(QueueServer ser : alreadyqueued) {
List<ProxiedPlayer> queue = ser.getQueue(); List<ProxiedPlayer> queue = ser.getQueue();
int pos = queue.indexOf(p); int pos = queue.indexOf(p);
if((pos == 0 && p.getServer().getInfo().equals(ser.getInfo())) || config.getBoolean("remove-player-on-server-switch")) { if((pos == 0 && ser.getInfos().contains(p.getServer().getInfo())) || config.getBoolean("remove-player-on-server-switch")) {
queue.remove(p); queue.remove(p);
} }
} }
@@ -189,8 +189,8 @@ public class Main extends Plugin implements Listener {
public void onLeave(PlayerDisconnectEvent e) { public void onLeave(PlayerDisconnectEvent e) {
ProxiedPlayer p = e.getPlayer(); ProxiedPlayer p = e.getPlayer();
if(p.hasPermission("ajqueue.stay-queued-on-leave")) return; if(p.hasPermission("ajqueue.stay-queued-on-leave")) return;
List<Server> servers = man.findPlayerInQueue(p); List<QueueServer> servers = man.findPlayerInQueue(p);
for(Server server : servers) { for(QueueServer server : servers) {
server.getQueue().remove(p); server.getQueue().remove(p);
} }
} }
@@ -198,9 +198,9 @@ public class Main extends Plugin implements Listener {
@EventHandler @EventHandler
public void onFailedMove(ServerKickEvent e) { public void onFailedMove(ServerKickEvent e) {
ProxiedPlayer p = e.getPlayer(); ProxiedPlayer p = e.getPlayer();
List<Server> queuedServers = man.findPlayerInQueue(p); List<QueueServer> queuedServers = man.findPlayerInQueue(p);
for(Server server : queuedServers) { for(QueueServer server : queuedServers) {
if(!(e.getKickedFrom().equals(server.getInfo()))) continue; if(!(server.getInfos().contains(e.getKickedFrom()))) continue;
if(server.getQueue().indexOf(p) != 0) continue; if(server.getQueue().indexOf(p) != 0) continue;
List<String> kickreasons = config.getStringList("kick-reasons"); List<String> kickreasons = config.getStringList("kick-reasons");
boolean hasReason = false; boolean hasReason = false;
@@ -243,7 +243,7 @@ public class Main extends Plugin implements Listener {
BungeeUtils.sendCustomData(player, "queuename", aliases.getAlias(man.getQueuedName(player))); BungeeUtils.sendCustomData(player, "queuename", aliases.getAlias(man.getQueuedName(player)));
} }
if(subchannel.equals("position")) { if(subchannel.equals("position")) {
Server server = man.getSingleServer(player); QueueServer server = man.getSingleServer(player);
String pos = msgs.get("placeholders.position.none"); String pos = msgs.get("placeholders.position.none");
if(server != null) { if(server != null) {
pos = server.getQueue().indexOf(player)+1+""; pos = server.getQueue().indexOf(player)+1+"";
@@ -251,7 +251,7 @@ public class Main extends Plugin implements Listener {
BungeeUtils.sendCustomData(player, "position", pos); BungeeUtils.sendCustomData(player, "position", pos);
} }
if(subchannel.equals("positionof")) { if(subchannel.equals("positionof")) {
Server server = man.getSingleServer(player); QueueServer server = man.getSingleServer(player);
String pos = msgs.get("placeholders.position.none"); String pos = msgs.get("placeholders.position.none");
if(server != null) { if(server != null) {
pos = server.getQueue().size()+""; pos = server.getQueue().size()+"";
@@ -259,12 +259,12 @@ public class Main extends Plugin implements Listener {
BungeeUtils.sendCustomData(player, "positionof", pos); BungeeUtils.sendCustomData(player, "positionof", pos);
} }
if(subchannel.equals("inqueue")) { if(subchannel.equals("inqueue")) {
Server server = man.getSingleServer(player); QueueServer server = man.getSingleServer(player);
BungeeUtils.sendCustomData(player, "inqueue", (server != null)+""); BungeeUtils.sendCustomData(player, "inqueue", (server != null)+"");
} }
if(subchannel.equals("queuedfor")) { if(subchannel.equals("queuedfor")) {
String srv = in.readUTF(); String srv = in.readUTF();
Server server = man.findServer(srv); QueueServer server = man.findServer(srv);
if(server == null) return; if(server == null) return;
BungeeUtils.sendCustomData(player, "queuedfor", srv, server.getQueue().size()+""); BungeeUtils.sendCustomData(player, "queuedfor", srv, server.getQueue().size()+"");
} }
+109 -25
View File
@@ -1,12 +1,14 @@
package us.ajg0702.queue; package us.ajg0702.queue;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.ServerPing;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.config.ServerInfo;
@@ -49,7 +51,7 @@ public class Manager {
/* /*
* Returns all servers * Returns all servers
*/ */
public List<Server> getServers() { public List<QueueServer> getServers() {
return servers; return servers;
} }
@@ -59,7 +61,7 @@ public class Manager {
*/ */
public List<String> getServerNames() { public List<String> getServerNames() {
List<String> names = new ArrayList<>(); List<String> names = new ArrayList<>();
for(Server s : servers) { for(QueueServer s : servers) {
names.add(s.getName()); names.add(s.getName());
} }
return names; return names;
@@ -132,11 +134,11 @@ public class Manager {
* @return The name of the server, the placeholder none message if not queued * @return The name of the server, the placeholder none message if not queued
*/ */
public String getQueuedName(ProxiedPlayer p) { public String getQueuedName(ProxiedPlayer p) {
List<Server> queued = findPlayerInQueue(p); List<QueueServer> queued = findPlayerInQueue(p);
if(queued.size() <= 0) { if(queued.size() <= 0) {
return msgs.get("placeholders.queued.none"); return msgs.get("placeholders.queued.none");
} }
Server selected = queued.get(0); QueueServer selected = queued.get(0);
if(pl.config.getString("multi-server-queue-pick").equalsIgnoreCase("last")) { if(pl.config.getString("multi-server-queue-pick").equalsIgnoreCase("last")) {
selected = queued.get(queued.size()-1); selected = queued.get(queued.size()-1);
@@ -150,12 +152,12 @@ public class Manager {
* @param p The player * @param p The player
* @return The server that was chosen that the player is queued for. * @return The server that was chosen that the player is queued for.
*/ */
public Server getSingleServer(ProxiedPlayer p) { public QueueServer getSingleServer(ProxiedPlayer p) {
List<Server> queued = findPlayerInQueue(p); List<QueueServer> queued = findPlayerInQueue(p);
if(queued.size() <= 0) { if(queued.size() <= 0) {
return null; return null;
} }
Server selected = queued.get(0); QueueServer selected = queued.get(0);
if(pl.config.getString("multi-server-queue-pick").equalsIgnoreCase("last")) { if(pl.config.getString("multi-server-queue-pick").equalsIgnoreCase("last")) {
selected = queued.get(queued.size()-1); selected = queued.get(queued.size()-1);
@@ -166,17 +168,52 @@ public class Manager {
List<Server> servers = new ArrayList<>(); List<QueueServer> servers = new ArrayList<>();
/** /**
* Checks servers that are in bungeecord and adds any it doesnt * Checks servers that are in bungeecord and adds any it doesnt
* know about. * know about.
*
* Also creates/edits server groups
*/ */
public void reloadServers() { public void reloadServers() {
Map<String, ServerInfo> svs = ProxyServer.getInstance().getServers(); Map<String, ServerInfo> svs = ProxyServer.getInstance().getServers();
for(String name : svs.keySet()) { for(String name : svs.keySet()) {
if(findServer(name) != null) continue; if(findServer(name) != null) continue;
ServerInfo info = svs.get(name); ServerInfo info = svs.get(name);
servers.add(new Server(name, info)); servers.add(new QueueServer(name, info));
}
List<String> groupsraw = pl.config.getStringList("server-groups");
for(String groupraw : groupsraw) {
if(groupraw.isEmpty()) {
pl.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(",");
if(getServer(groupname) != null) {
pl.getLogger().warning("The name of a group ('"+groupname+"') cannot be the same as the name of a server!");
continue;
}
List<ServerInfo> servers = new ArrayList<>();
for(String serverraw : serversraw) {
ServerInfo si = svs.get(serverraw);
if(si == null) {
pl.getLogger().warning("Could not find server named '"+serverraw+"' in servergroup '"+groupname+"'!");
continue;
}
}
if(servers.size() == 0) {
pl.getLogger().warning("Server group '"+groupname+"' has no servers! Ignoring it.");
continue;
}
this.servers.add(new QueueServer(groupname, servers));
} }
} }
@@ -188,7 +225,7 @@ public class Manager {
if(!pl.getConfig().getBoolean("send-actionbar")) return; if(!pl.getConfig().getBoolean("send-actionbar")) return;
for(ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) { for(ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) {
Server s = this.getSingleServer(p); QueueServer s = this.getSingleServer(p);
if(s == null) continue; if(s == null) continue;
List<ProxiedPlayer> plys = s.getQueue(); List<ProxiedPlayer> plys = s.getQueue();
@@ -312,7 +349,7 @@ public class Manager {
* along with their time remaining * along with their time remaining
*/ */
public void sendMessages() { public void sendMessages() {
for(Server s : servers) { for(QueueServer s : servers) {
int ot = s.getOfflineTime(); int ot = s.getOfflineTime();
List<ProxiedPlayer> plys = s.getQueue(); List<ProxiedPlayer> plys = s.getQueue();
for(ProxiedPlayer ply : plys) { for(ProxiedPlayer ply : plys) {
@@ -381,8 +418,8 @@ public class Manager {
* @param name Name of the server * @param name Name of the server
* @return The server if it exists (otherwise null) * @return The server if it exists (otherwise null)
*/ */
public Server findServer(String name) { public QueueServer findServer(String name) {
for(Server server : servers) { for(QueueServer server : servers) {
if(server.getName().equals(name)) { if(server.getName().equals(name)) {
return server; return server;
} }
@@ -394,7 +431,7 @@ public class Manager {
* Updates info about servers. * Updates info about servers.
*/ */
public void updateServers() { public void updateServers() {
Iterator<Server> it = servers.iterator(); Iterator<QueueServer> it = servers.iterator();
while(it.hasNext()) { while(it.hasNext()) {
it.next().update(); it.next().update();
} }
@@ -411,7 +448,7 @@ public class Manager {
* @param server The server to send the first player in the queue. null for all servers. * @param server The server to send the first player in the queue. null for all servers.
*/ */
public void sendPlayers(String server) { public void sendPlayers(String server) {
for(Server s : servers) { for(QueueServer s : servers) {
String name = s.getName(); String name = s.getName();
if(server != null && !server.equals(name)) continue; if(server != null && !server.equals(name)) continue;
if(!s.isOnline()) continue; if(!s.isOnline()) continue;
@@ -419,10 +456,36 @@ public class Manager {
if(s.getQueue().size() <= 0) continue; if(s.getQueue().size() <= 0) continue;
if(pl.config.getBoolean("send-all-when-back-online") && s.justWentOnline() && s.isOnline()) { if(pl.config.getBoolean("send-all-when-back-online") && s.justWentOnline() && s.isOnline()) {
for(ProxiedPlayer p : s.getQueue()) { for(ProxiedPlayer p : s.getQueue()) {
if(s.isFull() && !p.hasPermission("ajqueue.joinfull")) break;
if(s.isFull() && !p.hasPermission("ajqueue.joinfull")) continue;
HashMap<ServerInfo, ServerPing> serverInfos = s.getLastPings();
ServerInfo selected = null;
int selectednum = 0;
for(ServerInfo si : serverInfos.keySet()) {
ServerPing sp = serverInfos.get(si);
int online = sp.getPlayers().getOnline();
if(selected == null) {
selected = si;
selectednum = online;
continue;
}
if(selectednum > online && findServer(si.getName()).isJoinable(p)) {
selected = si;
selectednum = online;
continue;
}
}
if(selected == null) {
pl.getLogger().severe("Could not find ideal server for server/group '"+s.getName()+"'!");
continue;
}
p.sendMessage(msgs.getBC("status.sending-now", "SERVER:"+pl.aliases.getAlias(name))); p.sendMessage(msgs.getBC("status.sending-now", "SERVER:"+pl.aliases.getAlias(name)));
p.connect(s.getInfo()); p.connect(selected);
} }
return; return;
} }
@@ -446,7 +509,28 @@ public class Manager {
if(s.isFull() && !nextplayer.hasPermission("ajqueue.joinfull")) continue; if(s.isFull() && !nextplayer.hasPermission("ajqueue.joinfull")) continue;
nextplayer.sendMessage(Main.formatMessage(msgs.get("status.sending-now").replaceAll("\\{SERVER\\}", pl.aliases.getAlias(name)))); nextplayer.sendMessage(Main.formatMessage(msgs.get("status.sending-now").replaceAll("\\{SERVER\\}", pl.aliases.getAlias(name))));
nextplayer.connect(s.getInfo()); HashMap<ServerInfo, ServerPing> serverInfos = s.getLastPings();
ServerInfo selected = null;
int selectednum = 0;
for(ServerInfo si : serverInfos.keySet()) {
ServerPing sp = serverInfos.get(si);
int online = sp.getPlayers().getOnline();
if(selected == null) {
selected = si;
selectednum = online;
continue;
}
if(selectednum > online && findServer(si.getName()).isJoinable(nextplayer)) {
selected = si;
selectednum = online;
continue;
}
}
if(selected == null) {
pl.getLogger().severe("Could not find ideal server for server/group '"+s.getName()+"'!");
continue;
}
nextplayer.connect(selected);
} }
} }
@@ -456,7 +540,7 @@ public class Manager {
* @param s The name of the server * @param s The name of the server
*/ */
public void addToQueue(ProxiedPlayer p, String s) { public void addToQueue(ProxiedPlayer p, String s) {
Server server = findServer(s); QueueServer server = findServer(s);
if(server == null) { if(server == null) {
p.sendMessage(msgs.getBC("errors.server-not-exist")); p.sendMessage(msgs.getBC("errors.server-not-exist"));
return; return;
@@ -477,7 +561,7 @@ public class Manager {
return; return;
} }
List<Server> beforeQueues = findPlayerInQueue(p); List<QueueServer> beforeQueues = findPlayerInQueue(p);
if(beforeQueues.size() > 0) { if(beforeQueues.size() > 0) {
if(beforeQueues.contains(server)) { if(beforeQueues.contains(server)) {
p.sendMessage(msgs.getBC("errors.already-queued")); p.sendMessage(msgs.getBC("errors.already-queued"));
@@ -485,7 +569,7 @@ public class Manager {
} }
if(!pl.config.getBoolean("allow-multiple-queues")) { if(!pl.config.getBoolean("allow-multiple-queues")) {
p.sendMessage(msgs.getBC("status.left-last-queue")); p.sendMessage(msgs.getBC("status.left-last-queue"));
for(Server ser : beforeQueues) { for(QueueServer ser : beforeQueues) {
ser.getQueue().remove(p); ser.getQueue().remove(p);
} }
} }
@@ -549,9 +633,9 @@ public class Manager {
* @param p The player to search for * @param p The player to search for
* @return The servers the player is queued for. * @return The servers the player is queued for.
*/ */
public List<Server> findPlayerInQueue(ProxiedPlayer p) { public List<QueueServer> findPlayerInQueue(ProxiedPlayer p) {
List<Server> srs = new ArrayList<>(); List<QueueServer> srs = new ArrayList<>();
for(Server s : servers) { for(QueueServer s : servers) {
if(s.getQueue().contains(p)) { if(s.getQueue().contains(p)) {
srs.add(s); srs.add(s);
} }
@@ -559,7 +643,7 @@ public class Manager {
return srs; return srs;
} }
public Server getServer(String name) { public QueueServer getServer(String name) {
return findServer(name); return findServer(name);
} }
} }
@@ -7,7 +7,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Command; import net.md_5.bungee.api.plugin.Command;
import us.ajg0702.queue.Main; import us.ajg0702.queue.Main;
import us.ajg0702.queue.Manager; import us.ajg0702.queue.Manager;
import us.ajg0702.queue.Server; import us.ajg0702.queue.QueueServer;
import us.ajg0702.utils.bungee.BungeeMessages; import us.ajg0702.utils.bungee.BungeeMessages;
public class LeaveCommand extends Command { public class LeaveCommand extends Command {
@@ -27,7 +27,7 @@ public class LeaveCommand extends Command {
} }
Manager man = Manager.getInstance(); Manager man = Manager.getInstance();
ProxiedPlayer p = (ProxiedPlayer) sender; ProxiedPlayer p = (ProxiedPlayer) sender;
List<Server> servers = man.findPlayerInQueue(p); List<QueueServer> servers = man.findPlayerInQueue(p);
if(servers.size() == 0) { if(servers.size() == 0) {
p.sendMessage(msgs.getBC("commands.leave.no-queues")); p.sendMessage(msgs.getBC("commands.leave.no-queues"));
@@ -47,7 +47,7 @@ public class LeaveCommand extends Command {
} }
String leaving = args[0]; String leaving = args[0];
Server leavingsrv = man.getServer(leaving); QueueServer leavingsrv = man.getServer(leaving);
if(leavingsrv == null) { if(leavingsrv == null) {
p.sendMessage(msgs.getBC("commands.leave.not-queued", "QUEUES:"+getQueueList(servers))); p.sendMessage(msgs.getBC("commands.leave.not-queued", "QUEUES:"+getQueueList(servers)));
return; return;
@@ -62,9 +62,9 @@ public class LeaveCommand extends Command {
} }
private String getQueueList(List<Server> servers) { private String getQueueList(List<QueueServer> servers) {
String queueList = ""; String queueList = "";
for(Server server : servers) { for(QueueServer server : servers) {
queueList += msgs.get("commands.leave.queues-list-format").replaceAll("\\{NAME\\}", server.getName()); queueList += msgs.get("commands.leave.queues-list-format").replaceAll("\\{NAME\\}", server.getName());
} }
if(queueList.length() > 2) { if(queueList.length() > 2) {
@@ -5,7 +5,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Command; import net.md_5.bungee.api.plugin.Command;
import us.ajg0702.queue.Main; import us.ajg0702.queue.Main;
import us.ajg0702.queue.Manager; import us.ajg0702.queue.Manager;
import us.ajg0702.queue.Server; import us.ajg0702.queue.QueueServer;
import us.ajg0702.utils.bungee.BungeeMessages; import us.ajg0702.utils.bungee.BungeeMessages;
import java.util.ArrayList; import java.util.ArrayList;
@@ -44,7 +44,7 @@ public class ManageCommand extends Command {
} }
if(args[0].equalsIgnoreCase("list")) { if(args[0].equalsIgnoreCase("list")) {
int total = 0; int total = 0;
for(Server server : Manager.getInstance().getServers()) { for(QueueServer server : Manager.getInstance().getServers()) {
String msg = msgs.get("list.format").replaceAll("\\{SERVER\\}", server.getName()); String msg = msgs.get("list.format").replaceAll("\\{SERVER\\}", server.getName());
String playerlist = ""; String playerlist = "";
@@ -71,7 +71,7 @@ public class ManageCommand extends Command {
return; return;
} }
if(args[0].equalsIgnoreCase("statusdebug")) { if(args[0].equalsIgnoreCase("statusdebug")) {
Server s = Manager.getInstance().getSingleServer((ProxiedPlayer) sender); QueueServer s = Manager.getInstance().getSingleServer((ProxiedPlayer) sender);
if(s == null) return; if(s == null) return;
sender.sendMessage(Main.formatMessage(s.getJoinableDebug((ProxiedPlayer) sender))); sender.sendMessage(Main.formatMessage(s.getJoinableDebug((ProxiedPlayer) sender)));
} }
@@ -102,7 +102,7 @@ public class ManageCommand extends Command {
sender.sendMessage(msgs.getBC("")); sender.sendMessage(msgs.getBC(""));
return; return;
} }
Server srv = Manager.getInstance().findServer(args[1]); QueueServer srv = Manager.getInstance().findServer(args[1]);
if(srv == null) { if(srv == null) {
sender.sendMessage(msgs.getBC("commands.pause.no-server", "SERVER:"+args[1])); sender.sendMessage(msgs.getBC("commands.pause.no-server", "SERVER:"+args[1]));
return; return;
+8
View File
@@ -78,6 +78,7 @@ multi-server-queue-pick: last
# for example, instead of showing players "event-a", this option can make it appear as "Event A" # for example, instead of showing players "event-a", this option can make it appear as "Event A"
# With this example, you would use this: - "event-a:Event A" # With this example, you would use this: - "event-a:Event A"
# Note that currently players still have to use the normal names in queue commands and leave commands # Note that currently players still have to use the normal names in queue commands and leave commands
# Format: "realname:Alias"
server-aliases: server-aliases:
- "event-a:Event A" - "event-a:Event A"
@@ -110,3 +111,10 @@ send-all-when-back-online: false
# Replace <server> with the name of the server # Replace <server> with the name of the server
# Default: false # Default: false
joinfrom-server-permission: false joinfrom-server-permission: false
# Server groups are a group of servers that you can queue for. It will send you to the server that is the least full.
# If all servers in the group are full, it will act the same as it would when a single server is full.
# Same if all servers are offline. It will only send players to servers that are online.
# Format: "groupname:server1,server2,etc"
server-groups:
- "lobbys:lobby-1,lobby-2,lobby-3"