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 275a071..6114f1e 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 { /** @@ -238,6 +238,13 @@ public interface QueueServer { */ Balancer getBalancer(); + /** + * 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/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/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java index 3485013..a49337b 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java @@ -530,11 +530,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) { @@ -580,7 +576,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..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 @@ -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(); } @@ -428,4 +432,13 @@ 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) || + 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 eb1c545..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,8 @@ 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()) ) { if(debug) { 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;