Fixed double-sending players with a bypass permission

This commit is contained in:
ajgeiss0702
2023-01-16 09:36:51 -07:00
parent 042e2f4a43
commit f92f99ec4e
4 changed files with 27 additions and 10 deletions
@@ -67,4 +67,6 @@ public interface Logic {
return highest; return highest;
} }
boolean hasAnyBypass(AdaptedPlayer player, String server);
} }
@@ -246,8 +246,13 @@ public class QueueManagerImpl implements QueueManager {
boolean sendInstant = server.isJoinable(player); boolean sendInstant = server.isJoinable(player);
boolean sendInstantp = list.size() <= 1 && 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 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); sendPlayers(server);
if(!msgs.isEmpty("status.now-in-empty-queue")) { if(!msgs.isEmpty("status.now-in-empty-queue")) {
player.sendMessage(msgs.getComponent("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.isOnline()) continue;
if(server.getQueue().size() == 0) 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()) { if(!server.isGroup() && main.getConfig().getBoolean("send-all-when-back-online") && server.getServers().get(0).justWentOnline()) {
for(QueuePlayer p : server.getQueue()) { for(QueuePlayer p : server.getQueue()) {
@@ -590,6 +595,7 @@ public class QueueManagerImpl implements QueueManager {
if(selected.isFull() && !selected.canJoinFull(p.getPlayer())) continue; if(selected.isFull() && !selected.canJoinFull(p.getPlayer())) continue;
player.sendMessage(msgs.getComponent("status.sending-now", "SERVER:"+server.getAlias())); 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); player.connect(selected);
} }
continue; continue;
@@ -673,6 +679,7 @@ public class QueueManagerImpl implements QueueManager {
server.setLastSentTime(System.currentTimeMillis()); server.setLastSentTime(System.currentTimeMillis());
Debug.info("calling nextPlayer.connect on " + nextPlayer.getName());
nextPlayer.connect(selected); nextPlayer.connect(selected);
selected.addPlayer(); selected.addPlayer();
Debug.info(selected.getName()+" player count is now set to "+ selected.getPlayerCount()); Debug.info(selected.getName()+" player count is now set to "+ selected.getPlayerCount());
@@ -27,4 +27,9 @@ public class FreeLogic implements Logic {
public PermissionGetter getPermissionGetter() { public PermissionGetter getPermissionGetter() {
return null; return null;
} }
@Override
public boolean hasAnyBypass(AdaptedPlayer player, String server) {
return false;
}
} }
@@ -37,14 +37,7 @@ public class PremiumLogic implements Logic {
QueueLogger logger = main.getLogger(); QueueLogger logger = main.getLogger();
boolean debug = main.getConfig().getBoolean("priority-queue-debug"); boolean debug = main.getConfig().getBoolean("priority-queue-debug");
if( if(hasAnyBypass(player, queueServer.getName())) {
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(debug) { if(debug) {
logger.info("[priority] "+player.getName()+" bypass"); logger.info("[priority] "+player.getName()+" bypass");
} }
@@ -105,4 +98,14 @@ public class PremiumLogic implements Logic {
public boolean playerDisconnectedTooLong(QueuePlayer player) { public boolean playerDisconnectedTooLong(QueuePlayer player) {
return player.getTimeSinceOnline() > player.getMaxOfflineTime()*1000L; 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));
}
} }