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 d80eb89..dba7633 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 @@ -256,6 +256,14 @@ public interface QueueServer { */ void addPlayer(AdaptedServer server); + /** + * Sets if this server is online. + * Note that this is overrided by the pinger, so if you set + * this, it will most likely be temporary + * @param online whether the server is online or not + */ + void setOnline(boolean online); + /** * elliot is bad diff --git a/common/src/main/java/us/ajg0702/queue/commands/commands/SlashServer/SlashServerCommand.java b/common/src/main/java/us/ajg0702/queue/commands/commands/SlashServer/SlashServerCommand.java index c625e80..061e9d6 100644 --- a/common/src/main/java/us/ajg0702/queue/commands/commands/SlashServer/SlashServerCommand.java +++ b/common/src/main/java/us/ajg0702/queue/commands/commands/SlashServer/SlashServerCommand.java @@ -45,6 +45,10 @@ public class SlashServerCommand extends BaseCommand { sender.sendMessage(getMessages().getComponent("errors.player-only")); return; } + if(main.getConfig().getBoolean("require-permission") && !sender.hasPermission("ajqueue.queue."+args[0])) { + sender.sendMessage(getMessages().getComponent("noperm")); + return; + } main.getQueueManager().addToQueue(main.getPlatformMethods().senderToPlayer(sender), 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 f9a7c6a..85afa69 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java @@ -49,6 +49,9 @@ public class QueueManagerImpl implements QueueManager { if(previousServer != null) { queueServer.setPaused(previousServer.isPaused()); queueServer.setLastSentTime(previousServer.getLastSentTime()); + queueServer.setOnline(previousServer.isOnline()); + queueServer.setWhitelisted(previousServer.isWhitelisted()); + queueServer.setWhitelistedPlayers(previousServer.getWhitelistedPlayers()); } result.add(queueServer); } 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 ea03b2f..a257a1c 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 @@ -468,4 +468,9 @@ public class QueueServerImpl implements QueueServer { if(!pings.containsKey(server)) throw new IllegalArgumentException("Server is not in this group!"); pings.get(server).addPlayer(); } + + @Override + public void setOnline(boolean online) { + this.online = online; + } } diff --git a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeQueue.java b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeQueue.java index b37400c..e548178 100644 --- a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeQueue.java +++ b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeQueue.java @@ -3,6 +3,7 @@ package us.ajg0702.queue.platforms.bungeecord; import net.kyori.adventure.platform.bungeecord.BungeeAudiences; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer; +import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.*; import net.md_5.bungee.api.plugin.Listener; @@ -30,6 +31,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +@SuppressWarnings("unused") public class BungeeQueue extends Plugin implements Listener, Implementation { private QueueMain main; @@ -106,7 +108,13 @@ public class BungeeQueue extends Plugin implements Listener, Implementation { if(!(e.getReceiver() instanceof ProxiedPlayer)) return; - main.getEventHandler().handleMessage(new BungeePlayer((ProxiedPlayer) e.getReceiver()), e.getData()); + ProxyServer.getInstance().getScheduler().runAsync(this, () -> + main.getEventHandler() + .handleMessage( + new BungeePlayer((ProxiedPlayer) e.getReceiver()), + e.getData() + ) + ); } @EventHandler