From 4d91663e201e300573070c21c11815a592752135 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Thu, 7 Oct 2021 19:19:26 -0700 Subject: [PATCH 1/5] add warning if ajqueue is running on spigot without a proxy --- .../queue/common/EventHandlerImpl.java | 4 ++++ .../us/ajg0702/queue/spigot/Commands.java | 4 ++++ .../us/ajg0702/queue/spigot/SpigotMain.java | 21 ++++++++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) 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 aac4a69..238baa9 100644 --- a/common/src/main/java/us/ajg0702/queue/common/EventHandlerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/EventHandlerImpl.java @@ -33,6 +33,10 @@ public class EventHandlerImpl implements EventHandler { try { String subchannel = in.readUTF(); + if(subchannel.equals("ack")) { + main.getPlatformMethods().sendPluginMessage(recievingPlayer, "ack", "yes, im here"); + } + if(subchannel.equals("queue")) { String rawData = in.readUTF(); String[] args = new String[1]; diff --git a/spigot/src/main/java/us/ajg0702/queue/spigot/Commands.java b/spigot/src/main/java/us/ajg0702/queue/spigot/Commands.java index c4a0368..cbd9460 100644 --- a/spigot/src/main/java/us/ajg0702/queue/spigot/Commands.java +++ b/spigot/src/main/java/us/ajg0702/queue/spigot/Commands.java @@ -17,6 +17,10 @@ public class Commands implements CommandExecutor { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { + if(!pl.hasProxy()) { + sender.sendMessage(color("&cajQueue must also be installed on the proxy!&7 If it has been installed on the proxy, make sure it loaded correctly and try relogging.")); + return true; + } Player player = null; if(sender instanceof Player) { player = (Player) sender; diff --git a/spigot/src/main/java/us/ajg0702/queue/spigot/SpigotMain.java b/spigot/src/main/java/us/ajg0702/queue/spigot/SpigotMain.java index 76eb6fb..78124c9 100644 --- a/spigot/src/main/java/us/ajg0702/queue/spigot/SpigotMain.java +++ b/spigot/src/main/java/us/ajg0702/queue/spigot/SpigotMain.java @@ -9,6 +9,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.server.ServerListPingEvent; import org.bukkit.plugin.java.JavaPlugin; @@ -26,6 +27,8 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List Placeholders placeholders; ConfigFile config; + + boolean hasProxy = false; @SuppressWarnings("ConstantConditions") public void onEnable() { @@ -74,7 +77,11 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List getLogger().info("Spigot side enabled! v"+getDescription().getVersion()); } - + + public boolean hasProxy() { + return hasProxy; + } + final HashMap queuebatch = new HashMap<>(); @Override @@ -85,6 +92,10 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List String subchannel = in.readUTF(); + if(subchannel.equals("ack")) { + hasProxy = true; + } + if(subchannel.equals("inqueueevent")) { String playername = in.readUTF(); Player p = Bukkit.getPlayer(playername); @@ -180,6 +191,14 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List placeholders.cleanCache(); } + @EventHandler + public void onJoin(PlayerJoinEvent e) { + if(hasProxy) return; + Bukkit.getScheduler().runTask(this, () -> { + sendMessage(e.getPlayer(), "ack", ""); + }); + } + @EventHandler(priority = EventPriority.HIGH) public void onServerPing(ServerListPingEvent e) { if(!config.getBoolean("take-over-motd-for-whitelist")) return; From 74ee9fcf0e1d682141e798b26e3c7fda9d2a8ca5 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Fri, 8 Oct 2021 14:58:41 -0700 Subject: [PATCH 2/5] add canJoinFull method --- .../us/ajg0702/queue/api/commands/ICommandSender.java | 1 + .../java/us/ajg0702/queue/api/queues/QueueServer.java | 9 ++++++++- .../main/java/us/ajg0702/queue/commands/BaseCommand.java | 1 + .../java/us/ajg0702/queue/common/QueueManagerImpl.java | 8 ++------ .../us/ajg0702/queue/common/queues/QueueServerImpl.java | 5 +++++ 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/api/src/main/java/us/ajg0702/queue/api/commands/ICommandSender.java b/api/src/main/java/us/ajg0702/queue/api/commands/ICommandSender.java index 9bc925a..041aa1d 100644 --- a/api/src/main/java/us/ajg0702/queue/api/commands/ICommandSender.java +++ b/api/src/main/java/us/ajg0702/queue/api/commands/ICommandSender.java @@ -3,6 +3,7 @@ package us.ajg0702.queue.api.commands; import net.kyori.adventure.audience.Audience; import us.ajg0702.queue.api.util.Handle; +@SuppressWarnings("BooleanMethodIsAlwaysInverted") public interface ICommandSender extends Handle, Audience { boolean hasPermission(String permission); boolean isPlayer(); 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 d860358..14f558d 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 @@ -13,7 +13,7 @@ import java.util.UUID; /** * Represents a server or a group that can be queued for */ -@SuppressWarnings("unused") +@SuppressWarnings({"unused", "BooleanMethodIsAlwaysInverted"}) public interface QueueServer { /** @@ -232,6 +232,13 @@ public interface QueueServer { */ void setSupportedProtocols(List list); + /** + * Checks if the player can join this server even if its full + * @param player The player + * @return If the player can join this server if its full + */ + boolean canJoinFull(AdaptedPlayer player); + /** * elliot is bad diff --git a/common/src/main/java/us/ajg0702/queue/commands/BaseCommand.java b/common/src/main/java/us/ajg0702/queue/commands/BaseCommand.java index 6125c07..dcb0be2 100644 --- a/common/src/main/java/us/ajg0702/queue/commands/BaseCommand.java +++ b/common/src/main/java/us/ajg0702/queue/commands/BaseCommand.java @@ -54,6 +54,7 @@ public class BaseCommand implements IBaseCommand { sender.sendMessage(Component.text("Unimplemented command")); } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") public boolean checkPermission(ICommandSender sender) { if(getPermission() != null && !sender.hasPermission(getPermission())) { sender.sendMessage(getMessages().getComponent("noperm")); 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 ff68ca4..2dff0d1 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java @@ -528,11 +528,7 @@ public class QueueManagerImpl implements QueueManager { AdaptedPlayer player = p.getPlayer(); if(player == null) continue; - boolean bypassFull = - p.getPlayer().hasPermission("ajqueue.joinfull") || - p.getPlayer().hasPermission("ajqueue.joinfullserver."+server.getName()); - - if(server.isFull() && !bypassFull) continue; + if(server.isFull() && !server.canJoinFull(p.getPlayer())) continue; AdaptedServer selected = server.getIdealServer(player); if(selected == null) { @@ -578,7 +574,7 @@ public class QueueManagerImpl implements QueueManager { if(!server.canAccess(nextPlayer)) continue; - if(server.isFull() && !nextPlayer.hasPermission("ajqueue.joinfull")) continue; + if(server.isFull() && !server.canJoinFull(nextPlayer)) continue; if(main.getConfig().getBoolean("enable-bypasspaused-permission")) { if(server.isPaused() && !nextPlayer.hasPermission("ajqueue.bypasspaused")) continue; 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 0047a6c..7b515c4 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 @@ -428,4 +428,9 @@ public class QueueServerImpl implements QueueServer { public void setSupportedProtocols(List list) { supportedProtocols = new ArrayList<>(list); } + + @Override + public boolean canJoinFull(AdaptedPlayer player) { + return player.hasPermission("ajqueue.joinfull") || player.hasPermission("ajqueue.joinfullserver."+name); + } } From 5bb2d1eecdbf39d29958e000925488252b9644cd Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Fri, 8 Oct 2021 14:59:04 -0700 Subject: [PATCH 3/5] fix full bypass permission not being checking in isJoinable --- .../ajg0702/queue/common/queues/QueueServerImpl.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) 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 7b515c4..d10dc10 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 @@ -253,12 +253,16 @@ public class QueueServerImpl implements QueueServer { @Override public boolean isJoinable(AdaptedPlayer p) { - if(p != null && isWhitelisted() && !whitelistedUUIDs.contains(p.getUniqueId())) { - return false; + if(p != null) { + if (isWhitelisted() && !whitelistedUUIDs.contains(p.getUniqueId())) { + return false; + } + if (isFull() && !canJoinFull(p)) { + return false; + } } return isOnline() && canAccess(p) && - !isFull() && !isPaused(); } From 46c06b596a18f84be92d7bcfff7e65386204b9fc Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Fri, 8 Oct 2021 15:01:34 -0700 Subject: [PATCH 4/5] add ajqueue.joinfullandbypass permission --- .../java/us/ajg0702/queue/common/queues/QueueServerImpl.java | 5 ++++- .../src/main/java/us/ajg0702/queue/logic/PremiumLogic.java | 1 + 2 files changed, 5 insertions(+), 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 d10dc10..c6179a0 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 @@ -435,6 +435,9 @@ public class QueueServerImpl implements QueueServer { @Override public boolean canJoinFull(AdaptedPlayer player) { - return player.hasPermission("ajqueue.joinfull") || player.hasPermission("ajqueue.joinfullserver."+name); + return + player.hasPermission("ajqueue.joinfull") || + player.hasPermission("ajqueue.joinfullserver."+name) || + player.hasPermission("ajqueue.joinfullandbypass"); } } diff --git a/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java b/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java index eb1c545..6605b60 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java +++ b/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java @@ -39,6 +39,7 @@ public class PremiumLogic implements Logic { if( player.hasPermission("ajqueue.bypass") || player.hasPermission("ajqueue.serverbypass."+server.getName()) || + player.hasPermission("ajqueue.joinfullandbypass") || permissionGetter.hasContextBypass(player, server.getName()) ) { if(debug) { From 7c12c8f33e552b9fa42458fc6c0787b6ac62a59c Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sat, 9 Oct 2021 11:29:35 -0700 Subject: [PATCH 5/5] add ajqueue.joinfullandbypassserver. --- .../java/us/ajg0702/queue/common/queues/QueueServerImpl.java | 1 + premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java | 1 + 2 files changed, 2 insertions(+) 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 c6179a0..2573a49 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 @@ -438,6 +438,7 @@ public class QueueServerImpl implements QueueServer { return player.hasPermission("ajqueue.joinfull") || player.hasPermission("ajqueue.joinfullserver."+name) || + player.hasPermission("ajqueue.joinfullandbypassserver."+name) || player.hasPermission("ajqueue.joinfullandbypass"); } } diff --git a/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java b/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java index 6605b60..4e34411 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java +++ b/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java @@ -39,6 +39,7 @@ public class PremiumLogic implements Logic { if( player.hasPermission("ajqueue.bypass") || player.hasPermission("ajqueue.serverbypass."+server.getName()) || + player.hasPermission("ajqueue.joinfullandbypassserver."+server.getName()) || player.hasPermission("ajqueue.joinfullandbypass") || permissionGetter.hasContextBypass(player, server.getName()) ) {