server groups
This commit is contained in:
@@ -163,11 +163,11 @@ public class Main extends Plugin implements Listener {
|
||||
@EventHandler
|
||||
public void moveServer(ServerSwitchEvent e) {
|
||||
ProxiedPlayer p = e.getPlayer();
|
||||
List<Server> alreadyqueued = man.findPlayerInQueue(p);
|
||||
for(Server ser : alreadyqueued) {
|
||||
List<QueueServer> alreadyqueued = man.findPlayerInQueue(p);
|
||||
for(QueueServer ser : alreadyqueued) {
|
||||
List<ProxiedPlayer> queue = ser.getQueue();
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -189,8 +189,8 @@ public class Main extends Plugin implements Listener {
|
||||
public void onLeave(PlayerDisconnectEvent e) {
|
||||
ProxiedPlayer p = e.getPlayer();
|
||||
if(p.hasPermission("ajqueue.stay-queued-on-leave")) return;
|
||||
List<Server> servers = man.findPlayerInQueue(p);
|
||||
for(Server server : servers) {
|
||||
List<QueueServer> servers = man.findPlayerInQueue(p);
|
||||
for(QueueServer server : servers) {
|
||||
server.getQueue().remove(p);
|
||||
}
|
||||
}
|
||||
@@ -198,9 +198,9 @@ public class Main extends Plugin implements Listener {
|
||||
@EventHandler
|
||||
public void onFailedMove(ServerKickEvent e) {
|
||||
ProxiedPlayer p = e.getPlayer();
|
||||
List<Server> queuedServers = man.findPlayerInQueue(p);
|
||||
for(Server server : queuedServers) {
|
||||
if(!(e.getKickedFrom().equals(server.getInfo()))) continue;
|
||||
List<QueueServer> queuedServers = man.findPlayerInQueue(p);
|
||||
for(QueueServer server : queuedServers) {
|
||||
if(!(server.getInfos().contains(e.getKickedFrom()))) continue;
|
||||
if(server.getQueue().indexOf(p) != 0) continue;
|
||||
List<String> kickreasons = config.getStringList("kick-reasons");
|
||||
boolean hasReason = false;
|
||||
@@ -243,7 +243,7 @@ public class Main extends Plugin implements Listener {
|
||||
BungeeUtils.sendCustomData(player, "queuename", aliases.getAlias(man.getQueuedName(player)));
|
||||
}
|
||||
if(subchannel.equals("position")) {
|
||||
Server server = man.getSingleServer(player);
|
||||
QueueServer server = man.getSingleServer(player);
|
||||
String pos = msgs.get("placeholders.position.none");
|
||||
if(server != null) {
|
||||
pos = server.getQueue().indexOf(player)+1+"";
|
||||
@@ -251,7 +251,7 @@ public class Main extends Plugin implements Listener {
|
||||
BungeeUtils.sendCustomData(player, "position", pos);
|
||||
}
|
||||
if(subchannel.equals("positionof")) {
|
||||
Server server = man.getSingleServer(player);
|
||||
QueueServer server = man.getSingleServer(player);
|
||||
String pos = msgs.get("placeholders.position.none");
|
||||
if(server != null) {
|
||||
pos = server.getQueue().size()+"";
|
||||
@@ -259,12 +259,12 @@ public class Main extends Plugin implements Listener {
|
||||
BungeeUtils.sendCustomData(player, "positionof", pos);
|
||||
}
|
||||
if(subchannel.equals("inqueue")) {
|
||||
Server server = man.getSingleServer(player);
|
||||
QueueServer server = man.getSingleServer(player);
|
||||
BungeeUtils.sendCustomData(player, "inqueue", (server != null)+"");
|
||||
}
|
||||
if(subchannel.equals("queuedfor")) {
|
||||
String srv = in.readUTF();
|
||||
Server server = man.findServer(srv);
|
||||
QueueServer server = man.findServer(srv);
|
||||
if(server == null) return;
|
||||
BungeeUtils.sendCustomData(player, "queuedfor", srv, server.getQueue().size()+"");
|
||||
}
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package us.ajg0702.queue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
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.TextComponent;
|
||||
import net.md_5.bungee.api.config.ServerInfo;
|
||||
@@ -49,7 +51,7 @@ public class Manager {
|
||||
/*
|
||||
* Returns all servers
|
||||
*/
|
||||
public List<Server> getServers() {
|
||||
public List<QueueServer> getServers() {
|
||||
return servers;
|
||||
}
|
||||
|
||||
@@ -59,7 +61,7 @@ public class Manager {
|
||||
*/
|
||||
public List<String> getServerNames() {
|
||||
List<String> names = new ArrayList<>();
|
||||
for(Server s : servers) {
|
||||
for(QueueServer s : servers) {
|
||||
names.add(s.getName());
|
||||
}
|
||||
return names;
|
||||
@@ -132,11 +134,11 @@ public class Manager {
|
||||
* @return The name of the server, the placeholder none message if not queued
|
||||
*/
|
||||
public String getQueuedName(ProxiedPlayer p) {
|
||||
List<Server> queued = findPlayerInQueue(p);
|
||||
List<QueueServer> queued = findPlayerInQueue(p);
|
||||
if(queued.size() <= 0) {
|
||||
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")) {
|
||||
selected = queued.get(queued.size()-1);
|
||||
@@ -150,12 +152,12 @@ public class Manager {
|
||||
* @param p The player
|
||||
* @return The server that was chosen that the player is queued for.
|
||||
*/
|
||||
public Server getSingleServer(ProxiedPlayer p) {
|
||||
List<Server> queued = findPlayerInQueue(p);
|
||||
public QueueServer getSingleServer(ProxiedPlayer p) {
|
||||
List<QueueServer> queued = findPlayerInQueue(p);
|
||||
if(queued.size() <= 0) {
|
||||
return null;
|
||||
}
|
||||
Server selected = queued.get(0);
|
||||
QueueServer selected = queued.get(0);
|
||||
|
||||
if(pl.config.getString("multi-server-queue-pick").equalsIgnoreCase("last")) {
|
||||
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
|
||||
* know about.
|
||||
*
|
||||
* Also creates/edits server groups
|
||||
*/
|
||||
public void reloadServers() {
|
||||
Map<String, ServerInfo> svs = ProxyServer.getInstance().getServers();
|
||||
for(String name : svs.keySet()) {
|
||||
if(findServer(name) != null) continue;
|
||||
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;
|
||||
|
||||
for(ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) {
|
||||
Server s = this.getSingleServer(p);
|
||||
QueueServer s = this.getSingleServer(p);
|
||||
|
||||
if(s == null) continue;
|
||||
List<ProxiedPlayer> plys = s.getQueue();
|
||||
@@ -312,7 +349,7 @@ public class Manager {
|
||||
* along with their time remaining
|
||||
*/
|
||||
public void sendMessages() {
|
||||
for(Server s : servers) {
|
||||
for(QueueServer s : servers) {
|
||||
int ot = s.getOfflineTime();
|
||||
List<ProxiedPlayer> plys = s.getQueue();
|
||||
for(ProxiedPlayer ply : plys) {
|
||||
@@ -381,8 +418,8 @@ public class Manager {
|
||||
* @param name Name of the server
|
||||
* @return The server if it exists (otherwise null)
|
||||
*/
|
||||
public Server findServer(String name) {
|
||||
for(Server server : servers) {
|
||||
public QueueServer findServer(String name) {
|
||||
for(QueueServer server : servers) {
|
||||
if(server.getName().equals(name)) {
|
||||
return server;
|
||||
}
|
||||
@@ -394,7 +431,7 @@ public class Manager {
|
||||
* Updates info about servers.
|
||||
*/
|
||||
public void updateServers() {
|
||||
Iterator<Server> it = servers.iterator();
|
||||
Iterator<QueueServer> it = servers.iterator();
|
||||
while(it.hasNext()) {
|
||||
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.
|
||||
*/
|
||||
public void sendPlayers(String server) {
|
||||
for(Server s : servers) {
|
||||
for(QueueServer s : servers) {
|
||||
String name = s.getName();
|
||||
if(server != null && !server.equals(name)) continue;
|
||||
if(!s.isOnline()) continue;
|
||||
@@ -419,10 +456,36 @@ public class Manager {
|
||||
if(s.getQueue().size() <= 0) continue;
|
||||
|
||||
if(pl.config.getBoolean("send-all-when-back-online") && s.justWentOnline() && s.isOnline()) {
|
||||
|
||||
|
||||
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.connect(s.getInfo());
|
||||
p.connect(selected);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -446,7 +509,28 @@ public class Manager {
|
||||
if(s.isFull() && !nextplayer.hasPermission("ajqueue.joinfull")) continue;
|
||||
|
||||
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
|
||||
*/
|
||||
public void addToQueue(ProxiedPlayer p, String s) {
|
||||
Server server = findServer(s);
|
||||
QueueServer server = findServer(s);
|
||||
if(server == null) {
|
||||
p.sendMessage(msgs.getBC("errors.server-not-exist"));
|
||||
return;
|
||||
@@ -477,7 +561,7 @@ public class Manager {
|
||||
return;
|
||||
}
|
||||
|
||||
List<Server> beforeQueues = findPlayerInQueue(p);
|
||||
List<QueueServer> beforeQueues = findPlayerInQueue(p);
|
||||
if(beforeQueues.size() > 0) {
|
||||
if(beforeQueues.contains(server)) {
|
||||
p.sendMessage(msgs.getBC("errors.already-queued"));
|
||||
@@ -485,7 +569,7 @@ public class Manager {
|
||||
}
|
||||
if(!pl.config.getBoolean("allow-multiple-queues")) {
|
||||
p.sendMessage(msgs.getBC("status.left-last-queue"));
|
||||
for(Server ser : beforeQueues) {
|
||||
for(QueueServer ser : beforeQueues) {
|
||||
ser.getQueue().remove(p);
|
||||
}
|
||||
}
|
||||
@@ -549,9 +633,9 @@ public class Manager {
|
||||
* @param p The player to search for
|
||||
* @return The servers the player is queued for.
|
||||
*/
|
||||
public List<Server> findPlayerInQueue(ProxiedPlayer p) {
|
||||
List<Server> srs = new ArrayList<>();
|
||||
for(Server s : servers) {
|
||||
public List<QueueServer> findPlayerInQueue(ProxiedPlayer p) {
|
||||
List<QueueServer> srs = new ArrayList<>();
|
||||
for(QueueServer s : servers) {
|
||||
if(s.getQueue().contains(p)) {
|
||||
srs.add(s);
|
||||
}
|
||||
@@ -559,7 +643,7 @@ public class Manager {
|
||||
return srs;
|
||||
}
|
||||
|
||||
public Server getServer(String name) {
|
||||
public QueueServer getServer(String 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 us.ajg0702.queue.Main;
|
||||
import us.ajg0702.queue.Manager;
|
||||
import us.ajg0702.queue.Server;
|
||||
import us.ajg0702.queue.QueueServer;
|
||||
import us.ajg0702.utils.bungee.BungeeMessages;
|
||||
|
||||
public class LeaveCommand extends Command {
|
||||
@@ -27,7 +27,7 @@ public class LeaveCommand extends Command {
|
||||
}
|
||||
Manager man = Manager.getInstance();
|
||||
ProxiedPlayer p = (ProxiedPlayer) sender;
|
||||
List<Server> servers = man.findPlayerInQueue(p);
|
||||
List<QueueServer> servers = man.findPlayerInQueue(p);
|
||||
|
||||
if(servers.size() == 0) {
|
||||
p.sendMessage(msgs.getBC("commands.leave.no-queues"));
|
||||
@@ -47,7 +47,7 @@ public class LeaveCommand extends Command {
|
||||
}
|
||||
|
||||
String leaving = args[0];
|
||||
Server leavingsrv = man.getServer(leaving);
|
||||
QueueServer leavingsrv = man.getServer(leaving);
|
||||
if(leavingsrv == null) {
|
||||
p.sendMessage(msgs.getBC("commands.leave.not-queued", "QUEUES:"+getQueueList(servers)));
|
||||
return;
|
||||
@@ -62,9 +62,9 @@ public class LeaveCommand extends Command {
|
||||
|
||||
}
|
||||
|
||||
private String getQueueList(List<Server> servers) {
|
||||
private String getQueueList(List<QueueServer> servers) {
|
||||
String queueList = "";
|
||||
for(Server server : servers) {
|
||||
for(QueueServer server : servers) {
|
||||
queueList += msgs.get("commands.leave.queues-list-format").replaceAll("\\{NAME\\}", server.getName());
|
||||
}
|
||||
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 us.ajg0702.queue.Main;
|
||||
import us.ajg0702.queue.Manager;
|
||||
import us.ajg0702.queue.Server;
|
||||
import us.ajg0702.queue.QueueServer;
|
||||
import us.ajg0702.utils.bungee.BungeeMessages;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -44,7 +44,7 @@ public class ManageCommand extends Command {
|
||||
}
|
||||
if(args[0].equalsIgnoreCase("list")) {
|
||||
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 playerlist = "";
|
||||
@@ -71,7 +71,7 @@ public class ManageCommand extends Command {
|
||||
return;
|
||||
}
|
||||
if(args[0].equalsIgnoreCase("statusdebug")) {
|
||||
Server s = Manager.getInstance().getSingleServer((ProxiedPlayer) sender);
|
||||
QueueServer s = Manager.getInstance().getSingleServer((ProxiedPlayer) sender);
|
||||
if(s == null) return;
|
||||
sender.sendMessage(Main.formatMessage(s.getJoinableDebug((ProxiedPlayer) sender)));
|
||||
}
|
||||
@@ -102,7 +102,7 @@ public class ManageCommand extends Command {
|
||||
sender.sendMessage(msgs.getBC(""));
|
||||
return;
|
||||
}
|
||||
Server srv = Manager.getInstance().findServer(args[1]);
|
||||
QueueServer srv = Manager.getInstance().findServer(args[1]);
|
||||
if(srv == null) {
|
||||
sender.sendMessage(msgs.getBC("commands.pause.no-server", "SERVER:"+args[1]));
|
||||
return;
|
||||
|
||||
@@ -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"
|
||||
# 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
|
||||
# Format: "realname:Alias"
|
||||
server-aliases:
|
||||
- "event-a:Event A"
|
||||
|
||||
@@ -110,3 +111,10 @@ send-all-when-back-online: false
|
||||
# Replace <server> with the name of the server
|
||||
# Default: 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"
|
||||
|
||||
Reference in New Issue
Block a user