diff --git a/api/build.gradle.kts b/api/build.gradle.kts index a6ce712..c4cf23b 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -18,7 +18,7 @@ dependencies { implementation("net.kyori:adventure-text-serializer-plain:4.9.3") compileOnly("com.google.guava:guava:30.1.1-jre") - compileOnly("us.ajg0702:ajUtils:1.1.22") + compileOnly("us.ajg0702:ajUtils:1.2.10") } publishing { 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 dba7633..17ab09e 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 @@ -36,6 +36,20 @@ public interface QueueServer { */ String getStatusString(); + /** + * Get the status of the server as a string (not from the messages file) + * @param p The player that you are checking for. Used for checking restricted servers + * @return The status of the server as a string + */ + String getStatus(AdaptedPlayer p); + + /** + * Get the status of the server as a string (not from the messages file) + * Does not check if the player has access using restricted mode. May show online if it is restricted + * @return The status of the server as a string + */ + String getStatus(); + /** * Sends a server ping and uses the response to update online status, player count status, and whitelist status */ diff --git a/build.gradle.kts b/build.gradle.kts index 8bfd7ba..9f99f79 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ repositories { } allprojects { - version = "2.2.7" + version = "2.2.8" group = "us.ajg0702" plugins.apply("java") @@ -27,8 +27,8 @@ allprojects { failFast = true maxParallelForks = (Runtime.getRuntime().availableProcessors() - 1).takeIf { it > 0 } ?: 1 - reports.html.isEnabled = false - reports.junitXml.isEnabled = false + reports.html.required.set(false) + reports.junitXml.required.set(false) } diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 4cfdce4..0d606cf 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -18,7 +18,7 @@ dependencies { compileOnly("net.kyori:adventure-text-serializer-plain:4.9.3") compileOnly("com.google.guava:guava:30.1.1-jre") - compileOnly("us.ajg0702:ajUtils:1.1.22") + compileOnly("us.ajg0702:ajUtils:1.2.10") compileOnly("org.slf4j:slf4j-log4j12:1.7.29") 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 c43a8d0..0f1c93f 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 @@ -8,7 +8,6 @@ import us.ajg0702.utils.common.Messages; import java.util.ArrayList; import java.util.List; -import java.util.Locale; public class SlashServerCommand extends BaseCommand { diff --git a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Kick.java b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Kick.java index ceec116..e0d5197 100644 --- a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Kick.java +++ b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Kick.java @@ -1,9 +1,6 @@ package us.ajg0702.queue.commands.commands.manage; import com.google.common.collect.ImmutableList; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; -import org.spongepowered.configurate.ConfigurateException; import us.ajg0702.queue.api.commands.ICommandSender; import us.ajg0702.queue.api.players.QueuePlayer; import us.ajg0702.queue.api.queues.QueueServer; diff --git a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/KickAll.java b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/KickAll.java index 88cb327..57ff453 100644 --- a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/KickAll.java +++ b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/KickAll.java @@ -9,7 +9,6 @@ import us.ajg0702.queue.common.QueueMain; import us.ajg0702.utils.common.Messages; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class KickAll extends SubCommand { 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 8797c86..20ac404 100644 --- a/common/src/main/java/us/ajg0702/queue/common/EventHandlerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/EventHandlerImpl.java @@ -116,6 +116,17 @@ public class EventHandlerImpl implements EventHandler { if(server == null) return; main.getPlatformMethods().sendPluginMessage(recievingPlayer, "queuedfor", srv, server.getQueue().size()+""); } + if(subchannel.equals("status")) { + String srv = in.readUTF(); + QueueServer server = main.getQueueManager().findServer(srv); + if(server == null) return; + main.getPlatformMethods().sendPluginMessage( + recievingPlayer, + "status", + srv, + main.getMessages().getRawString("placeholders.status."+server.getStatus(recievingPlayer)) + ); + } if(subchannel.equals("leavequeue")) { String[] args = new String[1]; try { diff --git a/common/src/main/java/us/ajg0702/queue/common/QueueMain.java b/common/src/main/java/us/ajg0702/queue/common/QueueMain.java index 1fdde20..2b52877 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueMain.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueMain.java @@ -180,7 +180,7 @@ public class QueueMain extends AjQueueAPI { } private void constructMessages() { - LinkedHashMap d = new LinkedHashMap<>(); + LinkedHashMap d = new LinkedHashMap<>(); d.put("status.offline.base", "&c{SERVER} is {STATUS}. &7You are in position &f{POS}&7 of &f{LEN}&7."); @@ -237,8 +237,18 @@ public class QueueMain extends AjQueueAPI { d.put("placeholders.position.none", "None"); d.put("placeholders.estimated_time.none", "None"); + d.put("placeholders.status.online", "&aOnline"); + d.put("placeholders.status.offline", "&cOffline"); + d.put("placeholders.status.restarting", "&cRestarting"); + d.put("placeholders.status.full", "&eFull"); + d.put("placeholders.status.restricted", "&eRestricted"); + d.put("placeholders.status.paused", "&ePaused"); + d.put("placeholders.status.whitelisted", "&eWhitelisted"); + d.put("title.title", ""); d.put("title.subtitle", "You are #{POS} in the queue!"); + d.put("title.sending-now.title", ""); + d.put("title.sending-now.subtitle", "Sending you to {SERVER} now.."); d.put("commands.leave.more-args", "&cPlease specify which queue you want to leave! &7You are in these queues: {QUEUES}"); d.put("commands.leave.queues-list-format", "&f{NAME}&7, "); 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 b9089a3..22beb0f 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java @@ -394,17 +394,21 @@ public class QueueManagerImpl implements QueueManager { if(!getSingleServer(player).equals(server)) continue; + int time = (int) Math.round(pos * main.getTimeBetweenPlayers()); + Component titleMessage = msgs.getComponent("title.title", "POS:"+pos, "LEN:"+server.getQueue().size(), "SERVER:"+server.getAlias(), - "STATUS:"+status + "STATUS:"+status, + "TIME:"+ TimeUtils.timeString(time, msgs.getString("format.time.mins"), msgs.getString("format.time.secs")) ); Component subTitleMessage = msgs.getComponent("title.subtitle", "POS:"+pos, "LEN:"+server.getQueue().size(), "SERVER:"+server.getAlias(), - "STATUS:"+status + "STATUS:"+status, + "TIME:"+ TimeUtils.timeString(time, msgs.getString("format.time.mins"), msgs.getString("format.time.secs")) ); Title title = Title.title(titleMessage, subTitleMessage, Title.Times.of(Duration.ZERO, Duration.ofSeconds(2L), Duration.ZERO)); @@ -616,6 +620,19 @@ public class QueueManagerImpl implements QueueManager { } if(System.currentTimeMillis() - sendingNowAntiSpam.get(nextPlayer) >= 5000) { nextPlayer.sendMessage(msgs.getComponent("status.sending-now", "SERVER:"+server.getAlias())); + if(main.getConfig().getBoolean("send-title")) { + nextPlayer.showTitle(Title.title( + main.getMessages().getComponent( + "title.sending-now.title", + "SERVER:"+server.getAlias() + ), + main.getMessages().getComponent( + "title.sending-now.subtitle", + "SERVER:"+server.getAlias() + ), + Title.Times.of(Duration.ZERO, Duration.ofSeconds(2L), Duration.ZERO) + )); + } sendingNowAntiSpam.put(nextPlayer, System.currentTimeMillis()); } 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 0362452..bfa72b5 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 @@ -157,6 +157,40 @@ public class QueueServerImpl implements QueueServer { return getStatusString(null); } + @Override + public String getStatus(AdaptedPlayer p) { + if(getOfflineTime() > main.getConfig().getInt("offline-time")) { + return "offline"; + } + + if(!isOnline()) { + return "restarting"; + } + + if(isPaused()) { + return "paused"; + } + + if(p != null && isWhitelisted() && !getWhitelistedPlayers().contains(p.getUniqueId())) { + return "whitelisted"; + } + + if(isFull() && !canJoinFull(p)) { + return "full"; + } + + if(p != null && !canAccess(p)) { + return "restricted"; + } + + return "online"; + } + + @Override + public String getStatus() { + return null; + } + @Override public void updatePing() { boolean pingerDebug = main.getConfig().getBoolean("pinger-debug"); 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 b9a902f..bde5ab3 100644 --- a/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java +++ b/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java @@ -19,7 +19,7 @@ public class FreeLogic implements Logic { @Override public boolean playerDisconnectedTooLong(QueuePlayer player) { - return player.getMaxOfflineTime() < player.getTimeSinceOnline()*1000; + return player.getTimeSinceOnline() > player.getMaxOfflineTime()*1000L; } @Override diff --git a/free/build.gradle.kts b/free/build.gradle.kts index 2cb06f7..b856e4a 100644 --- a/free/build.gradle.kts +++ b/free/build.gradle.kts @@ -18,7 +18,7 @@ dependencies { compileOnly("com.google.guava:guava:30.1.1-jre") compileOnly("org.spongepowered:configurate-yaml:4.0.0") - implementation("us.ajg0702:ajUtils:1.1.22") + implementation("us.ajg0702:ajUtils:1.2.10") implementation(project(":platforms:velocity")) implementation(project(":platforms:bungeecord")) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0f80bbf..8049c68 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/platforms/bungeecord/build.gradle.kts b/platforms/bungeecord/build.gradle.kts index a51f879..106cca4 100644 --- a/platforms/bungeecord/build.gradle.kts +++ b/platforms/bungeecord/build.gradle.kts @@ -16,7 +16,7 @@ repositories { dependencies { compileOnly("net.kyori:adventure-api:4.9.3") compileOnly("com.google.guava:guava:30.1.1-jre") - compileOnly("us.ajg0702:ajUtils:1.1.22") + compileOnly("us.ajg0702:ajUtils:1.2.10") compileOnly("net.md-5:bungeecord-api:1.16-R0.4") @@ -25,7 +25,7 @@ dependencies { implementation("net.kyori:adventure-platform-bungeecord:4.0.0") compileOnly("net.kyori:adventure-text-serializer-plain:4.9.3") - compileOnly("com.viaversion:viaversion-api:4.2.1") + compileOnly("com.viaversion:viaversion-api:4.3.1") implementation("org.bstats:bstats-bungeecord:3.0.0") diff --git a/platforms/velocity/build.gradle.kts b/platforms/velocity/build.gradle.kts index a2dacbb..a57dc43 100644 --- a/platforms/velocity/build.gradle.kts +++ b/platforms/velocity/build.gradle.kts @@ -8,7 +8,7 @@ group = "us.ajg0702.queue.platforms.velocity" repositories { //mavenLocal() maven { url = uri("https://repo.ajg0702.us") } - maven { url = uri("https://nexus.velocitypowered.com/repository/maven-public/") } + maven { url = uri("https://repo.papermc.io/repository/maven-public/") } maven { url = uri("https://repo.viaversion.com/") } mavenCentral() } @@ -16,13 +16,13 @@ repositories { dependencies { compileOnly("net.kyori:adventure-api:4.9.3") compileOnly("com.google.guava:guava:30.1.1-jre") - compileOnly("us.ajg0702:ajUtils:1.1.22") + compileOnly("us.ajg0702:ajUtils:1.2.10") - compileOnly("com.velocitypowered:velocity-api:3.1.0") - annotationProcessor("com.velocitypowered:velocity-api:3.1.0") + compileOnly("com.velocitypowered:velocity-api:3.1.1") + annotationProcessor("com.velocitypowered:velocity-api:3.1.1") implementation("net.kyori:adventure-text-minimessage:4.10.0") - compileOnly("com.viaversion:viaversion-api:4.2.1") + compileOnly("com.viaversion:viaversion-api:4.3.1") implementation("org.bstats:bstats-velocity:3.0.0") diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServer.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServer.java index 7af2d64..dd316a0 100644 --- a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServer.java +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServer.java @@ -12,7 +12,6 @@ import us.ajg0702.queue.platforms.velocity.players.VelocityPlayer; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; public class VelocityServer implements AdaptedServer { diff --git a/premium/build.gradle.kts b/premium/build.gradle.kts index 2019d31..0e751ff 100644 --- a/premium/build.gradle.kts +++ b/premium/build.gradle.kts @@ -23,14 +23,14 @@ dependencies { compileOnly("me.TechsCode:FakeUltraPerms:1.0.2") - compileOnly("us.ajg0702:ajUtils:1.1.22") + compileOnly("us.ajg0702:ajUtils:1.2.10") compileOnly("net.kyori:adventure-api:4.9.3") compileOnly(fileTree(mapOf("dir" to "../libs/private", "include" to listOf("*.jar")))) compileOnly(fileTree(mapOf("dir" to "../libs/public", "include" to listOf("*.jar")))) - compileOnly("net.luckperms:api:5.0") + compileOnly("net.luckperms:api:5.4") } tasks.shadowJar { diff --git a/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/LuckPermsHook.java b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/LuckPermsHook.java index 794465f..49f9d31 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/LuckPermsHook.java +++ b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/LuckPermsHook.java @@ -6,11 +6,10 @@ import net.luckperms.api.context.Context; import net.luckperms.api.model.user.User; import net.luckperms.api.node.Node; import net.luckperms.api.node.NodeType; -import net.luckperms.api.query.QueryMode; import net.luckperms.api.query.QueryOptions; import us.ajg0702.queue.api.players.AdaptedPlayer; -import us.ajg0702.queue.common.QueueMain; import us.ajg0702.queue.api.premium.PermissionHook; +import us.ajg0702.queue.common.QueueMain; import java.util.*; diff --git a/spigot/build.gradle.kts b/spigot/build.gradle.kts index e5916bd..260a421 100644 --- a/spigot/build.gradle.kts +++ b/spigot/build.gradle.kts @@ -22,9 +22,9 @@ dependencies { implementation("net.kyori:adventure-api:4.9.3") compileOnly("com.google.guava:guava:30.1.1-jre") - compileOnly("org.spongepowered:configurate-yaml:4.0.0") + compileOnly("org.spongepowered:configurate-yaml:4.1.2") - compileOnly("us.ajg0702:ajUtils:1.1.22") + compileOnly("us.ajg0702:ajUtils:1.2.10") compileOnly(group = "org.spigotmc", name = "spigot", version = "1.16.5-R0.1-SNAPSHOT") compileOnly("me.clip:placeholderapi:2.10.4") diff --git a/spigot/src/main/java/us/ajg0702/queue/spigot/Placeholders.java b/spigot/src/main/java/us/ajg0702/queue/spigot/Placeholders.java index 1a5d757..fb5c169 100644 --- a/spigot/src/main/java/us/ajg0702/queue/spigot/Placeholders.java +++ b/spigot/src/main/java/us/ajg0702/queue/spigot/Placeholders.java @@ -175,6 +175,9 @@ public class Placeholders extends PlaceholderExpansion { if(identifier.matches("queuedfor_*.*")) { return "0"; } + if(identifier.matches("status_*.*")) { + return "Loading"; + } } @@ -185,22 +188,25 @@ public class Placeholders extends PlaceholderExpansion { private String parsePlaceholder(Player player, String identifier) { if(identifier.equalsIgnoreCase("queued")) { plugin.sendMessage(player, "queuename", ""); - } + } else if(identifier.equalsIgnoreCase("position")) { plugin.sendMessage(player, "position", ""); - } + } else if(identifier.equalsIgnoreCase("of")) { plugin.sendMessage(player, "positionof", ""); - } + } else if(identifier.equalsIgnoreCase("inqueue")) { plugin.sendMessage(player, "inqueue", ""); - } + } else if(identifier.equalsIgnoreCase("estimated_time")) { plugin.sendMessage(player, "estimated_time", ""); - } + } else if(identifier.matches("queuedfor_*.*")) { plugin.sendMessage(player, "queuedfor", identifier.split("_")[1]); - } + } else + if(identifier.matches("status_*.*")) { + plugin.sendMessage(player, "status", identifier.split("_")[1]); + } return null; diff --git a/spigot/src/main/java/us/ajg0702/queue/spigot/SpigotMain.java b/spigot/src/main/java/us/ajg0702/queue/spigot/SpigotMain.java index 0a8783b..66baa35 100644 --- a/spigot/src/main/java/us/ajg0702/queue/spigot/SpigotMain.java +++ b/spigot/src/main/java/us/ajg0702/queue/spigot/SpigotMain.java @@ -178,6 +178,20 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List phs.put("estimated_time", time); placeholders.responseCache.put(p, phs); } + if(subchannel.equals("status")) { + String playername = in.readUTF(); + String server = in.readUTF(); + + Player p = Bukkit.getPlayer(playername); + if(p == null) return; + if(!p.isOnline()) return; + + String status = in.readUTF(); + HashMap phs = placeholders.responseCache.get(p); + if(phs == null) phs = new HashMap<>(); + phs.put("status_"+server, status+""); + placeholders.responseCache.put(p, phs); + } } @@ -207,9 +221,7 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List @EventHandler public void onJoin(PlayerJoinEvent e) { if(hasProxy) return; - Bukkit.getScheduler().runTask(this, () -> { - sendMessage(e.getPlayer(), "ack", ""); - }); + Bukkit.getScheduler().runTask(this, () -> sendMessage(e.getPlayer(), "ack", "")); } @EventHandler(priority = EventPriority.HIGH) diff --git a/spigot/src/main/java/us/ajg0702/queue/spigot/utils/ActionBar.java b/spigot/src/main/java/us/ajg0702/queue/spigot/utils/ActionBar.java index acc3c60..8824dfa 100644 --- a/spigot/src/main/java/us/ajg0702/queue/spigot/utils/ActionBar.java +++ b/spigot/src/main/java/us/ajg0702/queue/spigot/utils/ActionBar.java @@ -8,7 +8,7 @@ import java.lang.reflect.Method; /** * A cross-version actionbar class - * @author Based on ActionBarAPI from https://github.com/ConnorLinfoot + * @author Based on ActionBarAPI from ConnorLinfoot * */ public class ActionBar {