Fixed double-sending players with a bypass permission
This commit is contained in:
@@ -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));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user