rework (1.3.0)
This commit is contained in:
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<classpath>
|
<classpath>
|
||||||
<classpathentry kind="src" output="target/classes" path="src/main/java">
|
<classpathentry excluding="us/ajg0702/queue/oldMain.java" kind="src" output="target/classes" path="src/main/java">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="optional" value="true"/>
|
<attribute name="optional" value="true"/>
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
@@ -13,15 +13,15 @@
|
|||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||||
<attributes>
|
<attributes>
|
||||||
|
<attribute name="test" value="true"/>
|
||||||
<attribute name="optional" value="true"/>
|
<attribute name="optional" value="true"/>
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
<attribute name="test" value="true"/>
|
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
|
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
|
||||||
<attribute name="test" value="true"/>
|
<attribute name="test" value="true"/>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<groupId>us.ajg0702</groupId>
|
<groupId>us.ajg0702</groupId>
|
||||||
<artifactId>ajQueue</artifactId>
|
<artifactId>ajQueue</artifactId>
|
||||||
<name>ajQueue</name>
|
<name>ajQueue</name>
|
||||||
<version>1.2.0</version>
|
<version>1.3.0</version>
|
||||||
<build>
|
<build>
|
||||||
<resources>
|
<resources>
|
||||||
<resource>
|
<resource>
|
||||||
|
|||||||
+336
@@ -0,0 +1,336 @@
|
|||||||
|
package us.ajg0702.queue;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.Callback;
|
||||||
|
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;
|
||||||
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
|
||||||
|
import net.md_5.bungee.api.event.ServerSwitchEvent;
|
||||||
|
import net.md_5.bungee.api.plugin.Listener;
|
||||||
|
import net.md_5.bungee.api.plugin.Plugin;
|
||||||
|
import net.md_5.bungee.event.EventHandler;
|
||||||
|
import us.ajg0702.queue.commands.LeaveCommand;
|
||||||
|
import us.ajg0702.queue.commands.ManageCommand;
|
||||||
|
import us.ajg0702.queue.commands.MoveCommand;
|
||||||
|
import us.ajg0702.queue.utils.BungeeConfig;
|
||||||
|
import us.ajg0702.queue.utils.BungeeMessages;
|
||||||
|
import us.ajg0702.queue.utils.BungeeStats;
|
||||||
|
import us.ajg0702.queue.utils.BungeeUtils;
|
||||||
|
|
||||||
|
public class oldMain extends Plugin implements Listener {
|
||||||
|
|
||||||
|
static oldMain plugin = null;
|
||||||
|
|
||||||
|
public int timeBetweenPlayers = 5;
|
||||||
|
|
||||||
|
BungeeStats metrics;
|
||||||
|
|
||||||
|
BungeeMessages msgs;
|
||||||
|
|
||||||
|
BungeeConfig config;
|
||||||
|
|
||||||
|
boolean isp;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnable() {
|
||||||
|
plugin = this;
|
||||||
|
|
||||||
|
msgs = BungeeMessages.getInstance(this);
|
||||||
|
|
||||||
|
config = new BungeeConfig(this);
|
||||||
|
checkConfig();
|
||||||
|
|
||||||
|
this.getProxy().getPluginManager().registerCommand(this, new MoveCommand(this));
|
||||||
|
this.getProxy().getPluginManager().registerCommand(this, new ManageCommand(this));
|
||||||
|
this.getProxy().getPluginManager().registerCommand(this, new LeaveCommand(this));
|
||||||
|
|
||||||
|
this.getProxy().getPluginManager().registerListener(this, this);
|
||||||
|
|
||||||
|
getProxy().registerChannel("ajqueue:tospigot");
|
||||||
|
|
||||||
|
timeBetweenPlayers = config.getInt("wait-time");
|
||||||
|
|
||||||
|
updateOnlineServers();
|
||||||
|
|
||||||
|
try {
|
||||||
|
Class.forName("us.ajg0702.queue.Logic");
|
||||||
|
isp = true;
|
||||||
|
} catch(ClassNotFoundException e) {
|
||||||
|
isp = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
metrics = new BungeeStats(this, 7404);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isp() {
|
||||||
|
return isp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static oldMain getInstance() {
|
||||||
|
return plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkConfig() {
|
||||||
|
List<String> svs = getConfig().getStringList("queue-servers");
|
||||||
|
for(String s : svs) {
|
||||||
|
if(!s.contains(":")) {
|
||||||
|
getLogger().warning("The queue-servers section in the config has been set up incorrectly! Please read the comment above the setting and make sure you have a queue server and a destination server separated by a colon (:)");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public BungeeConfig getConfig() {
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BaseComponent[] formatMessage(String text) {
|
||||||
|
return TextComponent.fromLegacyText(net.md_5.bungee.api.ChatColor.translateAlternateColorCodes('&', text));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
HashMap<String, Integer> offlineTime = new HashMap<>();
|
||||||
|
boolean notif = false;
|
||||||
|
public void sendPlayers(String sv) {
|
||||||
|
for(String server : queues.keySet()) {
|
||||||
|
if(sv != null && !server.equalsIgnoreCase(sv)) continue;
|
||||||
|
List<ProxiedPlayer> plys = queues.get(server);
|
||||||
|
if(plys.size() <= 0) continue;
|
||||||
|
while(!plys.get(0).isConnected()) {
|
||||||
|
plys.remove(0);
|
||||||
|
if(plys.size() <= 0) break;
|
||||||
|
}
|
||||||
|
if(plys.size() <= 0) continue;
|
||||||
|
ProxiedPlayer p = plys.get(0);
|
||||||
|
if(!servers.get(server)) {
|
||||||
|
int ot;
|
||||||
|
if(!offlineTime.containsKey(server)) {
|
||||||
|
ot = timeBetweenPlayers;
|
||||||
|
} else {
|
||||||
|
ot = offlineTime.get(server)+timeBetweenPlayers;
|
||||||
|
}
|
||||||
|
offlineTime.put(server, ot);
|
||||||
|
for(ProxiedPlayer ply : plys) {
|
||||||
|
int pos = plys.indexOf(ply)+1;
|
||||||
|
if(pos == 0) {
|
||||||
|
plys.remove(ply);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int len = plys.size();
|
||||||
|
String or = msgs.get("status.offline.restarting");
|
||||||
|
if(ot > config.getInt("offline-time")) {
|
||||||
|
or = msgs.get("status.offline.offline");
|
||||||
|
} else {
|
||||||
|
//ply.sendMessage(formatMessage(ot + " <= "+offlineSecs));
|
||||||
|
}
|
||||||
|
if(notif) {
|
||||||
|
ply.sendMessage(formatMessage(
|
||||||
|
msgs.get("status.offline.base")
|
||||||
|
.replaceAll("\\{STATUS\\}", or)
|
||||||
|
.replaceAll("\\{POS\\}", pos+"")
|
||||||
|
.replaceAll("\\{LEN\\}", len+"")
|
||||||
|
));
|
||||||
|
}
|
||||||
|
if(getConfig().getBoolean("send-actionbar")) {
|
||||||
|
BungeeUtils.sendCustomData(ply, "actionbar", msgs.get("spigot.actionbar.offline")
|
||||||
|
.replaceAll("\\{POS\\}", pos+"")
|
||||||
|
.replaceAll("\\{LEN\\}", len+"")
|
||||||
|
.replaceAll("\\{STATUS\\}", or)+";time="+timeBetweenPlayers);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!notif) {
|
||||||
|
notif = true;
|
||||||
|
} else {
|
||||||
|
notif = false;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
offlineTime.put(server, 0);
|
||||||
|
ServerInfo target = ProxyServer.getInstance().getServerInfo(server);
|
||||||
|
p.connect(target);
|
||||||
|
//plys.remove(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(ProxiedPlayer ply : plys) {
|
||||||
|
int pos = plys.indexOf(ply)+1;
|
||||||
|
int len = plys.size();
|
||||||
|
int time = pos*timeBetweenPlayers;
|
||||||
|
int min = (int) Math.floor((time) / (60));
|
||||||
|
int sec = (int) Math.floor((time % (60)));
|
||||||
|
String timeStr;
|
||||||
|
if(min <= 0) {
|
||||||
|
timeStr = msgs.get("format.time.secs")
|
||||||
|
.replaceAll("\\{m\\}", "0")
|
||||||
|
.replaceAll("\\{s\\}", sec+"");
|
||||||
|
} else {
|
||||||
|
timeStr = msgs.get("format.time.mins")
|
||||||
|
.replaceAll("\\{m\\}", min+"")
|
||||||
|
.replaceAll("\\{s\\}", sec+"");
|
||||||
|
}
|
||||||
|
if(notif) {
|
||||||
|
ply.sendMessage(formatMessage(
|
||||||
|
msgs.get("status.online.base")
|
||||||
|
.replaceAll("\\{POS\\}", pos+"")
|
||||||
|
.replaceAll("\\{LEN\\}", len+"")
|
||||||
|
.replaceAll("\\{TIME\\}", timeStr)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
if(getConfig().getBoolean("send-actionbar")) {
|
||||||
|
BungeeUtils.sendCustomData(ply, "actionbar", msgs.get("spigot.actionbar.online")
|
||||||
|
.replaceAll("\\{POS\\}", pos+"")
|
||||||
|
.replaceAll("\\{LEN\\}", len+"")
|
||||||
|
.replaceAll("\\{TIME\\}", timeStr)+";time="+timeBetweenPlayers);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!notif) {
|
||||||
|
notif = true;
|
||||||
|
} else {
|
||||||
|
notif = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
public void sendPlayers() {
|
||||||
|
sendPlayers(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void moveServer(ServerSwitchEvent e) {
|
||||||
|
ProxiedPlayer p = e.getPlayer();
|
||||||
|
String queue = getPlayerInQueue(p);
|
||||||
|
if(queue != null) {
|
||||||
|
queues.get(queue).remove(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
String servername = e.getPlayer().getServer().getInfo().getName();
|
||||||
|
List<String> svs = config.getStringList("queue-servers");
|
||||||
|
for(String s : svs) {
|
||||||
|
if(!s.contains(":")) continue;
|
||||||
|
String[] parts = s.split("\\:");
|
||||||
|
String from = parts[0];
|
||||||
|
String to = parts[1];
|
||||||
|
if(from.equalsIgnoreCase(servername)) {
|
||||||
|
addToQueue(p, to);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onLeave(PlayerDisconnectEvent e) {
|
||||||
|
ProxiedPlayer p = e.getPlayer();
|
||||||
|
String queue = getPlayerInQueue(p);
|
||||||
|
if(queue != null) {
|
||||||
|
queues.get(queue).remove(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
HashMap<String, Boolean> servers = new HashMap<>();
|
||||||
|
public void updateOnlineServers() {
|
||||||
|
for(final String server : getProxy().getServers().keySet()) {
|
||||||
|
if(!servers.containsKey(server)) {
|
||||||
|
servers.put(server, false);
|
||||||
|
}
|
||||||
|
getProxy().getServers().get(server).ping(new Callback<ServerPing>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void done(ServerPing result, Throwable error) {
|
||||||
|
servers.put(server, error == null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public HashMap<String, List<ProxiedPlayer>> queues = new HashMap<>();
|
||||||
|
public void addToQueue(ProxiedPlayer p, String server) {
|
||||||
|
//getLogger().info("adding "+p.getDisplayName()+" to queue "+server);
|
||||||
|
if(!servers.containsKey(server)) {
|
||||||
|
p.sendMessage(msgs.getBC("errors.server-not-exist"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!queues.containsKey(server)) {
|
||||||
|
queues.put(server, new ArrayList<ProxiedPlayer>());
|
||||||
|
}
|
||||||
|
if(p.getServer().getInfo().getName().equals(server)) {
|
||||||
|
p.sendMessage(msgs.getBC("errors.already-connected"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String currentQueued = getPlayerInQueue(p);
|
||||||
|
List<ProxiedPlayer> list = queues.get(server);
|
||||||
|
if(list.indexOf(p) != -1) {
|
||||||
|
int pos = list.indexOf(p)+1;
|
||||||
|
int len = list.size();
|
||||||
|
p.sendMessage(formatMessage(
|
||||||
|
msgs.get("errors.already-queued")
|
||||||
|
.replaceAll("\\{POS\\}", pos+"")
|
||||||
|
.replaceAll("\\{LEN\\}", len+"")
|
||||||
|
));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(currentQueued != null) {
|
||||||
|
queues.get(currentQueued).remove(p);
|
||||||
|
p.sendMessage(msgs.getBC("status.left-last-queue"));
|
||||||
|
}
|
||||||
|
if(isp) {
|
||||||
|
us.ajg0702.queue.Logic.priorityLogic(list, server, p);
|
||||||
|
} else {
|
||||||
|
if((p.hasPermission("ajqueue.priority") || p.hasPermission("ajqueue.serverpriority."+server)) && list.size() > 0) {
|
||||||
|
int i = 0;
|
||||||
|
for(ProxiedPlayer ply : list) {
|
||||||
|
if(!(ply.hasPermission("ajqueue.priority") || ply.hasPermission("ajqueue.serverpriority."+server))) {
|
||||||
|
list.add(i, p);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if(list.size() == 0) {
|
||||||
|
list.add(p);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
list.add(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int pos = list.indexOf(p)+1;
|
||||||
|
int len = list.size();
|
||||||
|
p.sendMessage(formatMessage(
|
||||||
|
msgs.get("status.now-in-queue")
|
||||||
|
.replaceAll("\\{POS\\}", pos+"")
|
||||||
|
.replaceAll("\\{LEN\\}", len+"")
|
||||||
|
));
|
||||||
|
|
||||||
|
if(list.size() <= 1) {
|
||||||
|
sendPlayers(server);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void sendPlayer(ProxiedPlayer p) {
|
||||||
|
String server = getPlayerInQueue(p);
|
||||||
|
if(server == null) return;
|
||||||
|
sendPlayers(server);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getPlayerInQueue(ProxiedPlayer p) {
|
||||||
|
for(String server : queues.keySet()) {
|
||||||
|
if(queues.get(server).indexOf(p) != -1) {
|
||||||
|
return server;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>us.ajg0702</groupId>
|
<groupId>us.ajg0702</groupId>
|
||||||
<artifactId>ajQueue</artifactId>
|
<artifactId>ajQueue</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.3.0</version>
|
||||||
<name>ajQueue</name>
|
<name>ajQueue</name>
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
|
|||||||
@@ -1,32 +1,26 @@
|
|||||||
package us.ajg0702.queue;
|
package us.ajg0702.queue;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import net.md_5.bungee.api.Callback;
|
|
||||||
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.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
|
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
|
||||||
import net.md_5.bungee.api.event.ServerSwitchEvent;
|
import net.md_5.bungee.api.event.ServerSwitchEvent;
|
||||||
import net.md_5.bungee.api.plugin.Listener;
|
import net.md_5.bungee.api.plugin.Listener;
|
||||||
import net.md_5.bungee.api.plugin.Plugin;
|
import net.md_5.bungee.api.plugin.Plugin;
|
||||||
import net.md_5.bungee.event.EventHandler;
|
import net.md_5.bungee.event.EventHandler;
|
||||||
|
import us.ajg0702.queue.commands.LeaveCommand;
|
||||||
|
import us.ajg0702.queue.commands.ManageCommand;
|
||||||
|
import us.ajg0702.queue.commands.MoveCommand;
|
||||||
import us.ajg0702.queue.utils.BungeeConfig;
|
import us.ajg0702.queue.utils.BungeeConfig;
|
||||||
import us.ajg0702.queue.utils.BungeeMessages;
|
import us.ajg0702.queue.utils.BungeeMessages;
|
||||||
import us.ajg0702.queue.utils.BungeeStats;
|
import us.ajg0702.queue.utils.BungeeStats;
|
||||||
import us.ajg0702.queue.utils.BungeeUtils;
|
|
||||||
|
|
||||||
public class Main extends Plugin implements Listener {
|
public class Main extends Plugin implements Listener {
|
||||||
|
|
||||||
static Main plugin = null;
|
static Main plugin = null;
|
||||||
|
|
||||||
int timeBetweenPlayers = 5;
|
public int timeBetweenPlayers = 5;
|
||||||
|
|
||||||
BungeeStats metrics;
|
BungeeStats metrics;
|
||||||
|
|
||||||
@@ -34,6 +28,8 @@ public class Main extends Plugin implements Listener {
|
|||||||
|
|
||||||
BungeeConfig config;
|
BungeeConfig config;
|
||||||
|
|
||||||
|
Manager man;
|
||||||
|
|
||||||
boolean isp;
|
boolean isp;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -55,8 +51,6 @@ public class Main extends Plugin implements Listener {
|
|||||||
|
|
||||||
timeBetweenPlayers = config.getInt("wait-time");
|
timeBetweenPlayers = config.getInt("wait-time");
|
||||||
|
|
||||||
updateOnlineServers();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Class.forName("us.ajg0702.queue.Logic");
|
Class.forName("us.ajg0702.queue.Logic");
|
||||||
isp = true;
|
isp = true;
|
||||||
@@ -64,12 +58,7 @@ public class Main extends Plugin implements Listener {
|
|||||||
isp = false;
|
isp = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
getProxy().getScheduler().schedule(this, new Runnable() {
|
man = Manager.getInstance(this);
|
||||||
public void run() {
|
|
||||||
updateOnlineServers();
|
|
||||||
sendPlayers();
|
|
||||||
}
|
|
||||||
}, 5, timeBetweenPlayers, TimeUnit.SECONDS);
|
|
||||||
|
|
||||||
|
|
||||||
metrics = new BungeeStats(this, 7404);
|
metrics = new BungeeStats(this, 7404);
|
||||||
@@ -77,10 +66,12 @@ public class Main extends Plugin implements Listener {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Main getInstance() {
|
public boolean isp() {
|
||||||
return plugin;
|
return isp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void checkConfig() {
|
public void checkConfig() {
|
||||||
List<String> svs = getConfig().getStringList("queue-servers");
|
List<String> svs = getConfig().getStringList("queue-servers");
|
||||||
for(String s : svs) {
|
for(String s : svs) {
|
||||||
@@ -100,118 +91,12 @@ public class Main extends Plugin implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HashMap<String, Integer> offlineTime = new HashMap<>();
|
|
||||||
boolean notif = false;
|
|
||||||
public void sendPlayers(String sv) {
|
|
||||||
for(String server : queues.keySet()) {
|
|
||||||
if(sv != null && !server.equalsIgnoreCase(sv)) continue;
|
|
||||||
List<ProxiedPlayer> plys = queues.get(server);
|
|
||||||
if(plys.size() <= 0) continue;
|
|
||||||
while(!plys.get(0).isConnected()) {
|
|
||||||
plys.remove(0);
|
|
||||||
if(plys.size() <= 0) break;
|
|
||||||
}
|
|
||||||
if(plys.size() <= 0) continue;
|
|
||||||
ProxiedPlayer p = plys.get(0);
|
|
||||||
if(!servers.get(server)) {
|
|
||||||
int ot;
|
|
||||||
if(!offlineTime.containsKey(server)) {
|
|
||||||
ot = timeBetweenPlayers;
|
|
||||||
} else {
|
|
||||||
ot = offlineTime.get(server)+timeBetweenPlayers;
|
|
||||||
}
|
|
||||||
offlineTime.put(server, ot);
|
|
||||||
for(ProxiedPlayer ply : plys) {
|
|
||||||
int pos = plys.indexOf(ply)+1;
|
|
||||||
if(pos == 0) {
|
|
||||||
plys.remove(ply);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
int len = plys.size();
|
|
||||||
String or = msgs.get("status.offline.restarting");
|
|
||||||
if(ot > config.getInt("offline-time")) {
|
|
||||||
or = msgs.get("status.offline.offline");
|
|
||||||
} else {
|
|
||||||
//ply.sendMessage(formatMessage(ot + " <= "+offlineSecs));
|
|
||||||
}
|
|
||||||
if(notif) {
|
|
||||||
ply.sendMessage(formatMessage(
|
|
||||||
msgs.get("status.offline.base")
|
|
||||||
.replaceAll("\\{STATUS\\}", or)
|
|
||||||
.replaceAll("\\{POS\\}", pos+"")
|
|
||||||
.replaceAll("\\{LEN\\}", len+"")
|
|
||||||
));
|
|
||||||
}
|
|
||||||
if(getConfig().getBoolean("send-actionbar")) {
|
|
||||||
BungeeUtils.sendCustomData(ply, "actionbar", msgs.get("spigot.actionbar.offline")
|
|
||||||
.replaceAll("\\{POS\\}", pos+"")
|
|
||||||
.replaceAll("\\{LEN\\}", len+"")
|
|
||||||
.replaceAll("\\{STATUS\\}", or)+";time="+timeBetweenPlayers);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!notif) {
|
|
||||||
notif = true;
|
|
||||||
} else {
|
|
||||||
notif = false;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
offlineTime.put(server, 0);
|
|
||||||
ServerInfo target = ProxyServer.getInstance().getServerInfo(server);
|
|
||||||
p.connect(target);
|
|
||||||
//plys.remove(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(ProxiedPlayer ply : plys) {
|
|
||||||
int pos = plys.indexOf(ply)+1;
|
|
||||||
int len = plys.size();
|
|
||||||
int time = pos*timeBetweenPlayers;
|
|
||||||
int min = (int) Math.floor((time) / (60));
|
|
||||||
int sec = (int) Math.floor((time % (60)));
|
|
||||||
String timeStr;
|
|
||||||
if(min <= 0) {
|
|
||||||
timeStr = msgs.get("format.time.secs")
|
|
||||||
.replaceAll("\\{m\\}", "0")
|
|
||||||
.replaceAll("\\{s\\}", sec+"");
|
|
||||||
} else {
|
|
||||||
timeStr = msgs.get("format.time.mins")
|
|
||||||
.replaceAll("\\{m\\}", min+"")
|
|
||||||
.replaceAll("\\{s\\}", sec+"");
|
|
||||||
}
|
|
||||||
if(notif) {
|
|
||||||
ply.sendMessage(formatMessage(
|
|
||||||
msgs.get("status.online.base")
|
|
||||||
.replaceAll("\\{POS\\}", pos+"")
|
|
||||||
.replaceAll("\\{LEN\\}", len+"")
|
|
||||||
.replaceAll("\\{TIME\\}", timeStr)
|
|
||||||
));
|
|
||||||
}
|
|
||||||
if(getConfig().getBoolean("send-actionbar")) {
|
|
||||||
BungeeUtils.sendCustomData(ply, "actionbar", msgs.get("spigot.actionbar.online")
|
|
||||||
.replaceAll("\\{POS\\}", pos+"")
|
|
||||||
.replaceAll("\\{LEN\\}", len+"")
|
|
||||||
.replaceAll("\\{TIME\\}", timeStr)+";time="+timeBetweenPlayers);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!notif) {
|
|
||||||
notif = true;
|
|
||||||
} else {
|
|
||||||
notif = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
public void sendPlayers() {
|
|
||||||
sendPlayers(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void moveServer(ServerSwitchEvent e) {
|
public void moveServer(ServerSwitchEvent e) {
|
||||||
ProxiedPlayer p = e.getPlayer();
|
ProxiedPlayer p = e.getPlayer();
|
||||||
String queue = getPlayerInQueue(p);
|
Server alreadyqueued = man.findPlayerInQueue(p);
|
||||||
if(queue != null) {
|
if(alreadyqueued != null) {
|
||||||
queues.get(queue).remove(p);
|
alreadyqueued.getQueue().remove(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
String servername = e.getPlayer().getServer().getInfo().getName();
|
String servername = e.getPlayer().getServer().getInfo().getName();
|
||||||
@@ -222,7 +107,7 @@ public class Main extends Plugin implements Listener {
|
|||||||
String from = parts[0];
|
String from = parts[0];
|
||||||
String to = parts[1];
|
String to = parts[1];
|
||||||
if(from.equalsIgnoreCase(servername)) {
|
if(from.equalsIgnoreCase(servername)) {
|
||||||
addToQueue(p, to);
|
man.addToQueue(p, to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -230,107 +115,10 @@ public class Main extends Plugin implements Listener {
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onLeave(PlayerDisconnectEvent e) {
|
public void onLeave(PlayerDisconnectEvent e) {
|
||||||
ProxiedPlayer p = e.getPlayer();
|
ProxiedPlayer p = e.getPlayer();
|
||||||
String queue = getPlayerInQueue(p);
|
Server server = man.findPlayerInQueue(p);
|
||||||
if(queue != null) {
|
if(server != null) {
|
||||||
queues.get(queue).remove(p);
|
server.getQueue().remove(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HashMap<String, Boolean> servers = new HashMap<>();
|
|
||||||
public void updateOnlineServers() {
|
|
||||||
for(final String server : getProxy().getServers().keySet()) {
|
|
||||||
if(!servers.containsKey(server)) {
|
|
||||||
servers.put(server, false);
|
|
||||||
}
|
|
||||||
getProxy().getServers().get(server).ping(new Callback<ServerPing>() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void done(ServerPing result, Throwable error) {
|
|
||||||
servers.put(server, error == null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
HashMap<String, List<ProxiedPlayer>> queues = new HashMap<>();
|
|
||||||
public void addToQueue(ProxiedPlayer p, String server) {
|
|
||||||
//getLogger().info("adding "+p.getDisplayName()+" to queue "+server);
|
|
||||||
if(!servers.containsKey(server)) {
|
|
||||||
p.sendMessage(msgs.getBC("errors.server-not-exist"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(!queues.containsKey(server)) {
|
|
||||||
queues.put(server, new ArrayList<ProxiedPlayer>());
|
|
||||||
}
|
|
||||||
if(p.getServer().getInfo().getName().equals(server)) {
|
|
||||||
p.sendMessage(msgs.getBC("errors.already-connected"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
String currentQueued = getPlayerInQueue(p);
|
|
||||||
List<ProxiedPlayer> list = queues.get(server);
|
|
||||||
if(list.indexOf(p) != -1) {
|
|
||||||
int pos = list.indexOf(p)+1;
|
|
||||||
int len = list.size();
|
|
||||||
p.sendMessage(formatMessage(
|
|
||||||
msgs.get("errors.already-queued")
|
|
||||||
.replaceAll("\\{POS\\}", pos+"")
|
|
||||||
.replaceAll("\\{LEN\\}", len+"")
|
|
||||||
));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(currentQueued != null) {
|
|
||||||
queues.get(currentQueued).remove(p);
|
|
||||||
p.sendMessage(msgs.getBC("status.left-last-queue"));
|
|
||||||
}
|
|
||||||
if(isp) {
|
|
||||||
us.ajg0702.queue.Logic.priorityLogic(list, server, p);
|
|
||||||
} else {
|
|
||||||
if((p.hasPermission("ajqueue.priority") || p.hasPermission("ajqueue.serverpriority."+server)) && list.size() > 0) {
|
|
||||||
int i = 0;
|
|
||||||
for(ProxiedPlayer ply : list) {
|
|
||||||
if(!(ply.hasPermission("ajqueue.priority") || ply.hasPermission("ajqueue.serverpriority."+server))) {
|
|
||||||
list.add(i, p);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
if(list.size() == 0) {
|
|
||||||
list.add(p);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
list.add(p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
int pos = list.indexOf(p)+1;
|
|
||||||
int len = list.size();
|
|
||||||
p.sendMessage(formatMessage(
|
|
||||||
msgs.get("status.now-in-queue")
|
|
||||||
.replaceAll("\\{POS\\}", pos+"")
|
|
||||||
.replaceAll("\\{LEN\\}", len+"")
|
|
||||||
));
|
|
||||||
|
|
||||||
if(list.size() <= 1) {
|
|
||||||
sendPlayers(server);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void sendPlayer(ProxiedPlayer p) {
|
|
||||||
String server = getPlayerInQueue(p);
|
|
||||||
if(server == null) return;
|
|
||||||
sendPlayers(server);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public String getPlayerInQueue(ProxiedPlayer p) {
|
|
||||||
for(String server : queues.keySet()) {
|
|
||||||
if(queues.get(server).indexOf(p) != -1) {
|
|
||||||
return server;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,329 @@
|
|||||||
|
package us.ajg0702.queue;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
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.config.ServerInfo;
|
||||||
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
import us.ajg0702.queue.utils.BungeeMessages;
|
||||||
|
import us.ajg0702.queue.utils.BungeeUtils;
|
||||||
|
|
||||||
|
public class Manager {
|
||||||
|
|
||||||
|
static Manager INSTANCE = null;
|
||||||
|
public static Manager getInstance(Main pl) {
|
||||||
|
if(INSTANCE == null) {
|
||||||
|
INSTANCE = new Manager(pl);
|
||||||
|
}
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
public static Manager getInstance() {
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BungeeMessages msgs;
|
||||||
|
|
||||||
|
|
||||||
|
Main pl;
|
||||||
|
private Manager(Main pl) {
|
||||||
|
this.pl = pl;
|
||||||
|
msgs = BungeeMessages.getInstance();
|
||||||
|
reloadServers();
|
||||||
|
reloadIntervals();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns all servers
|
||||||
|
*/
|
||||||
|
public List<Server> getServers() {
|
||||||
|
return servers;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int sendId = -1;
|
||||||
|
int updateId = -1;
|
||||||
|
int messagerId = -1;
|
||||||
|
int actionbarId = -1;
|
||||||
|
/**
|
||||||
|
* Clears all intervals and re-makes them
|
||||||
|
*/
|
||||||
|
public void reloadIntervals() {
|
||||||
|
if(sendId != -1) {
|
||||||
|
pl.getProxy().getScheduler().cancel(sendId);
|
||||||
|
}
|
||||||
|
if(updateId != -1) {
|
||||||
|
pl.getProxy().getScheduler().cancel(updateId);
|
||||||
|
}
|
||||||
|
if(messagerId != -1) {
|
||||||
|
pl.getProxy().getScheduler().cancel(messagerId);
|
||||||
|
}
|
||||||
|
if(actionbarId != -1) {
|
||||||
|
pl.getProxy().getScheduler().cancel(actionbarId);
|
||||||
|
}
|
||||||
|
|
||||||
|
sendId = pl.getProxy().getScheduler().schedule(pl, new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
sendPlayers();
|
||||||
|
}
|
||||||
|
}, 2, pl.timeBetweenPlayers, TimeUnit.SECONDS).getId();
|
||||||
|
|
||||||
|
updateId = pl.getProxy().getScheduler().schedule(pl, new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
updateServers();
|
||||||
|
}
|
||||||
|
}, 0, Math.max(pl.timeBetweenPlayers, 2), TimeUnit.SECONDS).getId();
|
||||||
|
|
||||||
|
messagerId = pl.getProxy().getScheduler().schedule(pl, new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
sendMessages();
|
||||||
|
}
|
||||||
|
}, 0, pl.getConfig().getInt("message-time"), TimeUnit.SECONDS).getId();
|
||||||
|
actionbarId = pl.getProxy().getScheduler().schedule(pl, new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
sendActionBars();
|
||||||
|
}
|
||||||
|
}, 0, 2, TimeUnit.SECONDS).getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
List<Server> servers = new ArrayList<>();
|
||||||
|
/**
|
||||||
|
* Checks servers that are in bungeecord and adds any it doesnt
|
||||||
|
* know about.
|
||||||
|
*/
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends actionbar updates to all players in all queues with their
|
||||||
|
* position in the queue and time remaining
|
||||||
|
*/
|
||||||
|
public void sendActionBars() {
|
||||||
|
if(!pl.getConfig().getBoolean("send-actionbar")) return;
|
||||||
|
for(Server s : servers) {
|
||||||
|
int ot = s.getOfflineTime();
|
||||||
|
List<ProxiedPlayer> plys = s.getQueue();
|
||||||
|
for(ProxiedPlayer ply : plys) {
|
||||||
|
int pos = plys.indexOf(ply)+1;
|
||||||
|
if(pos == 0) {
|
||||||
|
plys.remove(ply);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int len = plys.size();
|
||||||
|
if(!s.isOnline()) {
|
||||||
|
String or = msgs.get("status.offline.restarting");
|
||||||
|
if(ot > pl.config.getInt("offline-time")) {
|
||||||
|
or = msgs.get("status.offline.offline");
|
||||||
|
}
|
||||||
|
BungeeUtils.sendCustomData(ply, "actionbar", msgs.get("spigot.actionbar.offline")
|
||||||
|
.replaceAll("\\{POS\\}", pos+"")
|
||||||
|
.replaceAll("\\{LEN\\}", len+"")
|
||||||
|
.replaceAll("\\{STATUS\\}", or)+";time="+pl.timeBetweenPlayers);
|
||||||
|
} else {
|
||||||
|
int time = pos*pl.timeBetweenPlayers;
|
||||||
|
int min = (int) Math.floor((time) / (60));
|
||||||
|
int sec = (int) Math.floor((time % (60)));
|
||||||
|
String timeStr;
|
||||||
|
if(min <= 0) {
|
||||||
|
timeStr = msgs.get("format.time.secs")
|
||||||
|
.replaceAll("\\{m\\}", "0")
|
||||||
|
.replaceAll("\\{s\\}", sec+"");
|
||||||
|
} else {
|
||||||
|
timeStr = msgs.get("format.time.mins")
|
||||||
|
.replaceAll("\\{m\\}", min+"")
|
||||||
|
.replaceAll("\\{s\\}", sec+"");
|
||||||
|
}
|
||||||
|
BungeeUtils.sendCustomData(ply, "actionbar", msgs.get("spigot.actionbar.online")
|
||||||
|
.replaceAll("\\{POS\\}", pos+"")
|
||||||
|
.replaceAll("\\{LEN\\}", len+"")
|
||||||
|
.replaceAll("\\{TIME\\}", timeStr)+";time="+pl.timeBetweenPlayers);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends the message to the player updating them on their position in the queue
|
||||||
|
* along with their time remaining
|
||||||
|
*/
|
||||||
|
public void sendMessages() {
|
||||||
|
for(Server s : servers) {
|
||||||
|
int ot = s.getOfflineTime();
|
||||||
|
List<ProxiedPlayer> plys = s.getQueue();
|
||||||
|
for(ProxiedPlayer ply : plys) {
|
||||||
|
int pos = plys.indexOf(ply)+1;
|
||||||
|
if(pos == 0) {
|
||||||
|
plys.remove(ply);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int len = plys.size();
|
||||||
|
if(!s.isOnline()) {
|
||||||
|
String or = msgs.get("status.offline.restarting");
|
||||||
|
if(ot > pl.config.getInt("offline-time")) {
|
||||||
|
or = msgs.get("status.offline.offline");
|
||||||
|
}
|
||||||
|
ply.sendMessage(Main.formatMessage(
|
||||||
|
msgs.get("status.offline.base")
|
||||||
|
.replaceAll("\\{STATUS\\}", or)
|
||||||
|
.replaceAll("\\{POS\\}", pos+"")
|
||||||
|
.replaceAll("\\{LEN\\}", len+"")
|
||||||
|
));
|
||||||
|
} else {
|
||||||
|
int time = pos*pl.timeBetweenPlayers;
|
||||||
|
int min = (int) Math.floor((time) / (60));
|
||||||
|
int sec = (int) Math.floor((time % (60)));
|
||||||
|
String timeStr;
|
||||||
|
if(min <= 0) {
|
||||||
|
timeStr = msgs.get("format.time.secs")
|
||||||
|
.replaceAll("\\{m\\}", "0")
|
||||||
|
.replaceAll("\\{s\\}", sec+"");
|
||||||
|
} else {
|
||||||
|
timeStr = msgs.get("format.time.mins")
|
||||||
|
.replaceAll("\\{m\\}", min+"")
|
||||||
|
.replaceAll("\\{s\\}", sec+"");
|
||||||
|
}
|
||||||
|
ply.sendMessage(Main.formatMessage(
|
||||||
|
msgs.get("status.online.base")
|
||||||
|
.replaceAll("\\{POS\\}", pos+"")
|
||||||
|
.replaceAll("\\{LEN\\}", len+"")
|
||||||
|
.replaceAll("\\{TIME\\}", timeStr)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find a server by name
|
||||||
|
* @param name Name of the server
|
||||||
|
* @return The server if it exists (otherwise null)
|
||||||
|
*/
|
||||||
|
public Server findServer(String name) {
|
||||||
|
for(Server server : servers) {
|
||||||
|
if(server.getName().equals(name)) {
|
||||||
|
return server;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates info about servers.
|
||||||
|
*/
|
||||||
|
public void updateServers() {
|
||||||
|
for(Server s : servers) {
|
||||||
|
s.update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempts to send the first player in all queues
|
||||||
|
*/
|
||||||
|
public void sendPlayers() {
|
||||||
|
sendPlayers(null);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Attempts to send the first player in this queue
|
||||||
|
* @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) {
|
||||||
|
String name = s.getName();
|
||||||
|
if(server != null && !server.equals(name)) continue;
|
||||||
|
if(!s.isOnline()) continue;
|
||||||
|
if(s.getQueue().size() <= 0) continue;
|
||||||
|
|
||||||
|
s.getQueue().get(0).connect(s.getInfo());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a player to the queue for a server
|
||||||
|
* @param p The player
|
||||||
|
* @param s The name of the server
|
||||||
|
*/
|
||||||
|
public void addToQueue(ProxiedPlayer p, String s) {
|
||||||
|
Server server = findServer(s);
|
||||||
|
if(server == null) {
|
||||||
|
p.sendMessage(msgs.getBC("errors.server-not-exist"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Server beforeQueue = findPlayerInQueue(p);
|
||||||
|
if(beforeQueue != null) {
|
||||||
|
if(beforeQueue.equals(server)) {
|
||||||
|
p.sendMessage(msgs.getBC("errors.already-queued"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
p.sendMessage(msgs.getBC("status.left-last-queue"));
|
||||||
|
beforeQueue.getQueue().remove(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ProxiedPlayer> list = server.getQueue();
|
||||||
|
if(list.indexOf(p) != -1) {
|
||||||
|
int pos = list.indexOf(p)+1;
|
||||||
|
int len = list.size();
|
||||||
|
p.sendMessage(Main.formatMessage(
|
||||||
|
msgs.get("errors.already-queued")
|
||||||
|
.replaceAll("\\{POS\\}", pos+"")
|
||||||
|
.replaceAll("\\{LEN\\}", len+"")
|
||||||
|
));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(pl.isp) {
|
||||||
|
us.ajg0702.queue.Logic.priorityLogic(list, s, p);
|
||||||
|
} else {
|
||||||
|
if((p.hasPermission("ajqueue.priority") || p.hasPermission("ajqueue.serverpriority."+server)) && list.size() > 0) {
|
||||||
|
int i = 0;
|
||||||
|
for(ProxiedPlayer ply : list) {
|
||||||
|
if(!(ply.hasPermission("ajqueue.priority") || ply.hasPermission("ajqueue.serverpriority."+server))) {
|
||||||
|
list.add(i, p);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if(list.size() == 0) {
|
||||||
|
list.add(p);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
list.add(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int pos = list.indexOf(p)+1;
|
||||||
|
int len = list.size();
|
||||||
|
p.sendMessage(Main.formatMessage(
|
||||||
|
msgs.get("status.now-in-queue")
|
||||||
|
.replaceAll("\\{POS\\}", pos+"")
|
||||||
|
.replaceAll("\\{LEN\\}", len+"")
|
||||||
|
));
|
||||||
|
|
||||||
|
if(list.size() <= 1) {
|
||||||
|
sendPlayers(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds which server the player is queued for
|
||||||
|
* @param p The player to search for
|
||||||
|
* @return The server the player is queued for. Null if not in a queue
|
||||||
|
*/
|
||||||
|
public Server findPlayerInQueue(ProxiedPlayer p) {
|
||||||
|
for(Server s : servers) {
|
||||||
|
if(s.getQueue().contains(p)) return s;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
package us.ajg0702.queue;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.Callback;
|
||||||
|
import net.md_5.bungee.api.ServerPing;
|
||||||
|
import net.md_5.bungee.api.config.ServerInfo;
|
||||||
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
|
public class Server {
|
||||||
|
String name;
|
||||||
|
ServerInfo info;
|
||||||
|
public Server(String name, ServerInfo info) {
|
||||||
|
this.name = name;
|
||||||
|
this.info = info;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
public ServerInfo getInfo() {
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
int offlineTime = 0;
|
||||||
|
boolean online = false;
|
||||||
|
int playercount = 0;
|
||||||
|
int maxplayers = 0;
|
||||||
|
long lastUpdate = -1;
|
||||||
|
public void update() {
|
||||||
|
info.ping(new Callback<ServerPing>() {
|
||||||
|
@Override
|
||||||
|
public void done(ServerPing result, Throwable error) {
|
||||||
|
online = error == null;
|
||||||
|
if(lastUpdate == -1) {
|
||||||
|
lastUpdate = System.currentTimeMillis();
|
||||||
|
offlineTime = 0;
|
||||||
|
} else {
|
||||||
|
int timesincelast = Math.round((System.currentTimeMillis() - lastUpdate)/1000);
|
||||||
|
lastUpdate = System.currentTimeMillis();
|
||||||
|
if(!online) {
|
||||||
|
offlineTime += timesincelast;
|
||||||
|
} else {
|
||||||
|
offlineTime = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!online) {
|
||||||
|
playercount = 0;
|
||||||
|
maxplayers = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
playercount = result.getPlayers().getOnline();
|
||||||
|
maxplayers = result.getPlayers().getMax();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getOfflineTime() {
|
||||||
|
return offlineTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOnline() {
|
||||||
|
return online;
|
||||||
|
}
|
||||||
|
public boolean isFull() {
|
||||||
|
return playercount >= maxplayers;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
List<ProxiedPlayer> queue = new ArrayList<>();
|
||||||
|
public List<ProxiedPlayer> getQueue() {
|
||||||
|
return queue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
boolean whitelisted = false;
|
||||||
|
List<String> whitelistedplayers = new ArrayList<>();
|
||||||
|
public void setWhitelisted(boolean b) {
|
||||||
|
whitelisted = b;
|
||||||
|
}
|
||||||
|
public void setWhitelistedPlayers(List<String> plys) {
|
||||||
|
whitelistedplayers = plys;
|
||||||
|
}
|
||||||
|
public boolean getWhitelisted() {
|
||||||
|
return whitelisted;
|
||||||
|
}
|
||||||
|
public List<String> getWhitelistedPlayers() {
|
||||||
|
return whitelistedplayers;
|
||||||
|
}
|
||||||
|
}
|
||||||
+7
-4
@@ -1,8 +1,11 @@
|
|||||||
package us.ajg0702.queue;
|
package us.ajg0702.queue.commands;
|
||||||
|
|
||||||
import net.md_5.bungee.api.CommandSender;
|
import net.md_5.bungee.api.CommandSender;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
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.Manager;
|
||||||
|
import us.ajg0702.queue.Server;
|
||||||
import us.ajg0702.queue.utils.BungeeMessages;
|
import us.ajg0702.queue.utils.BungeeMessages;
|
||||||
|
|
||||||
public class LeaveCommand extends Command {
|
public class LeaveCommand extends Command {
|
||||||
@@ -21,9 +24,9 @@ public class LeaveCommand extends Command {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ProxiedPlayer p = (ProxiedPlayer) sender;
|
ProxiedPlayer p = (ProxiedPlayer) sender;
|
||||||
String queue = plugin.getPlayerInQueue((ProxiedPlayer) sender);
|
Server server = Manager.getInstance().findPlayerInQueue((ProxiedPlayer) sender);
|
||||||
if(queue != null) {
|
if(server != null) {
|
||||||
plugin.queues.get(queue).remove(p);
|
server.getQueue().remove(p);
|
||||||
p.sendMessage(msgs.getBC("commands.leave-queue"));
|
p.sendMessage(msgs.getBC("commands.leave-queue"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+12
-6
@@ -1,4 +1,4 @@
|
|||||||
package us.ajg0702.queue;
|
package us.ajg0702.queue.commands;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -6,6 +6,9 @@ import java.util.List;
|
|||||||
import net.md_5.bungee.api.CommandSender;
|
import net.md_5.bungee.api.CommandSender;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
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.Manager;
|
||||||
|
import us.ajg0702.queue.Server;
|
||||||
import us.ajg0702.queue.utils.BungeeMessages;
|
import us.ajg0702.queue.utils.BungeeMessages;
|
||||||
|
|
||||||
public class ManageCommand extends Command {
|
public class ManageCommand extends Command {
|
||||||
@@ -31,6 +34,9 @@ public class ManageCommand extends Command {
|
|||||||
}
|
}
|
||||||
msgs.reload();
|
msgs.reload();
|
||||||
pl.getConfig().reload();
|
pl.getConfig().reload();
|
||||||
|
pl.timeBetweenPlayers = pl.getConfig().getInt("wait-time");
|
||||||
|
Manager.getInstance().reloadIntervals();
|
||||||
|
Manager.getInstance().reloadServers();
|
||||||
pl.checkConfig();
|
pl.checkConfig();
|
||||||
sender.sendMessage(msgs.getBC("commands.reload"));
|
sender.sendMessage(msgs.getBC("commands.reload"));
|
||||||
return;
|
return;
|
||||||
@@ -38,11 +44,11 @@ public class ManageCommand extends Command {
|
|||||||
}
|
}
|
||||||
if(args[0].equalsIgnoreCase("list")) {
|
if(args[0].equalsIgnoreCase("list")) {
|
||||||
int total = 0;
|
int total = 0;
|
||||||
for(String server : pl.queues.keySet()) {
|
for(Server server : Manager.getInstance().getServers()) {
|
||||||
|
|
||||||
String msg = msgs.get("list.format").replaceAll("\\{SERVER\\}", server);
|
String msg = msgs.get("list.format").replaceAll("\\{SERVER\\}", server.getName());
|
||||||
String playerlist = "";
|
String playerlist = "";
|
||||||
List<ProxiedPlayer> players = pl.queues.get(server);
|
List<ProxiedPlayer> players = server.getQueue();
|
||||||
if(msg.contains("{LIST}")) {
|
if(msg.contains("{LIST}")) {
|
||||||
for(ProxiedPlayer p : players) {
|
for(ProxiedPlayer p : players) {
|
||||||
playerlist += msgs.get("list.playerlist").replaceAll("\\{NAME\\}", p.getDisplayName());
|
playerlist += msgs.get("list.playerlist").replaceAll("\\{NAME\\}", p.getDisplayName());
|
||||||
@@ -61,7 +67,7 @@ public class ManageCommand extends Command {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(args[0].equalsIgnoreCase("p")) {
|
if(args[0].equalsIgnoreCase("p")) {
|
||||||
sender.sendMessage(Main.formatMessage(pl.isp+""));
|
sender.sendMessage(Main.formatMessage(pl.isp()+""));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(args[0].equalsIgnoreCase("player")) {
|
if(args[0].equalsIgnoreCase("player")) {
|
||||||
@@ -82,7 +88,7 @@ public class ManageCommand extends Command {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ProxiedPlayer ply = pl.getProxy().getPlayer(args[0]);
|
ProxiedPlayer ply = pl.getProxy().getPlayer(args[0]);
|
||||||
pl.addToQueue(ply, args[1]);
|
Manager.getInstance().addToQueue(ply, args[1]);
|
||||||
sender.sendMessage(Main.formatMessage(
|
sender.sendMessage(Main.formatMessage(
|
||||||
msgs.get("send")
|
msgs.get("send")
|
||||||
.replaceAll("\\{PLAYER\\}", ply.getDisplayName())
|
.replaceAll("\\{PLAYER\\}", ply.getDisplayName())
|
||||||
+8
-6
@@ -1,9 +1,11 @@
|
|||||||
package us.ajg0702.queue;
|
package us.ajg0702.queue.commands;
|
||||||
|
|
||||||
import net.md_5.bungee.api.CommandSender;
|
import net.md_5.bungee.api.CommandSender;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
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.Manager;
|
||||||
|
import us.ajg0702.queue.Server;
|
||||||
import us.ajg0702.queue.utils.BungeeMessages;
|
import us.ajg0702.queue.utils.BungeeMessages;
|
||||||
|
|
||||||
public class MoveCommand extends Command {
|
public class MoveCommand extends Command {
|
||||||
@@ -23,11 +25,11 @@ public class MoveCommand extends Command {
|
|||||||
}
|
}
|
||||||
ProxiedPlayer p = (ProxiedPlayer) sender;
|
ProxiedPlayer p = (ProxiedPlayer) sender;
|
||||||
if(args.length > 0) {
|
if(args.length > 0) {
|
||||||
plugin.addToQueue(p, args[0]);
|
Manager.getInstance().addToQueue(p, args[0]);
|
||||||
} else if(args.length == 0) {
|
} else if(args.length == 0) {
|
||||||
String queue = plugin.getPlayerInQueue((ProxiedPlayer) sender);
|
Server server = Manager.getInstance().findPlayerInQueue((ProxiedPlayer) sender);
|
||||||
if(queue != null) {
|
if(server != null) {
|
||||||
plugin.queues.get(queue).remove(p);
|
server.getQueue().remove(p);
|
||||||
p.sendMessage(msgs.getBC("commands.leave-queue"));
|
p.sendMessage(msgs.getBC("commands.leave-queue"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -33,22 +33,6 @@ public class Main extends JavaPlugin implements PluginMessageListener {
|
|||||||
final String text = data.split(";time=")[0];
|
final String text = data.split(";time=")[0];
|
||||||
//getLogger().info("recieved actionbar for "+player.getName()+": "+text);
|
//getLogger().info("recieved actionbar for "+player.getName()+": "+text);
|
||||||
VersionSupport.sendActionBar(p, text);
|
VersionSupport.sendActionBar(p, text);
|
||||||
|
|
||||||
int time = Integer.parseInt(data.split(";time=")[1]);
|
|
||||||
if(time > 2) {
|
|
||||||
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
VersionSupport.sendActionBar(p, text);
|
|
||||||
}
|
|
||||||
}, 2*20);
|
|
||||||
if(time > 4) {
|
|
||||||
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
VersionSupport.sendActionBar(p, text);
|
|
||||||
}
|
|
||||||
}, 4*20);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public class BungeeMessages {
|
|||||||
d.put("status.now-in-queue", "&aYou are now queued! &7You are in position &f{POS}&7 of &f{LEN}&7.\n&7Type &f/leavequeue&7 to leave the queue!");
|
d.put("status.now-in-queue", "&aYou are now queued! &7You are in position &f{POS}&7 of &f{LEN}&7.\n&7Type &f/leavequeue&7 to leave the queue!");
|
||||||
|
|
||||||
d.put("errors.server-not-exist", "&cThat server does not exist!");
|
d.put("errors.server-not-exist", "&cThat server does not exist!");
|
||||||
d.put("errors.already-queued", "&cYou are already queued! &7You are in position &f{POS}&7 of &f{LEN}&7.");
|
d.put("errors.already-queued", "&cYou are already queued for that server!");
|
||||||
d.put("errors.player-only", "&cThis command can only be executed as a player!");
|
d.put("errors.player-only", "&cThis command can only be executed as a player!");
|
||||||
d.put("errors.already-connected", "&cYou are already connected to this server!");
|
d.put("errors.already-connected", "&cYou are already connected to this server!");
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Dont touch this number please
|
# Dont touch this number please
|
||||||
config-version: 3
|
config-version: 4
|
||||||
|
|
||||||
# The time the server will wait between sending people in the queue
|
# The time the server will wait between sending people in the queue
|
||||||
# Default: 5
|
# Default: 5
|
||||||
@@ -9,6 +9,10 @@ wait-time: 5
|
|||||||
# Default: 120
|
# Default: 120
|
||||||
offline-time: 120
|
offline-time: 120
|
||||||
|
|
||||||
|
# The time the server will wait between sending players update messages on what position they are in the queue.
|
||||||
|
# Default: 10
|
||||||
|
message-time: 10
|
||||||
|
|
||||||
# If a player is in a server, you can have the plugin make them automatically join a queue for another server
|
# If a player is in a server, you can have the plugin make them automatically join a queue for another server
|
||||||
# Example with the default values: Player joins survivalfallback server, they will auto-join the queue for survival
|
# Example with the default values: Player joins survivalfallback server, they will auto-join the queue for survival
|
||||||
queue-servers:
|
queue-servers:
|
||||||
|
|||||||
Reference in New Issue
Block a user