From bccfd9e2bdfb1ba93b943d6cfccfbaa17ffb78ba Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sun, 18 Apr 2021 08:29:57 -0700 Subject: [PATCH 1/4] add leavequeue command to spigot side --- src/main/java/us/ajg0702/queue/Main.java | 7 +++++++ .../java/us/ajg0702/queue/spigot/Commands.java | 14 ++++++++++---- src/main/java/us/ajg0702/queue/spigot/Main.java | 1 + src/main/resources/plugin.yml | 5 ++++- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/us/ajg0702/queue/Main.java b/src/main/java/us/ajg0702/queue/Main.java index 3d5d0dd..65bce25 100644 --- a/src/main/java/us/ajg0702/queue/Main.java +++ b/src/main/java/us/ajg0702/queue/Main.java @@ -312,6 +312,13 @@ public class Main extends Plugin implements Listener { if(server == null) return; BungeeUtils.sendCustomData(player, "queuedfor", srv, server.getQueue().size()+""); } + if(subchannel.equals("leavequeue")) { + String arg = ""; + try { + arg = in.readUTF(); + } catch(Exception ignored) {} + getProxy().getPluginManager().dispatchCommand(player, "leavequeue"+arg); + } } catch (IOException e1) { getLogger().warning("An error occured while reading data from spigot side:"); diff --git a/src/main/java/us/ajg0702/queue/spigot/Commands.java b/src/main/java/us/ajg0702/queue/spigot/Commands.java index 67172ff..fbb60ba 100644 --- a/src/main/java/us/ajg0702/queue/spigot/Commands.java +++ b/src/main/java/us/ajg0702/queue/spigot/Commands.java @@ -16,10 +16,16 @@ public class Commands implements CommandExecutor { @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if(!(sender instanceof Player) && !(args.length > 1)) return true; - Player player = null; - if(sender instanceof Player) { - player = (Player) sender; + if(!(sender instanceof Player)) return true; + Player player = (Player) sender; + if(command.getName().equals("leavequeue")) { + StringBuilder arg = new StringBuilder(); + for(String a : args) { + arg.append(" "); + arg.append(a); + } + pl.sendMessage(player, "leavequeue", arg.toString()); + return true; } if(args.length < 1) return false; diff --git a/src/main/java/us/ajg0702/queue/spigot/Main.java b/src/main/java/us/ajg0702/queue/spigot/Main.java index 6fce5d1..5fafcc5 100644 --- a/src/main/java/us/ajg0702/queue/spigot/Main.java +++ b/src/main/java/us/ajg0702/queue/spigot/Main.java @@ -28,6 +28,7 @@ public class Main extends JavaPlugin implements PluginMessageListener,Listener { getServer().getMessenger().registerOutgoingPluginChannel(this, "ajqueue:tobungee"); this.getCommand("move").setExecutor(new Commands(this)); + this.getCommand("leavequeue").setExecutor(new Commands(this)); Bukkit.getPluginManager().registerEvents(this, this); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 67a2906..81632df 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -7,4 +7,7 @@ softdepend: [PlaceholderAPI] commands: move: aliases: [server, queue, joinq, joinqueue] - description: Queue for a server \ No newline at end of file + description: Queue for a server + leavequeue: + aliases: [leaveq] + description: Leaves a queue \ No newline at end of file From 5d6cf791b5d99c1165874b2ecaa6734a15ba3cb4 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sun, 18 Apr 2021 10:38:29 -0700 Subject: [PATCH 2/4] auto queue --- src/main/java/us/ajg0702/queue/Main.java | 29 +++++++++++++++++++++++- src/main/resources/config.yml | 17 ++++++++++++-- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/main/java/us/ajg0702/queue/Main.java b/src/main/java/us/ajg0702/queue/Main.java index 65bce25..406de1c 100644 --- a/src/main/java/us/ajg0702/queue/Main.java +++ b/src/main/java/us/ajg0702/queue/Main.java @@ -6,6 +6,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; +import java.util.concurrent.TimeUnit; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.BaseComponent; @@ -216,7 +217,33 @@ public class Main extends Plugin implements Listener { public void onFailedMove(ServerKickEvent e) { ProxiedPlayer p = e.getPlayer(); List queuedServers = man.findPlayerInQueue(p); - for(QueueServer server : queuedServers) { + + + if(!queuedServers.contains(man.getServer(e.getKickedFrom().getName())) && config.getBoolean("auto-add-to-queue-on-kick")) { + + String plainReason = ""; + for(BaseComponent b : e.getKickReasonComponent()) { + plainReason += b.toPlainText(); + } + + List reasons = config.getStringList("auto-add-kick-reasons"); + boolean shouldqueue = false; + for(String reason : reasons) { + if(plainReason.toLowerCase().contains(reason.toLowerCase())) { + shouldqueue = true; + return; + } + } + if(shouldqueue || reasons.isEmpty()) { + plugin.getProxy().getScheduler().schedule(this, () -> { + man.addToQueue(p, e.getKickedFrom().getName()); + }, (long) (config.getDouble("auto-add-to-queue-on-kick-delay")*1000), TimeUnit.MILLISECONDS); + } + + } + + + for(QueueServer server : queuedServers) { if(!(server.getInfos().contains(e.getKickedFrom()))) continue; if(server.getQueue().indexOf(p) != 0) continue; List kickreasons = config.getStringList("kick-reasons"); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 766d3db..c3cf109 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,5 +1,5 @@ # Dont touch this number please -config-version: 20 +config-version: 21 # The time the server will wait between sending people in the queue # Default: 5 @@ -147,7 +147,6 @@ max-tries: 10 # Default: false enable-bypasspaused-permission: false - # Should we check to make sure that people dont get sent quicker than wait-time? # Default: true check-last-player-sent-time: true @@ -158,4 +157,18 @@ check-last-player-sent-time: true # Default: false priority-queue-debug: false +# When a player is kicked from a server, should we automatically add that player to the queue? +# You will still need to use another plugin to make sure the player doesnt get kicked from bungee completly. +# Default: false +auto-add-to-queue-on-kick: false +# The delay for the above option. +# In seconds, decimals supported. +auto-add-to-queue-on-kick-delay: 1 +# With what kick reasons should we auto-add the player to the queue +# This wont work if auto-add-to-queue-on-kick is disabled. +# If you set it to [], then all kick messages will cause the player to be added to the queue +# This works on contains, so you dont have to include the whole kick message, just a few words. +auto-add-kick-reasons: +- "restarting" +- "closed" \ No newline at end of file From a3f03d278f04253197ca32f264de68ee5482f813 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sun, 18 Apr 2021 12:04:25 -0700 Subject: [PATCH 3/4] allow you to send a whole server --- src/main/java/us/ajg0702/queue/Main.java | 2 +- .../ajg0702/queue/commands/ManageCommand.java | 39 ++++++++++++++++--- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/main/java/us/ajg0702/queue/Main.java b/src/main/java/us/ajg0702/queue/Main.java index 406de1c..e02301c 100644 --- a/src/main/java/us/ajg0702/queue/Main.java +++ b/src/main/java/us/ajg0702/queue/Main.java @@ -72,7 +72,7 @@ public class Main extends Plugin implements Listener { d.put("status.now-in-empty-queue", ""); d.put("status.sending-now", "&aSending you to &f{SERVER} &anow.."); - d.put("errors.server-not-exist", "&cThat server does not exist!"); + d.put("errors.server-not-exist", "&cThe server {SERVER} does not exist!"); 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.already-connected", "&cYou are already connected to this server!"); diff --git a/src/main/java/us/ajg0702/queue/commands/ManageCommand.java b/src/main/java/us/ajg0702/queue/commands/ManageCommand.java index 936e017..463e47a 100644 --- a/src/main/java/us/ajg0702/queue/commands/ManageCommand.java +++ b/src/main/java/us/ajg0702/queue/commands/ManageCommand.java @@ -1,6 +1,7 @@ package us.ajg0702.queue.commands; import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; import net.md_5.bungee.api.plugin.TabExecutor; @@ -109,7 +110,7 @@ public class ManageCommand extends Command implements TabExecutor { return; } if(!Manager.getInstance().getServerNames().contains(args[1])) { - sender.sendMessage(msgs.getBC("errors.server-not-exist")); + sender.sendMessage(msgs.getBC("errors.server-not-exist", "SERVER:"+args[1])); return; } QueueServer srv = Manager.getInstance().findServer(args[1]); @@ -160,8 +161,13 @@ public class ManageCommand extends Command implements TabExecutor { sender.sendMessage(msgs.getBC("noperm")); return; } + + if(Manager.getInstance().getServer(args[2]) == null) { + sender.sendMessage(msgs.getBC("errors.server-not-exist", "SERVER:"+args[2])); + return; + } - List playerNames = getNameList(); + List playerNames = getNameList(true); if(playerNames.contains(args[1].toLowerCase())) { ProxiedPlayer ply = pl.getProxy().getPlayer(args[1]); @@ -172,6 +178,21 @@ public class ManageCommand extends Command implements TabExecutor { .replaceAll("\\{SERVER\\}", args[2])) ); return; + } else if(pl.getProxy().getServers().keySet().contains(args[1])) { + + ServerInfo from = pl.getProxy().getServerInfo(args[1]); + if(from == null) { + sender.sendMessage(msgs.getBC("errors.server-not-exist", "SERVER:"+args[1])); + return; + } + List players = new ArrayList<>(from.getPlayers()); + for(ProxiedPlayer ply : players) { + Manager.getInstance().addToQueue(ply, args[2]); + } + + sender.sendMessage(msgs.getBC("send", "PLAYER:"+args[1], "SERVER:"+args[2])); + return; + } else { sender.sendMessage(msgs.getBC("commands.send.player-not-found")); return; @@ -182,11 +203,15 @@ public class ManageCommand extends Command implements TabExecutor { sender.sendMessage(Main.formatMessage("/ajqueue ")); } - private List getNameList() { + private List getNameList(boolean lowercase) { List playerNames = new ArrayList<>(); for(ProxiedPlayer ply : pl.getProxy().getPlayers()) { if(ply == null || !ply.isConnected()) continue; - playerNames.add(ply.getName().toLowerCase()); + if(lowercase) { + playerNames.add(ply.getName().toLowerCase()); + } else { + playerNames.add(ply.getName()); + } } return playerNames; } @@ -198,7 +223,9 @@ public class ManageCommand extends Command implements TabExecutor { } if(args.length == 2) { if(args[0].equalsIgnoreCase("send")) { - return getNameList(); + List options = new ArrayList<>(pl.getProxy().getServers().keySet()); + options.addAll(getNameList(false)); + return options; } if(args[0].equalsIgnoreCase("pause")) { return Manager.getInstance().getServerNames(); @@ -212,6 +239,6 @@ public class ManageCommand extends Command implements TabExecutor { return Arrays.asList("on", "off", "true", "false"); } } - return null; + return new ArrayList<>(); } } From 10a84c1c897fb39df8b144f055cf791c7464f534 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sun, 18 Apr 2021 12:08:16 -0700 Subject: [PATCH 4/4] 1.9.2 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 0b8afd4..f34650b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } group = "us.ajg0702" -version = "1.9.1" +version = "1.9.2" repositories { mavenCentral()