fix getting ideal server failing

This commit is contained in:
ajgeiss0702
2020-11-14 09:30:14 -07:00
parent a2936046d4
commit 7917f0d4e0
+40 -42
View File
@@ -14,6 +14,7 @@ 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;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
import us.ajg0702.utils.GenUtils;
import us.ajg0702.utils.bungee.BungeeMessages; import us.ajg0702.utils.bungee.BungeeMessages;
import us.ajg0702.utils.bungee.BungeeUtils; import us.ajg0702.utils.bungee.BungeeUtils;
@@ -415,6 +416,42 @@ public class Manager {
} }
} }
/**
* Gets the ideal server in a server group.
*/
public ServerInfo getIdealServer(QueueServer s, ProxiedPlayer p) {
HashMap<ServerInfo, ServerPing> serverInfos = s.getLastPings();
ServerInfo selected = null;
int selectednum = 0;
if(serverInfos.keySet().size() == 1) {
selected = serverInfos.keySet().iterator().next();
} else {
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 && serverInfos.size() > 0) {
selected = serverInfos.keySet().iterator().next();
}
if(selected == null) {
pl.getLogger().warning("Unable to find ideal server, using random server from group.");
int r = GenUtils.randomInt(0, s.getInfos().size()-1);
selected = s.getInfos().get(r);
}
return selected;
}
/** /**
* Attempts to send the first player in all queues * Attempts to send the first player in all queues
*/ */
@@ -443,27 +480,7 @@ public class Manager {
if(s.isFull() && !p.hasPermission("ajqueue.joinfull")) continue; if(s.isFull() && !p.hasPermission("ajqueue.joinfull")) continue;
HashMap<ServerInfo, ServerPing> serverInfos = s.getLastPings(); ServerInfo selected = getIdealServer(s, p);
ServerInfo selected = null;
int selectednum = 0;
if(serverInfos.keySet().size() == 1) {
selected = serverInfos.keySet().iterator().next();
} else {
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) { if(selected == null) {
pl.getLogger().severe("Could not find ideal server for server/group '"+s.getName()+"'!"); pl.getLogger().severe("Could not find ideal server for server/group '"+s.getName()+"'!");
continue; continue;
@@ -530,27 +547,8 @@ public class Manager {
} }
HashMap<ServerInfo, ServerPing> serverInfos = s.getLastPings();
ServerInfo selected = null; ServerInfo selected = getIdealServer(s, nextplayer);
int selectednum = 0;
if(serverInfos.keySet().size() == 1) {
selected = serverInfos.keySet().iterator().next();
} else {
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) { if(selected == null) {
pl.getLogger().severe("Could not find ideal server for server/group '"+s.getName()+"'!"); pl.getLogger().severe("Could not find ideal server for server/group '"+s.getName()+"'!");
continue; continue;