diff --git a/api/build.gradle.kts b/api/build.gradle.kts index d4e7035..e4422d7 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -24,7 +24,7 @@ dependencies { publishing { publications { create("mavenJava") { - artifact(tasks["jar"]) + from(components["java"]) } } diff --git a/api/src/main/java/us/ajg0702/queue/api/QueueManager.java b/api/src/main/java/us/ajg0702/queue/api/QueueManager.java index acb39d7..9044e7e 100644 --- a/api/src/main/java/us/ajg0702/queue/api/QueueManager.java +++ b/api/src/main/java/us/ajg0702/queue/api/QueueManager.java @@ -5,6 +5,8 @@ import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.players.QueuePlayer; import us.ajg0702.queue.api.queues.QueueServer; +import java.util.HashMap; + public interface QueueManager { /** @@ -123,4 +125,6 @@ public interface QueueManager { ImmutableList getPlayerQueues(AdaptedPlayer p); void clear(AdaptedPlayer player); + + HashMap getSendingAttempts(); } 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 6114f1e..c17b1d8 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 @@ -245,6 +245,11 @@ public interface QueueServer { */ boolean canJoinFull(AdaptedPlayer player); + /** + * Adds one to the player count for a server (temporarily until the next server ping) + */ + void addPlayer(AdaptedServer server); + /** * elliot is bad diff --git a/api/src/main/java/us/ajg0702/queue/api/server/AdaptedServerPing.java b/api/src/main/java/us/ajg0702/queue/api/server/AdaptedServerPing.java index 8257d97..4f5b9e8 100644 --- a/api/src/main/java/us/ajg0702/queue/api/server/AdaptedServerPing.java +++ b/api/src/main/java/us/ajg0702/queue/api/server/AdaptedServerPing.java @@ -28,4 +28,9 @@ public interface AdaptedServerPing extends Handle { * @return The maximum number of players that can join */ int getMaxPlayers(); + + /** + * Temporarly adds one player to the player count + */ + void addPlayer(); } diff --git a/build.gradle.kts b/build.gradle.kts index fbe3034..20ab697 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ repositories { } allprojects { - version = "2.1.0" + version = "2.1.1" group = "us.ajg0702" plugins.apply("java") 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 238baa9..0bdd66e 100644 --- a/common/src/main/java/us/ajg0702/queue/common/EventHandlerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/EventHandlerImpl.java @@ -3,6 +3,7 @@ package us.ajg0702.queue.common; import com.google.common.collect.ImmutableList; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import org.jetbrains.annotations.NotNull; import us.ajg0702.queue.api.EventHandler; import us.ajg0702.queue.api.commands.IBaseCommand; import us.ajg0702.queue.api.players.AdaptedPlayer; @@ -11,6 +12,7 @@ import us.ajg0702.queue.api.queues.QueueServer; import us.ajg0702.queue.api.server.AdaptedServer; import us.ajg0702.queue.commands.commands.PlayerSender; import us.ajg0702.queue.common.players.QueuePlayerImpl; +import us.ajg0702.queue.common.utils.Debugger; import java.io.ByteArrayInputStream; import java.io.DataInputStream; @@ -153,6 +155,7 @@ public class EventHandlerImpl implements EventHandler { if((pos <= 1 && server.getServerNames().contains(player.getServerName())) || main.getConfig().getBoolean("remove-player-on-server-switch")) { server.removePlayer(player); server.setLastSentTime(System.currentTimeMillis()); + main.getQueueManager().getSendingAttempts().remove(queuePlayer); } } @@ -172,18 +175,20 @@ public class EventHandlerImpl implements EventHandler { } @Override - public void onServerKick(AdaptedPlayer player, AdaptedServer from, Component reason, boolean moving) { + public void onServerKick(AdaptedPlayer player, @NotNull AdaptedServer from, Component reason, boolean moving) { if(!player.isConnected()) return; String plainReason = PlainTextComponentSerializer.plainText().serialize(reason); + + Debugger.debug(player.getName()+" kicked! Moving: "+moving+" from: "+from.getName()+" plainReason: "+plainReason ); if(!moving && main.getConfig().getBoolean("send-fail-debug")) { main.getLogger().warning("Failed to send "+player.getName()+" to "+from.getName()+". Kicked with reason: "+plainReason); } ImmutableList queuedServers = main.getQueueManager().getPlayerQueues(player); - if(from != null && !queuedServers.contains(main.getQueueManager().findServer(from.getName())) && main.getConfig().getBoolean("auto-add-to-queue-on-kick")) { + if(!queuedServers.contains(main.getQueueManager().findServer(from.getName())) && main.getConfig().getBoolean("auto-add-to-queue-on-kick")) { List reasons = main.getConfig().getStringList("auto-add-kick-reasons"); boolean shouldqueue = false; @@ -207,7 +212,6 @@ public class EventHandlerImpl implements EventHandler { } - assert from != null; for(QueueServer server : queuedServers) { if(!(server.getServerNames().contains(from.getName()))) continue; QueuePlayer queuePlayer = server.findPlayer(player); 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 a49337b..e892b37 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java @@ -10,6 +10,7 @@ import us.ajg0702.queue.api.queues.QueueServer; import us.ajg0702.queue.api.server.AdaptedServer; import us.ajg0702.queue.common.players.QueuePlayerImpl; import us.ajg0702.queue.common.queues.QueueServerImpl; +import us.ajg0702.queue.common.utils.Debugger; import us.ajg0702.utils.common.Messages; import us.ajg0702.utils.common.TimeUtils; @@ -86,9 +87,15 @@ public class QueueManagerImpl implements QueueManager { @Override public boolean addToQueue(AdaptedPlayer player, QueueServer server) { if(player == null || server == null) { + Debugger.debug("addToQueue method called, but something is null"); return false; } - if(!player.isConnected()) return false; + if(!player.isConnected()) { + Debugger.debug("addToQueue method called, but player is not connected"); + return false; + } + + Debugger.debug("addToQueue method called for "+player.getName()+" to "+server.getName()); if(main.getConfig().getBoolean("joinfrom-server-permission") && !player.hasPermission("ajqueue.joinfrom."+player.getServerName())) { player.sendMessage(msgs.getComponent("errors.deny-joining-from-server")); @@ -516,6 +523,7 @@ public class QueueManagerImpl implements QueueManager { } for(QueueServer server : sendingServers) { + Debugger.debug("Sending players for "+server.getName()); for(QueuePlayer queuePlayer : server.getQueue()) { if(queuePlayer.getPlayer() != null) continue; if(main.getLogic().playerDisconnectedTooLong(queuePlayer)) { @@ -608,6 +616,10 @@ public class QueueManagerImpl implements QueueManager { } server.setLastSentTime(System.currentTimeMillis()); nextPlayer.connect(selected); + server.addPlayer(selected); + if(main.getConfig().getBoolean("debug")) { + Debugger.debug(selected.getName()+" player count is now set to "+ server.getLastPings().get(selected).getPlayerCount()); + } } } @@ -642,4 +654,9 @@ public class QueueManagerImpl implements QueueManager { sendingNowAntiSpam.remove(next); } } + + @Override + public HashMap getSendingAttempts() { + return sendingAttempts; + } } 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 2eb8fec..2cca6e6 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 @@ -453,4 +453,10 @@ public class QueueServerImpl implements QueueServer { player.hasPermission("ajqueue.joinfullandbypassserver."+name) || player.hasPermission("ajqueue.joinfullandbypass"); } + + @Override + public void addPlayer(AdaptedServer server) { + if(!pings.containsKey(server)) throw new IllegalArgumentException("Server is not in this group!"); + pings.get(server).addPlayer(); + } } 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 469a0f0..b37400c 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 @@ -43,6 +43,8 @@ public class BungeeQueue extends Plugin implements Listener, Implementation { QueueLogger logger = new BungeeLogger(getLogger()); File dataFolder = getDataFolder(); + commandMap = new HashMap<>(); + adventure = BungeeAudiences.create(this); main = new QueueMain( @@ -62,8 +64,6 @@ public class BungeeQueue extends Plugin implements Listener, Implementation { new ManageCommand(main) ); - commandMap = new HashMap<>(); - for(IBaseCommand command : commands) { registerCommand(command); } diff --git a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/players/BungeePlayer.java b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/players/BungeePlayer.java index 8e69d93..16bec07 100644 --- a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/players/BungeePlayer.java +++ b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/players/BungeePlayer.java @@ -12,6 +12,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import org.jetbrains.annotations.NotNull; import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.server.AdaptedServer; +import us.ajg0702.queue.common.utils.Debugger; import us.ajg0702.queue.platforms.bungeecord.BungeeQueue; import us.ajg0702.queue.platforms.bungeecord.server.BungeeServer; @@ -121,6 +122,7 @@ public class BungeePlayer implements AdaptedPlayer, Audience { @Override public void connect(AdaptedServer server) { + Debugger.debug("Attempting to send "+getName()+" to "+server.getName()); handle.connect(((BungeeServer) server).getHandle()); } diff --git a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/server/BungeeServerPing.java b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/server/BungeeServerPing.java index 9175344..381937a 100644 --- a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/server/BungeeServerPing.java +++ b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/server/BungeeServerPing.java @@ -28,9 +28,11 @@ public class BungeeServerPing implements AdaptedServerPing { return desc.toPlainText(); } + int add = 0; + @Override public int getPlayerCount() { - return handle.getPlayers().getOnline(); + return handle.getPlayers().getOnline()+add; } @Override @@ -38,6 +40,11 @@ public class BungeeServerPing implements AdaptedServerPing { return handle.getPlayers().getMax(); } + @Override + public void addPlayer() { + add++; + } + @Override public ServerPing getHandle() { return handle; diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/players/VelocityPlayer.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/players/VelocityPlayer.java index c48634e..cd1c478 100644 --- a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/players/VelocityPlayer.java +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/players/VelocityPlayer.java @@ -14,6 +14,7 @@ import org.jetbrains.annotations.NotNull; import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.server.AdaptedServer; import us.ajg0702.queue.common.QueueMain; +import us.ajg0702.queue.common.utils.Debugger; import java.util.List; import java.util.Optional; @@ -117,6 +118,7 @@ public class VelocityPlayer implements AdaptedPlayer, Audience { @Override public void connect(AdaptedServer server) { + Debugger.debug("Attempting to send "+getName()+" to "+server.getName()); handle.createConnectionRequest((RegisteredServer) server.getHandle()).connect().thenAcceptAsync( result -> { if(!result.isSuccessful()) { diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServerPing.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServerPing.java index acc57ae..ae5b6be 100644 --- a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServerPing.java +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServerPing.java @@ -22,9 +22,11 @@ public class VelocityServerPing implements AdaptedServerPing { return PlainTextComponentSerializer.plainText().serialize(handle.getDescriptionComponent()); } + int add = 0; + @Override public int getPlayerCount() { - return handle.getPlayers().map(ServerPing.Players::getOnline).orElse(0); + return handle.getPlayers().map(ServerPing.Players::getOnline).orElse(0)+add; } @Override @@ -32,6 +34,11 @@ public class VelocityServerPing implements AdaptedServerPing { return handle.getPlayers().map(ServerPing.Players::getMax).orElse(0); } + @Override + public void addPlayer() { + add++; + } + @Override public ServerPing getHandle() { return handle; 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 cbd9460..f39b8cd 100644 --- a/spigot/src/main/java/us/ajg0702/queue/spigot/Commands.java +++ b/spigot/src/main/java/us/ajg0702/queue/spigot/Commands.java @@ -17,7 +17,7 @@ public class Commands implements CommandExecutor { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - if(!pl.hasProxy()) { + if(!pl.hasProxy() && pl.config.getBoolean("check-proxy-response")) { 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; } diff --git a/spigot/src/main/resources/spigot-config.yml b/spigot/src/main/resources/spigot-config.yml index e74fd04..4d5825e 100644 --- a/spigot/src/main/resources/spigot-config.yml +++ b/spigot/src/main/resources/spigot-config.yml @@ -11,8 +11,12 @@ send-queue-commands-in-batches: false # If you disable this, ajQueue will not be able to tell if the server is whitelisted! take-over-motd-for-whitelist: true +# Should we check if the proxy responds to plugin messages? +# For some reason this seems to fail for some people, +# so disable this if ajqueue says its not installed on the proxy when it actually is +check-proxy-response: true # Dont touch this -config-version: 2 \ No newline at end of file +config-version: 3 \ No newline at end of file