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");