From 3374e3102fce8ed87623999d2fac84efcfdc6290 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Wed, 15 Dec 2021 17:19:32 -0700 Subject: [PATCH 01/10] retain online & whitelisted states when reloading servers --- .../java/us/ajg0702/queue/api/queues/QueueServer.java | 8 ++++++++ .../java/us/ajg0702/queue/common/QueueManagerImpl.java | 3 +++ .../us/ajg0702/queue/common/queues/QueueServerImpl.java | 5 +++++ 3 files changed, 16 insertions(+) diff --git a/api/src/main/java/us/ajg0702/queue/api/queues/QueueServer.java b/api/src/main/java/us/ajg0702/queue/api/queues/QueueServer.java index d80eb89..dba7633 100644 --- a/api/src/main/java/us/ajg0702/queue/api/queues/QueueServer.java +++ b/api/src/main/java/us/ajg0702/queue/api/queues/QueueServer.java @@ -256,6 +256,14 @@ public interface QueueServer { */ void addPlayer(AdaptedServer server); + /** + * Sets if this server is online. + * Note that this is overrided by the pinger, so if you set + * this, it will most likely be temporary + * @param online whether the server is online or not + */ + void setOnline(boolean online); + /** * elliot is bad diff --git a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java index f9a7c6a..85afa69 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java @@ -49,6 +49,9 @@ public class QueueManagerImpl implements QueueManager { if(previousServer != null) { queueServer.setPaused(previousServer.isPaused()); queueServer.setLastSentTime(previousServer.getLastSentTime()); + queueServer.setOnline(previousServer.isOnline()); + queueServer.setWhitelisted(previousServer.isWhitelisted()); + queueServer.setWhitelistedPlayers(previousServer.getWhitelistedPlayers()); } result.add(queueServer); } diff --git a/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java b/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java index c4d4934..9ed1208 100644 --- a/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java @@ -468,4 +468,9 @@ public class QueueServerImpl implements QueueServer { if(!pings.containsKey(server)) throw new IllegalArgumentException("Server is not in this group!"); pings.get(server).addPlayer(); } + + @Override + public void setOnline(boolean online) { + this.online = online; + } } From e07fb4cc51c9587afd3ab47d7519f1d411e5bcb4 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Wed, 15 Dec 2021 20:57:24 -0700 Subject: [PATCH 02/10] handle plugin messages async on bungee --- .../queue/platforms/bungeecord/BungeeQueue.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeQueue.java b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeQueue.java index b37400c..e548178 100644 --- a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeQueue.java +++ b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeQueue.java @@ -3,6 +3,7 @@ package us.ajg0702.queue.platforms.bungeecord; import net.kyori.adventure.platform.bungeecord.BungeeAudiences; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer; +import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.*; import net.md_5.bungee.api.plugin.Listener; @@ -30,6 +31,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +@SuppressWarnings("unused") public class BungeeQueue extends Plugin implements Listener, Implementation { private QueueMain main; @@ -106,7 +108,13 @@ public class BungeeQueue extends Plugin implements Listener, Implementation { if(!(e.getReceiver() instanceof ProxiedPlayer)) return; - main.getEventHandler().handleMessage(new BungeePlayer((ProxiedPlayer) e.getReceiver()), e.getData()); + ProxyServer.getInstance().getScheduler().runAsync(this, () -> + main.getEventHandler() + .handleMessage( + new BungeePlayer((ProxiedPlayer) e.getReceiver()), + e.getData() + ) + ); } @EventHandler From 8587f47d24714f2167157f5dad372bfef86db642 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Thu, 16 Dec 2021 09:44:28 -0700 Subject: [PATCH 03/10] fix `require-permission` not being respected in / commands --- .../commands/commands/SlashServer/SlashServerCommand.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/src/main/java/us/ajg0702/queue/commands/commands/SlashServer/SlashServerCommand.java b/common/src/main/java/us/ajg0702/queue/commands/commands/SlashServer/SlashServerCommand.java index c625e80..061e9d6 100644 --- a/common/src/main/java/us/ajg0702/queue/commands/commands/SlashServer/SlashServerCommand.java +++ b/common/src/main/java/us/ajg0702/queue/commands/commands/SlashServer/SlashServerCommand.java @@ -45,6 +45,10 @@ public class SlashServerCommand extends BaseCommand { sender.sendMessage(getMessages().getComponent("errors.player-only")); return; } + if(main.getConfig().getBoolean("require-permission") && !sender.hasPermission("ajqueue.queue."+args[0])) { + sender.sendMessage(getMessages().getComponent("noperm")); + return; + } main.getQueueManager().addToQueue(main.getPlatformMethods().senderToPlayer(sender), server); } From ecd1a6d8575f5d67d96577c525e61b3108303abe Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Tue, 21 Dec 2021 21:26:36 -0700 Subject: [PATCH 04/10] any exception --- .../java/us/ajg0702/queue/common/queues/QueueServerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java b/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java index c4d4934..ea03b2f 100644 --- a/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java @@ -176,7 +176,7 @@ public class QueueServerImpl implements QueueServer { AdaptedServerPing ping = null; try { ping = futurePing.get(5, TimeUnit.SECONDS); - } catch (InterruptedException | ExecutionException | TimeoutException e) { + } catch (Exception e) { if(pingerDebug) { main.getLogger().info("[pinger] ["+server.getServerInfo().getName()+"] offline:"); e.printStackTrace(); From 9d97e0858e07cdc93686e3cb25b48ffdc1280e0b Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Tue, 21 Dec 2021 21:27:50 -0700 Subject: [PATCH 05/10] Add 1.18 to protocol names list --- common/src/main/resources/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/resources/config.yml b/common/src/main/resources/config.yml index 5ad6b70..d75094b 100644 --- a/common/src/main/resources/config.yml +++ b/common/src/main/resources/config.yml @@ -224,6 +224,7 @@ supported-protocols: # api will be used to find the name of the protocol. # If you are on bungee, only this list can be used. protocol-names: + - "757:1.18.1" - "756:1.17.1" - "755:1.17" - "754:1.16.5" From 4682b050590bd5cd065a067bb6504ff6b91ee0f9 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Tue, 21 Dec 2021 21:29:32 -0700 Subject: [PATCH 06/10] less confusing --- .../java/us/ajg0702/queue/common/queues/QueueServerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java b/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java index a257a1c..7751f18 100644 --- a/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/queues/QueueServerImpl.java @@ -243,7 +243,7 @@ public class QueueServerImpl implements QueueServer { } if(pingerDebug) { - main.getLogger().info("[pinger] ["+server.getServerInfo().getName()+"] Success"); + main.getLogger().info("[pinger] ["+server.getServerInfo().getName()+"] Finished"); } } } From 3573c34bc6b231637946e25b1df42670e458fa24 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sat, 25 Dec 2021 19:30:45 -0700 Subject: [PATCH 07/10] fix no args detected as 1 arg --- .../queue/platforms/bungeecord/commands/BungeeCommand.java | 3 +++ .../queue/platforms/velocity/commands/VelocityCommand.java | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/commands/BungeeCommand.java b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/commands/BungeeCommand.java index e0d949b..10356e2 100644 --- a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/commands/BungeeCommand.java +++ b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/commands/BungeeCommand.java @@ -15,6 +15,9 @@ public class BungeeCommand extends Command implements TabExecutor { @Override public void execute(CommandSender sender, String[] args) { + if(args.length == 1 && args[0].isEmpty()) { + args = new String[]{}; + } command.execute(new BungeeSender(sender), args); } diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/commands/VelocityCommand.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/commands/VelocityCommand.java index c95021c..2354145 100644 --- a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/commands/VelocityCommand.java +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/commands/VelocityCommand.java @@ -20,7 +20,11 @@ public class VelocityCommand implements RawCommand { @Override public void execute(Invocation invocation) { - command.execute(new VelocitySender(invocation.source()), invocation.arguments().split(" ")); + String[] args = new String[]{}; + if(!invocation.arguments().isEmpty()) { + args = invocation.arguments().split(" "); + } + command.execute(new VelocitySender(invocation.source()), args); } @Override From 0b44a259ea36fc7d9d8b2eb671c93d19965ad7d9 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Thu, 30 Dec 2021 02:36:17 -0700 Subject: [PATCH 08/10] add kick-kicked-players --- .../queue/api/players/AdaptedPlayer.java | 6 ++++++ .../queue/common/EventHandlerImpl.java | 19 +++++++++++++++++++ common/src/main/resources/config.yml | 6 ++++++ .../bungeecord/players/BungeePlayer.java | 6 ++++++ .../velocity/players/VelocityPlayer.java | 5 +++++ 5 files changed, 42 insertions(+) diff --git a/api/src/main/java/us/ajg0702/queue/api/players/AdaptedPlayer.java b/api/src/main/java/us/ajg0702/queue/api/players/AdaptedPlayer.java index 5d3ad20..e66789e 100644 --- a/api/src/main/java/us/ajg0702/queue/api/players/AdaptedPlayer.java +++ b/api/src/main/java/us/ajg0702/queue/api/players/AdaptedPlayer.java @@ -78,6 +78,12 @@ public interface AdaptedPlayer extends Handle, Audience { */ String getName(); + /** + * Kick a player from the proxy + * @param reason The reason to kick them with + */ + void kick(Component reason); + List getPermissions(); default boolean equals(AdaptedPlayer other) { diff --git a/common/src/main/java/us/ajg0702/queue/common/EventHandlerImpl.java b/common/src/main/java/us/ajg0702/queue/common/EventHandlerImpl.java index 0bdd66e..7787dc8 100644 --- a/common/src/main/java/us/ajg0702/queue/common/EventHandlerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/EventHandlerImpl.java @@ -217,10 +217,29 @@ public class EventHandlerImpl implements EventHandler { QueuePlayer queuePlayer = server.findPlayer(player); if(queuePlayer.getPosition() != 1) continue; List kickReasons = main.getConfig().getStringList("kick-reasons"); + boolean kickPlayer = main.getConfig().getBoolean("kick-kicked-players"); + if(kickPlayer) { + List svs = main.getConfig().getStringList("queue-servers"); + boolean found = false; + for(String s : svs) { + if(!s.contains(":")) continue; + String[] parts = s.split(":"); + String fromName = parts[0]; + QueueServer toServer = main.getQueueManager().findServer(parts[1]); + if(fromName.equalsIgnoreCase(server.getName()) && toServer != null && toServer.equals(server)) { + found = true; + } + } + kickPlayer = found; + } for(String kickReason : kickReasons) { if(plainReason.toLowerCase().contains(kickReason.toLowerCase())) { server.removePlayer(queuePlayer); + if(kickPlayer) { + player.kick(reason); + } + break; } } } diff --git a/common/src/main/resources/config.yml b/common/src/main/resources/config.yml index d75094b..ed09bd4 100644 --- a/common/src/main/resources/config.yml +++ b/common/src/main/resources/config.yml @@ -38,6 +38,12 @@ kick-reasons: - 'banned' - 'blacklisted' +# Should we completly kick the user from the server if they are in a queue-server +# and are kicked from the server with one of the above reasons? +# Note this will do nothing on servers that arent queue-servers +# (as in the config option queue-servers) +# Default: true +kick-kicked-players: true # Should we remove a player from the queue if they move servers? # This will remove the player from if they switch to any other server diff --git a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/players/BungeePlayer.java b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/players/BungeePlayer.java index 16bec07..d4fb41d 100644 --- a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/players/BungeePlayer.java +++ b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/players/BungeePlayer.java @@ -6,6 +6,7 @@ import net.kyori.adventure.sound.Sound; import net.kyori.adventure.sound.SoundStop; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.ComponentLike; +import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import net.kyori.adventure.title.Title; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -136,6 +137,11 @@ public class BungeePlayer implements AdaptedPlayer, Audience { return handle.getName(); } + @Override + public void kick(Component reason) { + handle.disconnect(BungeeComponentSerializer.get().serialize(reason)); + } + @Override public List getPermissions() { return new ArrayList<>(handle.getPermissions()); diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/players/VelocityPlayer.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/players/VelocityPlayer.java index 206e05e..a742860 100644 --- a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/players/VelocityPlayer.java +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/players/VelocityPlayer.java @@ -174,6 +174,11 @@ public class VelocityPlayer implements AdaptedPlayer, Audience { return handle.getUsername(); } + @Override + public void kick(Component reason) { + handle.disconnect(reason); + } + @Override public List getPermissions() { throw new IllegalStateException("AdaptedPlayer#getPermissions cannot be used on velocity"); From cc4850cf532d30ef7e6741669a7b6ff25b670090 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Thu, 30 Dec 2021 02:53:27 -0700 Subject: [PATCH 09/10] whoops, forgot to bump config version --- common/src/main/resources/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/resources/config.yml b/common/src/main/resources/config.yml index ed09bd4..10970b5 100644 --- a/common/src/main/resources/config.yml +++ b/common/src/main/resources/config.yml @@ -1,5 +1,5 @@ # Dont touch this number please -config-version: 31 +config-version: 32 # This is the main config for ajQueue. From 14603f5e516572c0a438bc7869f81e303ced7359 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Fri, 31 Dec 2021 15:19:54 -0700 Subject: [PATCH 10/10] 2.2.2 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index f4c1a25..e67f162 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ repositories { } allprojects { - version = "2.2.1" + version = "2.2.2" group = "us.ajg0702" plugins.apply("java")