diff --git a/build.gradle.kts b/build.gradle.kts index 24e3f36..24f0451 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,10 +5,11 @@ plugins { } group = "us.ajg0702" -version = "1.9.7" +version = "1.9.8" repositories { mavenCentral() + mavenLocal() maven { url = uri("https://jitpack.io") } maven { url = uri("https://gitlab.com/api/v4/projects/19978391/packages/maven") } @@ -17,17 +18,23 @@ repositories { maven { url = uri("https://repo.codemc.org/repository/maven-public") } maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots") } maven { url = uri("https://repo.codemc.io/repository/nms/") } - + maven { url = uri("https://repo.ajg0702.us") } } dependencies { + testImplementation("junit:junit:4.12") + testImplementation("net.kyori:adventure-text-serializer-bungeecord:4.0.0-SNAPSHOT") + testImplementation("net.kyori:adventure-text-serializer-plain:4.0.0-SNAPSHOT") + compileOnly("com.github.MyzelYam:PremiumVanishAPI:2.0.3") compileOnly("net.md-5:bungeecord-api:1.14-SNAPSHOT") compileOnly(group = "org.spigotmc", name = "spigot", version = "1.16.5-R0.1-SNAPSHOT") compileOnly("me.clip:placeholderapi:2.10.4") + compileOnly("net.kyori:adventure-text-serializer-bungeecord:4.0.0-SNAPSHOT") - implementation("us.ajg0702:ajUtils:1.0.0") + implementation("us.ajg0702:ajUtils:1.0.4") implementation("org.bstats:bstats-bungeecord:2.2.1") + implementation("net.kyori:adventure-text-serializer-plain:4.0.0-SNAPSHOT") } @@ -43,6 +50,7 @@ tasks.withType { tasks.shadowJar { relocate("us.ajg0702.utils", "us.ajg0702.queue.utils") relocate("org.bstats", "us.ajg0702.bstats") + relocate("net.kyori", "us.ajg0702.queue.kyori") archiveFileName.set("${baseName}-${version}.${extension}") } diff --git a/src/main/java/us/ajg0702/queue/Main.java b/src/main/java/us/ajg0702/queue/Main.java index efe701a..d7e4c61 100644 --- a/src/main/java/us/ajg0702/queue/Main.java +++ b/src/main/java/us/ajg0702/queue/Main.java @@ -23,10 +23,7 @@ import us.ajg0702.queue.commands.LeaveCommand; import us.ajg0702.queue.commands.ListCommand; import us.ajg0702.queue.commands.ManageCommand; import us.ajg0702.queue.commands.MoveCommand; -import us.ajg0702.utils.bungee.BungeeConfig; -import us.ajg0702.utils.bungee.BungeeMessages; -import us.ajg0702.utils.bungee.BungeeStats; -import us.ajg0702.utils.bungee.BungeeUtils; +import us.ajg0702.utils.bungee.*; public class Main extends Plugin implements Listener { @@ -68,7 +65,7 @@ public class Main extends Plugin implements Listener { d.put("status.online.base", "&7You are in position &f{POS}&7 of &f{LEN}&7. Estimated time: {TIME}"); d.put("status.left-last-queue", "&aYou left the last queue you were in."); - d.put("status.now-in-queue", "&aYou are now queued for {SERVER}! &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 for {SERVER}! &7You are in position &f{POS}&7 of &f{LEN}&7.\n&7Type &f/leavequeue&7 or &fclick here&7 to leave the queue!"); d.put("status.now-in-empty-queue", ""); d.put("status.sending-now", "&aSending you to &f{SERVER} &anow.."); @@ -116,7 +113,7 @@ public class Main extends Plugin implements Listener { d.put("commands.send.player-not-found", "&cThat player could not be found. Make sure they are online!"); d.put("commands.listqueues.header", "&9Queues:"); - d.put("commands.listqueues.format", "{COLOR}{NAME}&7: {COUNT} queued"); + d.put("commands.listqueues.format", "{COLOR}{NAME}&7: {COUNT} queued"); d.put("max-tries-reached", "&cUnable to connect to {SERVER}. Max retries reached."); d.put("auto-queued", "&aYou've been auto-queued for {SERVER} because you were kicked."); @@ -194,7 +191,7 @@ public class Main extends Plugin implements Listener { List svs = config.getStringList("queue-servers"); for(String s : svs) { if(!s.contains(":")) continue; - String[] parts = s.split("\\:"); + String[] parts = s.split(":"); String from = parts[0]; String to = parts[1]; if(from.equalsIgnoreCase(servername)) { @@ -222,15 +219,15 @@ public class Main extends Plugin implements Listener { if(!queuedServers.contains(man.getServer(e.getKickedFrom().getName())) && config.getBoolean("auto-add-to-queue-on-kick")) { - String plainReason = ""; + StringBuilder plainReason = new StringBuilder(); for(BaseComponent b : e.getKickReasonComponent()) { - plainReason += b.toPlainText(); + plainReason.append(b.toPlainText()); } List reasons = config.getStringList("auto-add-kick-reasons"); boolean shouldqueue = false; for(String reason : reasons) { - if(plainReason.toLowerCase().contains(reason.toLowerCase())) { + if(plainReason.toString().toLowerCase().contains(reason.toLowerCase())) { shouldqueue = true; break; } @@ -254,31 +251,22 @@ public class Main extends Plugin implements Listener { if(server.getQueue().indexOf(p) != 0) continue; List kickreasons = config.getStringList("kick-reasons"); //getLogger().info(e.getKickReasonComponent()); - String plainReason = ""; + StringBuilder plainReason = new StringBuilder(); for(BaseComponent b : e.getKickReasonComponent()) { - plainReason += b.toPlainText(); + plainReason.append(b.toPlainText()); } for(String reason : kickreasons) { - if(plainReason.toLowerCase().contains(reason.toLowerCase())) { + if(plainReason.toString().toLowerCase().contains(reason.toLowerCase())) { server.getQueue().remove(p); } } if(config.getBoolean("send-fail-debug")) { - String r = ""; + StringBuilder r = new StringBuilder(); for(BaseComponent b : e.getKickReasonComponent()) { - r += b.toPlainText(); + r.append(b.toPlainText()); } getLogger().warning("Failed to send "+p.getName()+" to "+e.getKickedFrom().getName()+" because "+r); } - - if(plainReason.toLowerCase().contains("whitelist") && plainReason.contains("&ajq;")) { - String rawlist = plainReason.split("&ajq;")[1]; - List list = new ArrayList<>(); - for(String s : rawlist.split(",")) { - list.add(s); - } - - } } } @@ -326,7 +314,7 @@ public class Main extends Plugin implements Listener { } if(subchannel.equals("position")) { QueueServer server = man.getSingleServer(player); - String pos = msgs.get("placeholders.position.none"); + String pos = msgs.getString("placeholders.position.none"); if(server != null) { pos = server.getQueue().indexOf(player)+1+""; } @@ -334,7 +322,7 @@ public class Main extends Plugin implements Listener { } if(subchannel.equals("positionof")) { QueueServer server = man.getSingleServer(player); - String pos = msgs.get("placeholders.position.none"); + String pos = msgs.getString("placeholders.position.none"); if(server != null) { pos = server.getQueue().size()+""; } diff --git a/src/main/java/us/ajg0702/queue/Manager.java b/src/main/java/us/ajg0702/queue/Manager.java index fd7c23b..1014659 100644 --- a/src/main/java/us/ajg0702/queue/Manager.java +++ b/src/main/java/us/ajg0702/queue/Manager.java @@ -40,17 +40,9 @@ public class Manager { msgs = BungeeMessages.getInstance(); reloadIntervals(); if(!pl.config.getBoolean("wait-to-load-servers")) { - pl.getProxy().getScheduler().schedule(pl, new Runnable() { - public void run() { - reloadServers(); - } - }, 0, TimeUnit.MILLISECONDS); + pl.getProxy().getScheduler().schedule(pl, this::reloadServers, 0, TimeUnit.MILLISECONDS); } else { - pl.getProxy().getScheduler().schedule(pl, new Runnable() { - public void run() { - reloadServers(); - } - }, pl.config.getInt("wait-to-load-servers-delay"), TimeUnit.MILLISECONDS); + pl.getProxy().getScheduler().schedule(pl, this::reloadServers, pl.config.getInt("wait-to-load-servers-delay"), TimeUnit.MILLISECONDS); } } @@ -88,76 +80,52 @@ public class Manager { if(sendId != -1) { try { pl.getProxy().getScheduler().cancel(sendId); - } catch(IllegalArgumentException e) {} + } catch(IllegalArgumentException ignored) {} sendId = -1; } if(updateId != -1) { try { pl.getProxy().getScheduler().cancel(updateId); - } catch(IllegalArgumentException e) {} + } catch(IllegalArgumentException ignored) {} updateId = -1; } if(messagerId != -1) { try { pl.getProxy().getScheduler().cancel(messagerId); - } catch(IllegalArgumentException e) {} + } catch(IllegalArgumentException ignored) {} messagerId = -1; } if(actionbarId != -1) { try { pl.getProxy().getScheduler().cancel(actionbarId); - } catch(IllegalArgumentException e) {} + } catch(IllegalArgumentException ignored) {} actionbarId = -1; } if(srvRefId != -1) { try { pl.getProxy().getScheduler().cancel(srvRefId); - } catch(IllegalArgumentException e) {} + } catch(IllegalArgumentException ignored) {} srvRefId = -1; } if(queueEventId != -1) { try { pl.getProxy().getScheduler().cancel(queueEventId); - } catch(IllegalArgumentException e) {} + } catch(IllegalArgumentException ignored) {} queueEventId = -1; } - queueEventId = pl.getProxy().getScheduler().schedule(pl, new Runnable() { - public void run() { - sendQueueEvents(); - } - }, 2, 2, TimeUnit.SECONDS).getId(); + queueEventId = pl.getProxy().getScheduler().schedule(pl, this::sendQueueEvents, 2, 2, TimeUnit.SECONDS).getId(); - sendId = pl.getProxy().getScheduler().schedule(pl, new Runnable() { - public void run() { - sendPlayers(); - } - }, 2, Math.round(pl.timeBetweenPlayers*1000), TimeUnit.MILLISECONDS).getId(); + sendId = pl.getProxy().getScheduler().schedule(pl, this::sendPlayers, 2, Math.round(pl.timeBetweenPlayers*1000), TimeUnit.MILLISECONDS).getId(); - updateId = pl.getProxy().getScheduler().schedule(pl, new Runnable() { - public void run() { - updateServers(); - } - }, 0, Math.max(Math.round(pl.timeBetweenPlayers), 2), TimeUnit.SECONDS).getId(); + updateId = pl.getProxy().getScheduler().schedule(pl, this::updateServers, 0, Math.max(Math.round(pl.timeBetweenPlayers), 2), TimeUnit.SECONDS).getId(); //pl.getLogger().info("Time: "+pl.timeBetweenPlayers); - 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(); + messagerId = pl.getProxy().getScheduler().schedule(pl, this::sendMessages, 0, pl.getConfig().getInt("message-time"), TimeUnit.SECONDS).getId(); + actionbarId = pl.getProxy().getScheduler().schedule(pl, this::sendActionBars, 0, 2, TimeUnit.SECONDS).getId(); if(pl.config.getInt("reload-servers-interval") > 0) { - srvRefId = pl.getProxy().getScheduler().schedule(pl, new Runnable() { - public void run() { - updateServers(); - } - }, pl.config.getInt("reload-servers-interval"), pl.config.getInt("reload-servers-interval"), TimeUnit.SECONDS).getId(); + srvRefId = pl.getProxy().getScheduler().schedule(pl, this::updateServers, pl.config.getInt("reload-servers-interval"), pl.config.getInt("reload-servers-interval"), TimeUnit.SECONDS).getId(); } } @@ -170,7 +138,7 @@ public class Manager { public String getQueuedName(ProxiedPlayer p) { List queued = findPlayerInQueue(p); if(queued.size() <= 0) { - return msgs.get("placeholders.queued.none"); + return msgs.getString("placeholders.queued.none"); } QueueServer selected = queued.get(0); @@ -277,29 +245,8 @@ public class Manager { int len = plys.size(); if(!s.isJoinable(p)) { - String status = "unknown"; - - - if(!s.canAccess(p)) { - status = msgs.get("status.offline.restricted"); - } - - if(s.isFull()) { - status = msgs.get("status.offline.full"); - } - - if(s.isPaused()) { - status = msgs.get("status.offline.paused"); - } - - if(!s.isOnline()) { - status = msgs.get("status.offline.restarting"); - } - - if(s.getOfflineTime() > pl.config.getInt("offline-time")) { - status = msgs.get("status.offline.offline"); - } - + String status = s.getStatusString(p); + p.sendMessage(ChatMessageType.ACTION_BAR, msgs.getBC("spigot.actionbar.offline", "POS:"+pos, @@ -308,17 +255,17 @@ public class Manager { "STATUS:"+status)); } else { int time = (int) Math.round(pos*pl.timeBetweenPlayers); - int min = (int) Math.floor((time) / (60)); - int sec = (int) Math.floor((time % (60))); + int min = (int) Math.floor((time) / (60.0)); + int sec = (int) Math.floor((time % (60.0))); String timeStr; if(min <= 0) { - timeStr = msgs.get("format.time.secs") - .replaceAll("\\{m\\}", "0") - .replaceAll("\\{s\\}", sec+""); + timeStr = msgs.getString("format.time.secs") + .replaceAll("\\{m}", "0") + .replaceAll("\\{s}", sec+""); } else { - timeStr = msgs.get("format.time.mins") - .replaceAll("\\{m\\}", min+"") - .replaceAll("\\{s\\}", sec+""); + timeStr = msgs.getString("format.time.mins") + .replaceAll("\\{m}", min+"") + .replaceAll("\\{s}", sec+""); } p.sendMessage(ChatMessageType.ACTION_BAR, msgs.getBC("spigot.actionbar.online", "POS:"+pos, @@ -332,10 +279,11 @@ public class Manager { public synchronized void sendQueueEvents() { - for(Iterator it = servers.iterator(); it.hasNext();) { - QueueServer s = it.next(); - for(Iterator pit = s.getQueue().iterator(); pit.hasNext();) { - BungeeUtils.sendCustomData(pit.next(), "inqueueevent", "true"); + for (QueueServer s : servers) { + for (ProxiedPlayer player : s.getQueue()) { + if (player == null) continue; + if (!player.isConnected()) continue; + BungeeUtils.sendCustomData(player, "inqueueevent", "true"); } } } @@ -369,57 +317,38 @@ public class Manager { int pos = plys.indexOf(ply)+1; if(pos == 0) return; int len = plys.size(); - int ot = s.getOfflineTime(); if(!s.isJoinable(ply)) { - String status = msgs.get("status.offline.restarting"); - - if(ot > pl.config.getInt("offline-time")) { - status = msgs.get("status.offline.offline"); - } - - if(s.isFull() && s.isOnline()) { - status = msgs.get("status.offline.full"); - } - - if(!s.canAccess(ply)) { - status = msgs.get("status.offline.restricted"); - } - - if(s.isPaused()) { - status = msgs.get("status.offline.paused"); - } + String status = s.getStatusString(ply); if(status.isEmpty()) return; - ply.sendMessage(Main.formatMessage( - msgs.get("status.offline.base") - .replaceAll("\\{STATUS\\}", status) - .replaceAll("\\{POS\\}", pos+"") - .replaceAll("\\{LEN\\}", len+"") - .replaceAll("\\{SERVER\\}", pl.aliases.getAlias(s.getName())) + ply.sendMessage(msgs.getBC("status.offline.base", + "STATUS:"+status, + "POS:"+pos, + "LEN:"+len, + "SERVER:"+pl.aliases.getAlias(s.getName()) )); } else { - if(msgs.get("spigot.actionbar.offline").isEmpty()) return; + if(msgs.getString("spigot.actionbar.offline").isEmpty()) return; int time = (int) Math.round(pos*pl.timeBetweenPlayers); - int min = (int) Math.floor((time) / (60)); - int sec = (int) Math.floor((time % (60))); + int min = (int) Math.floor((time) / (60.0)); + int sec = (int) Math.floor((time % (60.0))); String timeStr; if(min <= 0) { - timeStr = msgs.get("format.time.secs") - .replaceAll("\\{m\\}", "0") - .replaceAll("\\{s\\}", sec+""); + timeStr = msgs.getString("format.time.secs") + .replaceAll("\\{m}", "0") + .replaceAll("\\{s}", sec+""); } else { - timeStr = msgs.get("format.time.mins") - .replaceAll("\\{m\\}", min+"") - .replaceAll("\\{s\\}", sec+""); + timeStr = msgs.getString("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) - .replaceAll("\\{SERVER\\}", pl.aliases.getAlias(s.getName())) + ply.sendMessage(msgs.getBC("status.online.base", + "TIME:"+timeStr, + "POS:"+pos, + "LEN:"+len, + "SERVER:"+pl.aliases.getAlias(s.getName()) )); } } @@ -443,9 +372,8 @@ public class Manager { * Updates info about servers. */ public synchronized void updateServers() { - Iterator it = servers.iterator(); - while(it.hasNext()) { - it.next().update(); + for (QueueServer server : servers) { + server.update(); } } @@ -475,7 +403,6 @@ public class Manager { if(selectednum > online && findServer(si.getName()).isJoinable(p)) { selected = si; selectednum = online; - continue; } } } @@ -539,26 +466,7 @@ public class Manager { } if(!s.canAccess(nextplayer)) continue; - - - /*if(nextplayer == null) { - pl.getLogger().info("nextplayer is null"); - } - if(nextplayer.getServer() == null) { - pl.getLogger().info("getServer is null"); - } - if(nextplayer.getServer().getInfo() == null) { - pl.getLogger().info("getInfo is null"); - } - if(nextplayer.getServer().getInfo().getName() == null) { - pl.getLogger().info("getName is null"); - } - if(s == null) { - pl.getLogger().info("s is null"); - } - if(s.getName() == null) { - pl.getLogger().info("s.getName() is null"); - }*/ + if(s.getQueue().size() <= 0) continue; while(!nextplayer.isConnected()) { @@ -653,13 +561,12 @@ public class Manager { } List list = server.getQueue(); - if(list.indexOf(p) != -1) { + if(list.contains(p)) { 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+"") + p.sendMessage(msgs.getBC("errors.already-queued", + "POS:"+pos, + "LEN:"+len )); return; } @@ -692,11 +599,9 @@ public class Manager { int len = list.size(); - boolean sendInstant = pl.config.getStringList("send-instantly").indexOf(server.getName()) != -1 || server.isJoinable(p); + boolean sendInstant = pl.config.getStringList("send-instantly").contains(server.getName()) || server.isJoinable(p); boolean sendInstantp = list.size() <= 1 && server.canAccess(p); - boolean timeGood = pl.config.getBoolean("check-last-player-sent-time") ? - System.currentTimeMillis() - server.getLastSentTime() > Math.floor(pl.getConfig().getDouble("wait-time")*1000) - : true; + boolean timeGood = !pl.config.getBoolean("check-last-player-sent-time") || System.currentTimeMillis() - server.getLastSentTime() > Math.floor(pl.getConfig().getDouble("wait-time") * 1000); if((sendInstant && (sendInstantp && timeGood))) { sendPlayers(s); @@ -706,12 +611,11 @@ public class Manager { p.sendMessage(m); } } else { - //p.sendMessage(Main.formatMessage("now in queue, not send instant")); - p.sendMessage(Main.formatMessage( - msgs.get("status.now-in-queue") - .replaceAll("\\{POS\\}", pos+"") - .replaceAll("\\{LEN\\}", len+"") - .replaceAll("\\{SERVER\\}", pl.aliases.getAlias(s)) + p.sendMessage(msgs.getBC("status.now-in-queue", + "POS:"+pos, + "LEN:"+len, + "SERVER:"+pl.aliases.getAlias(server.getName()), + "SERVERNAME:"+server.getName() )); } //p.sendMessage(Main.formatMessage(sendInstant+" && ("+sendInstantp+" && " + timeGood+")")); diff --git a/src/main/java/us/ajg0702/queue/QueueServer.java b/src/main/java/us/ajg0702/queue/QueueServer.java index 9d15f9e..6e51bc0 100644 --- a/src/main/java/us/ajg0702/queue/QueueServer.java +++ b/src/main/java/us/ajg0702/queue/QueueServer.java @@ -1,9 +1,6 @@ package us.ajg0702.queue; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; +import java.util.*; import net.md_5.bungee.api.Callback; import net.md_5.bungee.api.ProxyServer; @@ -11,6 +8,7 @@ import net.md_5.bungee.api.ServerPing; import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; import us.ajg0702.utils.bungee.BungeeConfig; +import us.ajg0702.utils.bungee.BungeeMessages; public class QueueServer { @@ -18,7 +16,7 @@ public class QueueServer { List servers; public QueueServer(String name, ServerInfo info) { - init(name, Arrays.asList(info)); + init(name, Collections.singletonList(info)); } public QueueServer(String name, List infos) { init(name, infos); @@ -56,34 +54,58 @@ public class QueueServer { if(Main.plugin.getConfig().getBoolean("pinger-debug")) { Main.plugin.getLogger().info("[pinger] ["+info.getName()+"] sending ping"); } - info.ping(new Callback() { - @Override - public void done(ServerPing result, Throwable error) { - if(Manager.getInstance() == null || Main.plugin.getConfig() == null) { - ProxyServer.getInstance().getLogger() - .warning("[ajQueue] Something used update() too early! The plugin hasnt fully loaded yet!"); - return; - } - boolean online = error == null; - BungeeConfig config = Main.plugin.getConfig(); - - if(config.getBoolean("pinger-debug")) { - if(error != null) { - ProxyServer.getInstance().getLogger().info("[ajQueue] [pinger] ["+name+"] Status: "+online+". Error: "); - error.printStackTrace(); - } else { - ProxyServer.getInstance().getLogger().info("[ajQueue] [pinger] ["+name+"] Status: "+online+". motd: " - +result.getDescriptionComponent()+" players:"+result.getPlayers()); - } - } - - - pings.put(info, online ? result : null); - if(pings.size() == servers.size()) allDonePing(); + info.ping((result, error) -> { + if(Manager.getInstance() == null || Main.plugin.getConfig() == null) { + ProxyServer.getInstance().getLogger() + .warning("[ajQueue] Something used update() too early! The plugin hasnt fully loaded yet!"); + return; } + boolean online = error == null; + BungeeConfig config = Main.plugin.getConfig(); + + if(config.getBoolean("pinger-debug")) { + if(error != null) { + ProxyServer.getInstance().getLogger().info("[ajQueue] [pinger] ["+name+"] Status: offline. Error: "); + error.printStackTrace(); + } else { + ProxyServer.getInstance().getLogger().info("[ajQueue] [pinger] ["+name+"] Status: online. motd: " + +result.getDescriptionComponent()+" players:"+result.getPlayers()); + } + } + + + pings.put(info, online ? result : null); + if(pings.size() == servers.size()) allDonePing(); }); } } + + public String getStatusString(ProxiedPlayer p) { + BungeeMessages msgs = Main.plugin.msgs; + + if(getOfflineTime() > Main.plugin.getConfig().getInt("offline-time")) { + return msgs.getString("status.offline.offline"); + } + + if(!isOnline()) { + return msgs.getString("status.offline.restarting"); + } + + if(isPaused()) { + return msgs.getString("status.offline.paused"); + } + + if(isFull()) { + return msgs.getString("status.offline.full"); + } + + if(p != null && !canAccess(p)) { + return msgs.getString("status.offline.restricted"); + } + + + return "Online"; + } public HashMap getLastPings() { return pings; @@ -108,7 +130,7 @@ public class QueueServer { lastUpdate = System.currentTimeMillis(); offlineTime = 0; } else { - int timesincelast = Math.round((System.currentTimeMillis() - lastUpdate)/1000); + int timesincelast = (int) Math.round((System.currentTimeMillis() - lastUpdate*1.0)/1000); lastUpdate = System.currentTimeMillis(); if(!online) { offlineTime += timesincelast; @@ -144,7 +166,7 @@ public class QueueServer { List queue = new ArrayList<>(); - public List getQueue() { + public synchronized List getQueue() { return queue; } diff --git a/src/main/java/us/ajg0702/queue/commands/LeaveCommand.java b/src/main/java/us/ajg0702/queue/commands/LeaveCommand.java index 0021a57..87e9521 100644 --- a/src/main/java/us/ajg0702/queue/commands/LeaveCommand.java +++ b/src/main/java/us/ajg0702/queue/commands/LeaveCommand.java @@ -63,13 +63,13 @@ public class LeaveCommand extends Command { } private String getQueueList(List servers) { - String queueList = ""; + StringBuilder queueList = new StringBuilder(); for(QueueServer server : servers) { - queueList += msgs.get("commands.leave.queues-list-format").replaceAll("\\{NAME\\}", server.getName()); + queueList.append(msgs.getString("commands.leave.queues-list-format").replaceAll("\\{NAME\\}", server.getName())); } if(queueList.length() > 2) { - queueList = queueList.substring(0, queueList.length()-2); + queueList = new StringBuilder(queueList.substring(0, queueList.length() - 2)); } - return queueList; + return queueList.toString(); } } diff --git a/src/main/java/us/ajg0702/queue/commands/ListCommand.java b/src/main/java/us/ajg0702/queue/commands/ListCommand.java index abac828..1d53230 100644 --- a/src/main/java/us/ajg0702/queue/commands/ListCommand.java +++ b/src/main/java/us/ajg0702/queue/commands/ListCommand.java @@ -1,6 +1,7 @@ package us.ajg0702.queue.commands; import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; @@ -9,6 +10,9 @@ import us.ajg0702.queue.Manager; import us.ajg0702.queue.QueueServer; import us.ajg0702.utils.bungee.BungeeMessages; +import java.util.ArrayList; +import java.util.Arrays; + public class ListCommand extends Command { Main pl; BungeeMessages msgs; @@ -31,7 +35,7 @@ public class ListCommand extends Command { spp = (ProxiedPlayer) sender; } - String m = msgs.get("commands.listqueues.header"); + ArrayList m = new ArrayList<>(Arrays.asList(msgs.getBC("commands.listqueues.header"))); for(QueueServer s : Manager.getInstance().getServers()) { String color = "&a"; if(!s.isOnline()) { @@ -39,13 +43,17 @@ public class ListCommand extends Command { } else if(!s.isJoinable(spp)) { color = "&e"; } - m += "\n"+msgs.get("commands.listqueues.format") - .replaceAll("\\{COLOR\\}", msgs.color(color)) - .replaceAll("\\{NAME\\}", s.getName()) - .replaceAll("\\{COUNT\\}", s.getQueue().size()+""); + + m.addAll(Arrays.asList(TextComponent.fromLegacyText("\n"))); + m.addAll(Arrays.asList(msgs.getBC("commands.listqueues.format", + "COLOR:" + msgs.color(color), + "NAME:" + s.getName(), + "COUNT:" + s.getQueue().size(), + "STATUS:" + s.getStatusString(spp) + ))); } - sender.sendMessage(TextComponent.fromLegacyText(m)); + sender.sendMessage(m.toArray(new BaseComponent[m.size()-1])); } } diff --git a/src/main/java/us/ajg0702/queue/commands/ManageCommand.java b/src/main/java/us/ajg0702/queue/commands/ManageCommand.java index 463e47a..5262a4b 100644 --- a/src/main/java/us/ajg0702/queue/commands/ManageCommand.java +++ b/src/main/java/us/ajg0702/queue/commands/ManageCommand.java @@ -1,6 +1,11 @@ package us.ajg0702.queue.commands; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.PatternReplacementResult; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import net.md_5.bungee.api.CommandSender; +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.plugin.Command; @@ -13,6 +18,7 @@ import us.ajg0702.utils.bungee.BungeeMessages; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.regex.Pattern; public class ManageCommand extends Command implements TabExecutor { @@ -52,25 +58,43 @@ public class ManageCommand extends Command implements TabExecutor { } int total = 0; for(QueueServer server : Manager.getInstance().getServers()) { - - String msg = msgs.get("list.format").replaceAll("\\{SERVER\\}", server.getName()); - String playerlist = ""; + + Component msg = msgs.getComponent("list.format", + "SERVER:"+server.getName() + ); + Component playerList = Component.empty(); List players = server.getQueue(); - if(msg.contains("{LIST}")) { - for(ProxiedPlayer p : players) { - playerlist += msgs.get("list.playerlist").replaceAll("\\{NAME\\}", p.getDisplayName()); - } - if(playerlist.equalsIgnoreCase("")) { - playerlist = msgs.get("list.none")+", "; - } - playerlist = playerlist.substring(0, playerlist.length()-2); - msg = msg.replaceAll("\\{LIST\\}", playerlist); + boolean none = true; + for(ProxiedPlayer p : players) { + playerList = playerList.append(msgs.getComponent("list.playerlist", + "NAME:" + p.getDisplayName() + )); + none = false; } + if(none) { + playerList = playerList.append(msgs.getComponent("list.none")); + playerList = playerList.append(Component.text(", ")); + } + Component finalPlayerList = playerList; + msg = msg.replaceText(b -> b.match(Pattern.compile("\\{LIST}")).replacement(finalPlayerList)); + char[] commaCountString = PlainTextComponentSerializer.plainText().serialize(msg).toCharArray(); + int commas = 0; + for(Character fChar : commaCountString) { + if(fChar == ',') commas++; + } + + int finalCommas = commas; + msg = msg.replaceText(b -> b.match(",(?!.*,)").replacement("").condition((r, c, re) -> { + if(c == finalCommas) { + return PatternReplacementResult.REPLACE; + } + return PatternReplacementResult.CONTINUE; + })); total += players.size(); - msg = msg.replaceAll("\\{COUNT\\}", players.size()+""); - sender.sendMessage(Main.formatMessage(msg)); + msg = msg.replaceText(b -> b.match(Pattern.compile("\\{COUNT}")).replacement(players.size()+"")); + sender.sendMessage(msgs.getBC(msg)); } - sender.sendMessage(Main.formatMessage(msgs.get("list.total").replaceAll("\\{TOTAL\\}", total+""))); + sender.sendMessage(msgs.getBC("list.total", "TOTAL:"+total)); return; } if(args[0].equalsIgnoreCase("p")) { @@ -121,7 +145,7 @@ public class ManageCommand extends Command implements TabExecutor { srv.setPaused(!srv.isPaused()); sender.sendMessage(msgs.getBC("commands.pause.success", "SERVER:"+srv.getName(), - "PAUSED:"+msgs.get("commands.pause.paused."+srv.isPaused()) + "PAUSED:"+msgs.getString("commands.pause.paused."+srv.isPaused()) )); return; } @@ -152,7 +176,7 @@ public class ManageCommand extends Command implements TabExecutor { srv.setPaused(args[2].equalsIgnoreCase("on") || args[2].equalsIgnoreCase("true")); sender.sendMessage(msgs.getBC("commands.pause.success", "SERVER:"+srv.getName(), - "PAUSED:"+msgs.get("commands.pause.paused."+srv.isPaused()) + "PAUSED:"+msgs.getString("commands.pause.paused."+srv.isPaused()) )); return; } @@ -172,13 +196,12 @@ public class ManageCommand extends Command implements TabExecutor { ProxiedPlayer ply = pl.getProxy().getPlayer(args[1]); Manager.getInstance().addToQueue(ply, args[2]); - sender.sendMessage(Main.formatMessage( - msgs.get("send") - .replaceAll("\\{PLAYER\\}", ply.getDisplayName()) - .replaceAll("\\{SERVER\\}", args[2])) - ); + sender.sendMessage(msgs.getBC("send", + "PLAYER:"+ply.getDisplayName(), + "SERVER:"+args[2]) + ); return; - } else if(pl.getProxy().getServers().keySet().contains(args[1])) { + } else if(pl.getProxy().getServers().containsKey(args[1])) { ServerInfo from = pl.getProxy().getServerInfo(args[1]); if(from == null) { diff --git a/src/main/java/us/ajg0702/queue/commands/MoveCommand.java b/src/main/java/us/ajg0702/queue/commands/MoveCommand.java index 658351a..c8a3873 100644 --- a/src/main/java/us/ajg0702/queue/commands/MoveCommand.java +++ b/src/main/java/us/ajg0702/queue/commands/MoveCommand.java @@ -33,13 +33,8 @@ public class MoveCommand extends Command implements TabExecutor { return; } Manager.getInstance().addToQueue(p, args[0]); - } else if(args.length == 0) { + } else { sender.sendMessage(msgs.getBC("commands.joinqueue.usage")); - /*Server server = Manager.getInstance().findPlayerInQueue((ProxiedPlayer) sender); - if(server != null) { - server.getQueue().remove(p); - p.sendMessage(msgs.getBC("commands.leave-queue")); - }*/ } } diff --git a/src/test/java/RegexTest.java b/src/test/java/RegexTest.java new file mode 100644 index 0000000..674bccf --- /dev/null +++ b/src/test/java/RegexTest.java @@ -0,0 +1,49 @@ +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.PatternReplacementResult; +import net.kyori.adventure.text.TextReplacementConfig; +import net.kyori.adventure.text.serializer.plain.PlainComponentSerializer; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; +import java.util.regex.Pattern; + +public class RegexTest { + @Test + public void regex() throws Exception { + Component msg = Component.text("&b{SERVER} &7({COUNT}): {LIST}"); + Component playerList = Component.empty(); + List players = Arrays.asList("bot01", "bot02", "bot03", "bot04", "bot05", "bot06"); + for(String p : players) { + playerList = playerList.append(Component.text("&9"+p+"&7, ")); + } + Component finalPlayerList = playerList; + msg = msg.replaceText(b -> b.match(Pattern.compile("\\{LIST}")).replacement(finalPlayerList)); + char[] commaCountString = PlainTextComponentSerializer.plainText().serialize(msg).toCharArray(); + int commas = 0; + for(Character fChar : commaCountString) { + if(fChar == ',') commas++; + } + + int finalCommas = commas; + msg = msg.replaceText(b -> b.match(",(?!.*,)").replacement("").condition((r, c, re) -> { + if(c == finalCommas) { + return PatternReplacementResult.REPLACE; + } + return PatternReplacementResult.CONTINUE; + })); + msg = msg.replaceText(b -> b.match(Pattern.compile("\\{COUNT}")).replacement(players.size()+"")); + + + String f = PlainTextComponentSerializer.plainText().serialize(msg); + System.out.println(f); + int c = 0; + for(Character fChar : f.toCharArray()) { + if(fChar == ',') c++; + } + if(c != 5) { + throw new Exception("Wrong comma count! Had "+c+" when expected 5"); + } + } +}