diff --git a/api/src/main/java/us/ajg0702/queue/api/premium/Logic.java b/api/src/main/java/us/ajg0702/queue/api/premium/Logic.java index cdebdf4..774f645 100644 --- a/api/src/main/java/us/ajg0702/queue/api/premium/Logic.java +++ b/api/src/main/java/us/ajg0702/queue/api/premium/Logic.java @@ -67,4 +67,6 @@ public interface Logic { return highest; } + + boolean hasAnyBypass(AdaptedPlayer player, String server); } 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 af92142..2a1168d 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java @@ -246,8 +246,13 @@ public class QueueManagerImpl implements QueueManager { boolean sendInstant = server.isJoinable(player); boolean sendInstantp = list.size() <= 1 && server.isJoinable(player); boolean timeGood = !main.getConfig().getBoolean("check-last-player-sent-time") || server.getLastSentTime() > Math.floor(main.getTimeBetweenPlayers() * 1000); + boolean alwaysSendInstantly = main.getConfig().getStringList("send-instantly").contains(server.getName()); + boolean hasBypass = main.getLogic().hasAnyBypass(player, server.getName()); - if(main.getConfig().getStringList("send-instantly").contains(server.getName()) || (sendInstant && (sendInstantp && timeGood))) { + boolean sentInstantly = alwaysSendInstantly || (sendInstant && (sendInstantp && timeGood) && !hasBypass); + + Debug.info("should send instantly (" + sentInstantly + "): " + alwaysSendInstantly + " || (" + sendInstant + " && (" + sendInstantp + " && " + timeGood + ") && " + (!hasBypass) + ")"); + if(sentInstantly) { sendPlayers(server); if(!msgs.isEmpty("status.now-in-empty-queue")) { player.sendMessage(msgs.getComponent("status.now-in-empty-queue", @@ -573,7 +578,7 @@ public class QueueManagerImpl implements QueueManager { if(!server.isOnline()) continue; if(server.getQueue().size() == 0) continue; - Debug.info("should send instantly: " + !server.isGroup() + " && " + main.getConfig().getBoolean("send-all-when-back-online") + " && " + server.getServers().get(0).justWentOnline()); + Debug.info("should send when back online: " + !server.isGroup() + " && " + main.getConfig().getBoolean("send-all-when-back-online") + " && " + server.getServers().get(0).justWentOnline()); if(!server.isGroup() && main.getConfig().getBoolean("send-all-when-back-online") && server.getServers().get(0).justWentOnline()) { for(QueuePlayer p : server.getQueue()) { @@ -590,6 +595,7 @@ public class QueueManagerImpl implements QueueManager { if(selected.isFull() && !selected.canJoinFull(p.getPlayer())) continue; player.sendMessage(msgs.getComponent("status.sending-now", "SERVER:"+server.getAlias())); + Debug.info("Calling player.connect for " + player.getName() + "(send when back online)"); player.connect(selected); } continue; @@ -673,6 +679,7 @@ public class QueueManagerImpl implements QueueManager { server.setLastSentTime(System.currentTimeMillis()); + Debug.info("calling nextPlayer.connect on " + nextPlayer.getName()); nextPlayer.connect(selected); selected.addPlayer(); Debug.info(selected.getName()+" player count is now set to "+ selected.getPlayerCount()); diff --git a/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java b/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java index 4a94030..3feb389 100644 --- a/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java +++ b/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java @@ -27,4 +27,9 @@ public class FreeLogic implements Logic { public PermissionGetter getPermissionGetter() { return null; } + + @Override + public boolean hasAnyBypass(AdaptedPlayer player, String server) { + return false; + } } 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 f7c5e83..bd86144 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java +++ b/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java @@ -37,14 +37,7 @@ public class PremiumLogic implements Logic { QueueLogger logger = main.getLogger(); boolean debug = main.getConfig().getBoolean("priority-queue-debug"); - if( - player.hasPermission("ajqueue.bypass") || - player.hasPermission("ajqueue.serverbypass."+ queueServer.getName()) || - player.hasPermission("ajqueue.joinfullandbypassserver."+ queueServer.getName()) || - player.hasPermission("ajqueue.joinfullandbypass") || - permissionGetter.hasContextBypass(player, queueServer.getName()) || - (main.isPremium() && main.getLogic().getPermissionGetter().hasUniqueFullBypass(player, queueServer.getName())) - ) { + if(hasAnyBypass(player, queueServer.getName())) { if(debug) { logger.info("[priority] "+player.getName()+" bypass"); } @@ -105,4 +98,14 @@ public class PremiumLogic implements Logic { public boolean playerDisconnectedTooLong(QueuePlayer player) { return player.getTimeSinceOnline() > player.getMaxOfflineTime()*1000L; } + @Override + public boolean hasAnyBypass(AdaptedPlayer player, String server) { + return player.hasPermission("ajqueue.bypass") || + player.hasPermission("ajqueue.serverbypass."+ server) || + player.hasPermission("ajqueue.joinfullandbypassserver."+ server) || + player.hasPermission("ajqueue.joinfullandbypass") || + permissionGetter.hasContextBypass(player, server) || + (QueueMain.getInstance().isPremium() && permissionGetter.hasUniqueFullBypass(player, server)); + } + }