From ee6f7c42a4c0eaebc8652ea7e56b47a8505effef Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Fri, 13 Aug 2021 17:55:17 -0700 Subject: [PATCH 01/17] possibly mitigate funky maven central timing out --- free/build.gradle.kts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/free/build.gradle.kts b/free/build.gradle.kts index d75bcbd..1561854 100644 --- a/free/build.gradle.kts +++ b/free/build.gradle.kts @@ -7,10 +7,9 @@ plugins { group = "us.ajg0702.queue" repositories { - //mavenLocal() - mavenCentral() maven { url = uri("https://repo.ajg0702.us") } maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots") } + mavenCentral() } dependencies { From 1ff3c8ef0efa5081c20ac8b77c3a429926db9cdb Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Fri, 13 Aug 2021 18:12:38 -0700 Subject: [PATCH 02/17] more mitigate funky maven central timing out --- api/build.gradle.kts | 3 ++- build.gradle.kts | 3 ++- common/build.gradle.kts | 2 +- platforms/bungeecord/build.gradle.kts | 2 +- platforms/velocity/build.gradle.kts | 2 +- premium/build.gradle.kts | 3 +-- spigot/build.gradle.kts | 4 +++- 7 files changed, 11 insertions(+), 8 deletions(-) diff --git a/api/build.gradle.kts b/api/build.gradle.kts index 6f6db74..c0f41ce 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -7,9 +7,10 @@ group = "us.ajg0702.queue.api" repositories { //mavenLocal() - mavenCentral() maven { url = uri("https://repo.ajg0702.us") } + + mavenCentral() } dependencies { diff --git a/build.gradle.kts b/build.gradle.kts index 2f9ba5d..857d08c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,9 +5,10 @@ plugins { } repositories { - mavenCentral() maven { url = uri("https://repo.ajg0702.us") } maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots") } + + mavenCentral() } allprojects { diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 9661044..0f23286 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -7,8 +7,8 @@ group = "us.ajg0702.queue.common" repositories { //mavenLocal() - mavenCentral() maven { url = uri("https://repo.ajg0702.us") } + mavenCentral() } dependencies { diff --git a/platforms/bungeecord/build.gradle.kts b/platforms/bungeecord/build.gradle.kts index 96b77ac..f970c10 100644 --- a/platforms/bungeecord/build.gradle.kts +++ b/platforms/bungeecord/build.gradle.kts @@ -7,9 +7,9 @@ group = "us.ajg0702.queue.platforms.bungeecord" repositories { //mavenLocal() - mavenCentral() maven { url = uri("https://repo.ajg0702.us") } maven { url = uri("https://nexus.velocitypowered.com/repository/maven-public/") } + mavenCentral() } dependencies { diff --git a/platforms/velocity/build.gradle.kts b/platforms/velocity/build.gradle.kts index bd142b7..aa52cf2 100644 --- a/platforms/velocity/build.gradle.kts +++ b/platforms/velocity/build.gradle.kts @@ -7,9 +7,9 @@ group = "us.ajg0702.queue.platforms.velocity" repositories { //mavenLocal() - mavenCentral() maven { url = uri("https://repo.ajg0702.us") } maven { url = uri("https://nexus.velocitypowered.com/repository/maven-public/") } + mavenCentral() } dependencies { diff --git a/premium/build.gradle.kts b/premium/build.gradle.kts index 35a51ec..e81ddba 100644 --- a/premium/build.gradle.kts +++ b/premium/build.gradle.kts @@ -8,10 +8,9 @@ group = "us.ajg0702.queue" repositories { //mavenLocal() - mavenCentral() maven { url = uri("https://repo.ajg0702.us") } maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots") } - + mavenCentral() } dependencies { diff --git a/spigot/build.gradle.kts b/spigot/build.gradle.kts index a24dff6..3e8de50 100644 --- a/spigot/build.gradle.kts +++ b/spigot/build.gradle.kts @@ -7,13 +7,15 @@ group = "us.ajg0702.queue.spigot" repositories { //mavenLocal() - mavenCentral() + maven { url = uri("https://repo.extendedclip.com/content/repositories/placeholderapi/") } maven { url = uri("https://repo.codemc.io/repository/nms/") } maven { url = uri("https://repo.ajg0702.us") } + + mavenCentral() } dependencies { From 3bcbd3280374ec827aa2c4ca6021f1bd3eadf11b Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Mon, 16 Aug 2021 13:38:42 -0700 Subject: [PATCH 03/17] update some descriptions in the config --- common/src/main/resources/config.yml | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/common/src/main/resources/config.yml b/common/src/main/resources/config.yml index 736c47b..38b014d 100644 --- a/common/src/main/resources/config.yml +++ b/common/src/main/resources/config.yml @@ -1,5 +1,5 @@ # Dont touch this number please -config-version: 24 +config-version: 25 # The time the server will wait between sending people in the queue # Default: 5 @@ -31,9 +31,7 @@ kick-reasons: # Should we remove a player from the queue if they move servers? -# If they join another queue, they will be removed from the previous one no matter what -# This is more meant for if you have multiple lobbies if you want to let the player switch -# between them without losing their queue position +# This will remove the player from if they switch to any other server # Default: false remove-player-on-server-switch: false @@ -53,17 +51,19 @@ wait-to-load-servers-delay: 500 # How often (in seconds) we should check for new servers to add queues for. # If you dynamicly add servers, set this to something other than 0. # To disable, set to 0 +# Default: 0 reload-servers-interval: 0 # Should we require permissions for players to be able to join queues? -# If enabled, players will be required to have the permission ajqueue.queue. +# If enabled, players will be required to have the permission ajqueue.queue. to be able to join queues # Default: false require-permission: false # Should we let players join more than one queue? # If enabled, players will be able to be in multiple queues at once. +# If disabled, players will be removed from the previous queue when joining a new queue # Default: true allow-multiple-queues: true @@ -163,6 +163,7 @@ priority-queue-debug: false auto-add-to-queue-on-kick: false # The delay for the above option. # In seconds, decimals supported. +# Default: 1 auto-add-to-queue-on-kick-delay: 1 # With what kick reasons should we auto-add the player to the queue @@ -176,10 +177,12 @@ auto-add-kick-reasons: # Should we enable the server command being a queue command? # This may require extra setup on bungeecord. See the wiki: # https://wiki.ajg0702.us/ajqueue/setup/replacing-server-command +# Default: false enable-server-command: false # Should we enable priority messages? # Configure the priority messages in the option below. +# Default: false enable-priority-messages: false # Messages we send to players with priority queue when they join the queue @@ -189,4 +192,9 @@ enable-priority-messages: false # Example: 1:You have a priority of 1! priority-messages: - "*:Joining the queue with a priority of {PRIORITY}!" - - "100:Wow! You have a priority of 100!" \ No newline at end of file + - "100:Wow! You have a priority of 100!" + +# Should the plugin send a title to the player? +# The title shows what position the player is in the queue +# Default: false +send-title: false \ No newline at end of file From f2e6cc1b9b814d863c75c2cacf447343bc426976 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Mon, 16 Aug 2021 14:27:00 -0700 Subject: [PATCH 04/17] actionbar --- .../us/ajg0702/queue/api/QueueManager.java | 5 ++ build.gradle.kts | 2 +- .../us/ajg0702/queue/common/QueueMain.java | 3 + .../queue/common/QueueManagerImpl.java | 41 +++++++++++ .../us/ajg0702/queue/common/TaskManager.java | 12 +++- .../platforms/bungeecord/BungeeQueue.java | 5 ++ .../bungeecord/players/BungeePlayer.java | 70 ++++++++++++++++++- 7 files changed, 133 insertions(+), 5 deletions(-) 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 f8f49f0..acb39d7 100644 --- a/api/src/main/java/us/ajg0702/queue/api/QueueManager.java +++ b/api/src/main/java/us/ajg0702/queue/api/QueueManager.java @@ -64,6 +64,11 @@ public interface QueueManager { */ void sendActionBars(); + /** + * Sends queue status titles to players in queues + */ + void sendTitles(); + /** * Tell the spigot sides to call the queue scoreboard event */ diff --git a/build.gradle.kts b/build.gradle.kts index 857d08c..99e913c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ repositories { } allprojects { - version = "2.0.3" + version = "2.0.4" group = "us.ajg0702" plugins.apply("java") 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 77b435f..3883959 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueMain.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueMain.java @@ -175,6 +175,9 @@ public class QueueMain { d.put("placeholders.queued.none", "None"); d.put("placeholders.position.none", "None"); + d.put("title.title", ""); + d.put("title.subtitle", "You are #{POS} in the queue!"); + 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, "); d.put("commands.leave.not-queued", "&cYou are not queued for that server! &7You are in these queues: {QUEUES}"); 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 5af0907..e9403cc 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java @@ -1,6 +1,8 @@ package us.ajg0702.queue.common; import com.google.common.collect.ImmutableList; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.title.Title; import us.ajg0702.queue.api.QueueManager; import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.players.QueuePlayer; @@ -11,6 +13,7 @@ import us.ajg0702.queue.common.queues.QueueServerImpl; import us.ajg0702.utils.common.Messages; import us.ajg0702.utils.common.TimeUtils; +import java.time.Duration; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -313,6 +316,44 @@ public class QueueManagerImpl implements QueueManager { } } + @Override + public void sendTitles() { + if(!main.getConfig().getBoolean("send-title")) return; + + for(QueueServer server : servers) { + String status = server.getStatusString(); + for(QueuePlayer queuePlayer : server.getQueue()) { + + int pos = queuePlayer.getPosition(); + if(pos == 0) { + server.removePlayer(queuePlayer); + continue; + } + + AdaptedPlayer player = queuePlayer.getPlayer(); + if(player == null) continue; + + if(!getSingleServer(player).equals(server)) continue; + + Component titleMessage = msgs.getComponent("title.title", + "POS:"+pos, + "LEN:"+server.getQueue().size(), + "SERVER:"+server.getAlias(), + "STATUS:"+status + ); + Component subTitleMessage = msgs.getComponent("title.title", + "POS:"+pos, + "LEN:"+server.getQueue().size(), + "SERVER:"+server.getAlias(), + "STATUS:"+status + ); + + Title title = Title.title(titleMessage, subTitleMessage, Title.Times.of(Duration.ZERO, Duration.ofSeconds(2L), Duration.ZERO)); + player.showTitle(title); + } + } + } + @Override public void sendQueueEvents() { List svs = main.getConfig().getStringList("queue-servers"); diff --git a/common/src/main/java/us/ajg0702/queue/common/TaskManager.java b/common/src/main/java/us/ajg0702/queue/common/TaskManager.java index 2db235f..e9932e9 100644 --- a/common/src/main/java/us/ajg0702/queue/common/TaskManager.java +++ b/common/src/main/java/us/ajg0702/queue/common/TaskManager.java @@ -24,7 +24,7 @@ public class TaskManager { } public String taskStatus() { - List> tasks = Arrays.asList(sendTask, updateTask, messageTask, actionBarTask, queueEventTask, reloadServerTask); + List> tasks = Arrays.asList(sendTask, updateTask, messageTask, actionBarTask, titleTask, queueEventTask, reloadServerTask); StringBuilder sb = new StringBuilder(); for(ScheduledFuture task : tasks) { sb.append(task == null ? "null" : task.isDone() ? "canceled/done" : "running"); @@ -37,6 +37,7 @@ public class TaskManager { ScheduledFuture updateTask; ScheduledFuture messageTask; ScheduledFuture actionBarTask; + ScheduledFuture titleTask; ScheduledFuture queueEventTask; ScheduledFuture reloadServerTask; public void rescheduleTasks() { @@ -67,6 +68,12 @@ public class TaskManager { TimeUnit.MILLISECONDS ); + titleTask = scheduleAtFixedRate( + main.getQueueManager()::sendTitles, + 1500L, + TimeUnit.MILLISECONDS + ); + queueEventTask = scheduleAtFixedRate( main.getQueueManager()::sendQueueEvents, 1500L, @@ -96,6 +103,9 @@ public class TaskManager { if(actionBarTask != null && !actionBarTask.isCancelled()) { actionBarTask.cancel(true); } + if(titleTask != null && !titleTask.isCancelled()) { + titleTask.cancel(true); + } if(queueEventTask != null && !queueEventTask.isCancelled()) { queueEventTask.cancel(true); } 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 7675a92..b92ea25 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 @@ -2,11 +2,16 @@ package us.ajg0702.queue.platforms.bungeecord; import net.kyori.adventure.platform.bungeecord.BungeeAudiences; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer; +import net.kyori.adventure.title.Title; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.*; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Plugin; +import net.md_5.bungee.chat.BaseComponentSerializer; import net.md_5.bungee.event.EventHandler; import org.bstats.bungeecord.Metrics; import org.bstats.charts.SimplePie; 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 c45b73f..4f9f8c8 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 @@ -1,8 +1,13 @@ package us.ajg0702.queue.platforms.bungeecord.players; import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.sound.Sound; +import net.kyori.adventure.sound.SoundStop; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.ComponentLike; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import net.kyori.adventure.title.Title; import net.md_5.bungee.api.connection.ProxiedPlayer; import org.jetbrains.annotations.NotNull; import us.ajg0702.queue.api.players.AdaptedPlayer; @@ -15,6 +20,61 @@ import java.util.List; import java.util.UUID; public class BungeePlayer implements AdaptedPlayer, Audience { + @Override + public void sendActionBar(@NotNull ComponentLike message) { + getAudience().sendActionBar(message); + } + + @Override + public void showTitle(@NotNull Title title) { + System.out.println("title!"); + getAudience().showTitle(title); + } + + @Override + public void clearTitle() { + getAudience().clearTitle(); + } + + @Override + public void resetTitle() { + getAudience().resetTitle(); + } + + @Override + public void showBossBar(@NotNull BossBar bar) { + getAudience().showBossBar(bar); + } + + @Override + public void hideBossBar(@NotNull BossBar bar) { + getAudience().hideBossBar(bar); + } + + @Override + public void playSound(@NotNull Sound sound) { + getAudience().playSound(sound); + } + + @Override + public void playSound(@NotNull Sound sound, double x, double y, double z) { + getAudience().playSound(sound, x, y, z); + } + + @Override + public void stopSound(@NotNull Sound sound) { + getAudience().stopSound(sound); + } + + @Override + public void playSound(@NotNull Sound sound, Sound.@NotNull Emitter emitter) { + getAudience().playSound(sound, emitter); + } + + @Override + public void stopSound(@NotNull SoundStop stop) { + getAudience().stopSound(stop); + } final ProxiedPlayer handle; @@ -30,19 +90,19 @@ public class BungeePlayer implements AdaptedPlayer, Audience { @Override public void sendMessage(@NotNull Component message) { if(PlainTextComponentSerializer.plainText().serialize(message).isEmpty()) return; - BungeeQueue.adventure().player(handle).sendMessage(message); + getAudience().sendMessage(message); } @Override public void sendActionBar(@NotNull Component message) { if(PlainTextComponentSerializer.plainText().serialize(message).isEmpty()) return; - BungeeQueue.adventure().player(handle).sendActionBar(message); + getAudience().sendActionBar(message); } @Override public void sendMessage(String message) { if(message.isEmpty()) return; - BungeeQueue.adventure().player(handle).sendMessage(Component.text(message)); + getAudience().sendMessage(Component.text(message)); } @Override @@ -79,4 +139,8 @@ public class BungeePlayer implements AdaptedPlayer, Audience { public ProxiedPlayer getHandle() { return handle; } + + private Audience getAudience() { + return BungeeQueue.adventure().player(handle); + } } From 3843cb9fdf8b034b57788d1fa9b15ce40254c688 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Mon, 16 Aug 2021 14:54:23 -0700 Subject: [PATCH 05/17] actionbar --- .../ajg0702/queue/platforms/bungeecord/players/BungeePlayer.java | 1 - 1 file changed, 1 deletion(-) 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 4f9f8c8..50c1b62 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 @@ -27,7 +27,6 @@ public class BungeePlayer implements AdaptedPlayer, Audience { @Override public void showTitle(@NotNull Title title) { - System.out.println("title!"); getAudience().showTitle(title); } From f413b3615840db40aaad94bdb3ebd2376e850446 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Mon, 16 Aug 2021 15:07:34 -0700 Subject: [PATCH 06/17] velocity actionbar --- .../velocity/players/VelocityPlayer.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) 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 350f165..cf77ebb 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 @@ -4,8 +4,12 @@ import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ServerConnection; import com.velocitypowered.api.proxy.server.RegisteredServer; import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.sound.Sound; +import net.kyori.adventure.sound.SoundStop; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import net.kyori.adventure.title.Title; import org.jetbrains.annotations.NotNull; import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.server.AdaptedServer; @@ -16,6 +20,55 @@ import java.util.Optional; import java.util.UUID; public class VelocityPlayer implements AdaptedPlayer, Audience { + @Override + public void showTitle(@NotNull Title title) { + handle.showTitle(title); + } + + @Override + public void clearTitle() { + handle.clearTitle(); + } + + @Override + public void resetTitle() { + handle.resetTitle(); + } + + @Override + public void showBossBar(@NotNull BossBar bar) { + handle.showBossBar(bar); + } + + @Override + public void hideBossBar(@NotNull BossBar bar) { + handle.hideBossBar(bar); + } + + @Override + public void playSound(@NotNull Sound sound) { + handle.playSound(sound); + } + + @Override + public void playSound(@NotNull Sound sound, double x, double y, double z) { + handle.playSound(sound, x, y, z); + } + + @Override + public void stopSound(@NotNull Sound sound) { + handle.stopSound(sound); + } + + @Override + public void playSound(@NotNull Sound sound, Sound.@NotNull Emitter emitter) { + handle.playSound(sound, emitter); + } + + @Override + public void stopSound(@NotNull SoundStop stop) { + handle.stopSound(stop); + } final Player handle; From b700ae45ab3a788cea1d83f29681b710cfef2bd4 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Fri, 20 Aug 2021 09:33:11 -0700 Subject: [PATCH 07/17] update .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 915ff76..3a1b678 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,4 @@ dependency-reduced-pom.xml build .DS_Store .nosync -libs/**.* +libs/private From 828f7a0ad0f6e0fa96f73a6d543799e58f41438b Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Fri, 20 Aug 2021 09:39:37 -0700 Subject: [PATCH 08/17] change lib directory structure --- .gitignore | 3 ++- libs/private/README.md | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 libs/private/README.md diff --git a/.gitignore b/.gitignore index 3a1b678..ddb816f 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ dependency-reduced-pom.xml build .DS_Store .nosync -libs/private +libs/private/* +!libs/private/README.md diff --git a/libs/private/README.md b/libs/private/README.md new file mode 100644 index 0000000..d84eb3f --- /dev/null +++ b/libs/private/README.md @@ -0,0 +1,6 @@ +If you want to compile ajQueuePlus, you will need to put the UltraPermissions jar here. + +Either that, or remove the UltraPermissionsHook and its 1 reference + +eventually I will make a fake dependency with just the class structure so you dont have to do this, +but i havent done that yet :p \ No newline at end of file From e803ef0733dff7f19983e35b89132f009e82cc78 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Fri, 20 Aug 2021 10:15:03 -0700 Subject: [PATCH 09/17] update ajUtils (to have better config) --- api/build.gradle.kts | 2 +- build.gradle.kts | 2 +- common/build.gradle.kts | 2 +- free/build.gradle.kts | 2 +- platforms/bungeecord/build.gradle.kts | 2 +- platforms/velocity/build.gradle.kts | 2 +- spigot/build.gradle.kts | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/api/build.gradle.kts b/api/build.gradle.kts index c0f41ce..59da92f 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -18,7 +18,7 @@ dependencies { implementation("net.kyori:adventure-text-serializer-plain:4.0.0-SNAPSHOT") compileOnly("com.google.guava:guava:30.1.1-jre") - compileOnly("us.ajg0702:ajUtils:1.1.9") + compileOnly("us.ajg0702:ajUtils:1.1.10") } publishing { diff --git a/build.gradle.kts b/build.gradle.kts index 99e913c..98e255f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ repositories { } allprojects { - version = "2.0.4" + version = "2.0.4-pre1" group = "us.ajg0702" plugins.apply("java") diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 0f23286..511b94d 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -16,7 +16,7 @@ dependencies { compileOnly("net.kyori:adventure-text-serializer-plain:4.0.0-SNAPSHOT") compileOnly("com.google.guava:guava:30.1.1-jre") - compileOnly("us.ajg0702:ajUtils:1.1.9") + compileOnly("us.ajg0702:ajUtils:1.1.10") compileOnly("org.slf4j:slf4j-log4j12:1.7.29") diff --git a/free/build.gradle.kts b/free/build.gradle.kts index 1561854..642c029 100644 --- a/free/build.gradle.kts +++ b/free/build.gradle.kts @@ -17,7 +17,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.9") + implementation("us.ajg0702:ajUtils:1.1.10") implementation(project(":platforms:velocity")) implementation(project(":platforms:bungeecord")) diff --git a/platforms/bungeecord/build.gradle.kts b/platforms/bungeecord/build.gradle.kts index f970c10..0b3934d 100644 --- a/platforms/bungeecord/build.gradle.kts +++ b/platforms/bungeecord/build.gradle.kts @@ -15,7 +15,7 @@ repositories { dependencies { compileOnly("net.kyori:adventure-api:4.8.1") compileOnly("com.google.guava:guava:30.1.1-jre") - compileOnly("us.ajg0702:ajUtils:1.1.9") + compileOnly("us.ajg0702:ajUtils:1.1.10") compileOnly("net.md-5:bungeecord-api:1.16-R0.4") diff --git a/platforms/velocity/build.gradle.kts b/platforms/velocity/build.gradle.kts index aa52cf2..9f603e5 100644 --- a/platforms/velocity/build.gradle.kts +++ b/platforms/velocity/build.gradle.kts @@ -15,7 +15,7 @@ repositories { dependencies { compileOnly("net.kyori:adventure-api:4.8.1") compileOnly("com.google.guava:guava:30.1.1-jre") - compileOnly("us.ajg0702:ajUtils:1.1.9") + compileOnly("us.ajg0702:ajUtils:1.1.10") compileOnly("com.velocitypowered:velocity-api:3.0.0") annotationProcessor("com.velocitypowered:velocity-api:3.0.0") diff --git a/spigot/build.gradle.kts b/spigot/build.gradle.kts index 3e8de50..576b723 100644 --- a/spigot/build.gradle.kts +++ b/spigot/build.gradle.kts @@ -24,7 +24,7 @@ dependencies { compileOnly("org.spongepowered:configurate-yaml:4.0.0") - compileOnly("us.ajg0702:ajUtils:1.1.9") + compileOnly("us.ajg0702:ajUtils:1.1.10") compileOnly(group = "org.spigotmc", name = "spigot", version = "1.16.5-R0.1-SNAPSHOT") compileOnly("me.clip:placeholderapi:2.10.4") From 8bec8aeea73b01e07bb1ba2cee17c44b63921fbb Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sat, 21 Aug 2021 07:49:48 -0700 Subject: [PATCH 10/17] clean --- platforms/velocity/build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/platforms/velocity/build.gradle.kts b/platforms/velocity/build.gradle.kts index 9f603e5..2c4df54 100644 --- a/platforms/velocity/build.gradle.kts +++ b/platforms/velocity/build.gradle.kts @@ -6,7 +6,6 @@ plugins { 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/") } mavenCentral() From 434e5e2a8890c83c5c107168bcf76a3b076a6465 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sat, 21 Aug 2021 07:56:39 -0700 Subject: [PATCH 11/17] add aquacore support (but it doesnt work because it turns out aquacore api is only on spigot) --- README.md | 16 ++++-- .../queue/api/{ => premium}/Logic.java | 8 ++- .../queue/api/{ => premium}/LogicGetter.java | 5 +- .../queue/api/premium/PermissionGetter.java | 14 +++++ .../queue/api/premium}/PermissionHook.java | 2 +- build.gradle.kts | 2 +- .../commands/manage/ManageCommand.java | 2 + .../commands/manage/debug/PermissionList.java | 5 ++ .../us/ajg0702/queue/common/QueueMain.java | 2 + .../queue/common/QueueManagerImpl.java | 3 +- .../us/ajg0702/queue/logic/FreeLogic.java | 8 ++- .../ajg0702/queue/logic/LogicGetterImpl.java | 11 +++- libs/public/AquaCoreAPI.jar | Bin 0 -> 18934 bytes .../platforms/bungeecord/BungeeMethods.java | 9 ++-- .../platforms/bungeecord/BungeeQueue.java | 1 + premium/build.gradle.kts | 5 +- .../ajg0702/queue/logic/LogicGetterImpl.java | 11 ++-- .../us/ajg0702/queue/logic/PremiumLogic.java | 7 +-- ...nGetter.java => PermissionGetterImpl.java} | 14 +++-- .../logic/permissions/hooks/AquaCoreHook.java | 51 ++++++++++++++++++ .../logic/permissions/hooks/BuiltInHook.java | 2 +- .../permissions/hooks/LuckPermsHook.java | 2 +- .../hooks/UltraPermissionsHook.java | 4 +- 23 files changed, 153 insertions(+), 31 deletions(-) rename api/src/main/java/us/ajg0702/queue/api/{ => premium}/Logic.java (82%) rename api/src/main/java/us/ajg0702/queue/api/{ => premium}/LogicGetter.java (65%) create mode 100644 api/src/main/java/us/ajg0702/queue/api/premium/PermissionGetter.java rename {premium/src/main/java/us/ajg0702/queue/logic/permissions => api/src/main/java/us/ajg0702/queue/api/premium}/PermissionHook.java (82%) create mode 100644 libs/public/AquaCoreAPI.jar rename premium/src/main/java/us/ajg0702/queue/logic/permissions/{PermissionGetter.java => PermissionGetterImpl.java} (85%) create mode 100644 premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/AquaCoreHook.java diff --git a/README.md b/README.md index ca3914c..556f3b5 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,17 @@ [Spigot (premium)](https://www.spigotmc.org/resources/ajqueueplus.79123/) ajQueue is (as far as I can tell) the best queue plugin out there. -It was made because I wasn't satisfied with the existing queue plugins, all of them either being massively overpriced, -or lacking basic features +It was made because I wasn't satisfied with the existing queue plugins, +all of them either being massively overpriced, or lacking basic features # Contributing -As long as you don't break anything, i'll probably accept any merge requests you submit. -I like to have the least number of steps possible for server owners updating my plugin. +As long as you don't break anything, +i'll probably accept any merge requests you submit. +I like to have the least number of steps possible for server owners +updating my plugin. -If you need *any* help making your changes, feel free to contact me on discord. The invite link is on the plugin page ;) +If you need *any* help making your changes, feel free to contact me +on discord. The invite link is on the plugin page ;) + +# Note on compiling ajQueuePlus +If you want to compile ajQueuePlus, please read the readme file that is in libs/private \ No newline at end of file diff --git a/api/src/main/java/us/ajg0702/queue/api/Logic.java b/api/src/main/java/us/ajg0702/queue/api/premium/Logic.java similarity index 82% rename from api/src/main/java/us/ajg0702/queue/api/Logic.java rename to api/src/main/java/us/ajg0702/queue/api/premium/Logic.java index 781a944..b7aa8e4 100644 --- a/api/src/main/java/us/ajg0702/queue/api/Logic.java +++ b/api/src/main/java/us/ajg0702/queue/api/premium/Logic.java @@ -1,4 +1,4 @@ -package us.ajg0702.queue.api; +package us.ajg0702.queue.api.premium; import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.players.QueuePlayer; @@ -26,4 +26,10 @@ public interface Logic { * @return true if the player has been disconnected for too long and should be removed from the queue */ boolean playerDisconnectedTooLong(QueuePlayer player); + + /** + * Gets the permissionGetter. Only available on ajQueuePlus + * @return the permission getter + */ + PermissionGetter getPermissionGetter(); } diff --git a/api/src/main/java/us/ajg0702/queue/api/LogicGetter.java b/api/src/main/java/us/ajg0702/queue/api/premium/LogicGetter.java similarity index 65% rename from api/src/main/java/us/ajg0702/queue/api/LogicGetter.java rename to api/src/main/java/us/ajg0702/queue/api/premium/LogicGetter.java index af2b7e9..b8f5b6a 100644 --- a/api/src/main/java/us/ajg0702/queue/api/LogicGetter.java +++ b/api/src/main/java/us/ajg0702/queue/api/premium/LogicGetter.java @@ -1,6 +1,8 @@ -package us.ajg0702.queue.api; +package us.ajg0702.queue.api.premium; +import us.ajg0702.queue.api.AliasManager; import us.ajg0702.queue.api.players.AdaptedPlayer; +import us.ajg0702.queue.api.premium.Logic; import us.ajg0702.utils.common.Config; import java.util.List; @@ -10,4 +12,5 @@ public interface LogicGetter { Logic constructLogic(); AliasManager constructAliasManager(Config config); List getPermissions(AdaptedPlayer player); + PermissionGetter getPermissionGetter(); } diff --git a/api/src/main/java/us/ajg0702/queue/api/premium/PermissionGetter.java b/api/src/main/java/us/ajg0702/queue/api/premium/PermissionGetter.java new file mode 100644 index 0000000..d050a44 --- /dev/null +++ b/api/src/main/java/us/ajg0702/queue/api/premium/PermissionGetter.java @@ -0,0 +1,14 @@ +package us.ajg0702.queue.api.premium; + +import us.ajg0702.queue.api.players.AdaptedPlayer; +import us.ajg0702.queue.api.premium.PermissionHook; + +public interface PermissionGetter { + PermissionHook getSelected(); + + int getMaxOfflineTime(AdaptedPlayer player); + + int getPriority(AdaptedPlayer player); + + int getServerPriotity(String server, AdaptedPlayer player); +} diff --git a/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionHook.java b/api/src/main/java/us/ajg0702/queue/api/premium/PermissionHook.java similarity index 82% rename from premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionHook.java rename to api/src/main/java/us/ajg0702/queue/api/premium/PermissionHook.java index b9b7e97..94105e0 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionHook.java +++ b/api/src/main/java/us/ajg0702/queue/api/premium/PermissionHook.java @@ -1,4 +1,4 @@ -package us.ajg0702.queue.logic.permissions; +package us.ajg0702.queue.api.premium; import us.ajg0702.queue.api.players.AdaptedPlayer; diff --git a/build.gradle.kts b/build.gradle.kts index 98e255f..49d7b69 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ repositories { } allprojects { - version = "2.0.4-pre1" + version = "2.0.4-pre2" group = "us.ajg0702" plugins.apply("java") diff --git a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/ManageCommand.java b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/ManageCommand.java index 1febb34..6a5c701 100644 --- a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/ManageCommand.java +++ b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/ManageCommand.java @@ -83,6 +83,7 @@ public class ManageCommand extends BaseCommand { if(args.length > 1) { for(ISubCommand subCommand : subCommands) { if(args[0].equalsIgnoreCase(subCommand.getName()) || subCommand.getAliases().contains(args[0].toLowerCase(Locale.ROOT))) { + if(!sender.hasPermission(subCommand.getPermission())) continue; return subCommand.autoComplete(sender, Arrays.copyOfRange(args, 1, args.length)); } } @@ -91,6 +92,7 @@ public class ManageCommand extends BaseCommand { List commands = new ArrayList<>(); for(ISubCommand subCommand : subCommands) { if(!subCommand.showInTabComplete()) continue; + if(!sender.hasPermission(subCommand.getPermission())) continue; commands.add(subCommand.getName()); commands.addAll(subCommand.getAliases()); } diff --git a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/debug/PermissionList.java b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/debug/PermissionList.java index a92a229..06b73eb 100644 --- a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/debug/PermissionList.java +++ b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/debug/PermissionList.java @@ -65,6 +65,11 @@ public class PermissionList extends SubCommand { if(!s.toLowerCase(Locale.ROOT).contains("ajqueue")) return; sender.sendMessage(Component.text(s)); }); + sender.sendMessage( + Component.text( + "Using: "+main.getLogicGetter().getPermissionGetter().getSelected().getName()) + .color(NamedTextColor.GOLD) + ); } @Override 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 3883959..5c4bc0a 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueMain.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueMain.java @@ -2,6 +2,8 @@ package us.ajg0702.queue.common; import org.spongepowered.configurate.ConfigurateException; import us.ajg0702.queue.api.*; +import us.ajg0702.queue.api.premium.Logic; +import us.ajg0702.queue.api.premium.LogicGetter; import us.ajg0702.queue.api.util.QueueLogger; import us.ajg0702.queue.common.utils.LogConverter; import us.ajg0702.queue.logic.LogicGetterImpl; 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 e9403cc..6dc192f 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java @@ -312,6 +312,7 @@ public class QueueManagerImpl implements QueueManager { "TIME:"+ TimeUtils.timeString(time, msgs.getString("format.time.mins"), msgs.getString("format.time.secs")) )); } + } } } @@ -341,7 +342,7 @@ public class QueueManagerImpl implements QueueManager { "SERVER:"+server.getAlias(), "STATUS:"+status ); - Component subTitleMessage = msgs.getComponent("title.title", + Component subTitleMessage = msgs.getComponent("title.subtitle", "POS:"+pos, "LEN:"+server.getQueue().size(), "SERVER:"+server.getAlias(), 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 6e26917..b9a902f 100644 --- a/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java +++ b/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java @@ -1,8 +1,9 @@ package us.ajg0702.queue.logic; -import us.ajg0702.queue.api.Logic; +import us.ajg0702.queue.api.premium.Logic; import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.players.QueuePlayer; +import us.ajg0702.queue.api.premium.PermissionGetter; import us.ajg0702.queue.api.queues.QueueServer; public class FreeLogic implements Logic { @@ -20,4 +21,9 @@ public class FreeLogic implements Logic { public boolean playerDisconnectedTooLong(QueuePlayer player) { return player.getMaxOfflineTime() < player.getTimeSinceOnline()*1000; } + + @Override + public PermissionGetter getPermissionGetter() { + return null; + } } diff --git a/common/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java b/common/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java index 37598cc..8a6a706 100644 --- a/common/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java +++ b/common/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java @@ -1,13 +1,15 @@ package us.ajg0702.queue.logic; import us.ajg0702.queue.api.AliasManager; -import us.ajg0702.queue.api.Logic; +import us.ajg0702.queue.api.premium.Logic; import us.ajg0702.queue.api.players.AdaptedPlayer; +import us.ajg0702.queue.api.premium.LogicGetter; +import us.ajg0702.queue.api.premium.PermissionGetter; import us.ajg0702.utils.common.Config; import java.util.List; -public class LogicGetterImpl implements us.ajg0702.queue.api.LogicGetter { +public class LogicGetterImpl implements LogicGetter { @Override public Logic constructLogic() { @@ -23,4 +25,9 @@ public class LogicGetterImpl implements us.ajg0702.queue.api.LogicGetter { public List getPermissions(AdaptedPlayer player) { return null; } + + @Override + public PermissionGetter getPermissionGetter() { + return null; + } } diff --git a/libs/public/AquaCoreAPI.jar b/libs/public/AquaCoreAPI.jar new file mode 100644 index 0000000000000000000000000000000000000000..b50f85ba6b8680f1dbb81206dc2386d8f04f8fb7 GIT binary patch literal 18934 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 literal 0 HcmV?d00001 diff --git a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeMethods.java b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeMethods.java index 9a6ef6e..c09244e 100644 --- a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeMethods.java +++ b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeMethods.java @@ -5,6 +5,7 @@ import com.google.common.io.ByteStreams; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.connection.Server; import us.ajg0702.queue.api.PlatformMethods; import us.ajg0702.queue.api.commands.IBaseCommand; import us.ajg0702.queue.api.commands.ICommandSender; @@ -40,13 +41,15 @@ public class BungeeMethods implements PlatformMethods { ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF(channel); out.writeUTF(player.getName()); - int length = data.length; for (String s : data) { out.writeUTF(s); } - - ((BungeePlayer) player).getHandle().getServer().sendData("ajqueue:tospigot", out.toByteArray()); + ProxiedPlayer proxiedPlayer = ((BungeePlayer) player).getHandle(); + if(proxiedPlayer == null) return; + Server server = proxiedPlayer.getServer(); + if(server == null) return; + server.sendData("ajqueue:tospigot", out.toByteArray()); } } 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 b92ea25..2aeae29 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 @@ -29,6 +29,7 @@ import us.ajg0702.queue.platforms.bungeecord.players.BungeePlayer; import us.ajg0702.queue.platforms.bungeecord.server.BungeeServer; import java.io.File; +import java.time.Duration; import java.util.Arrays; import java.util.List; diff --git a/premium/build.gradle.kts b/premium/build.gradle.kts index e81ddba..14d53f7 100644 --- a/premium/build.gradle.kts +++ b/premium/build.gradle.kts @@ -21,11 +21,12 @@ dependencies { compileOnly("com.google.guava:guava:30.1.1-jre") - compileOnly("us.ajg0702:ajUtils:1.1.9") + compileOnly("us.ajg0702:ajUtils:1.1.10") compileOnly("net.kyori:adventure-api:4.8.1") - compileOnly(fileTree(mapOf("dir" to "../libs", "include" to listOf("*.jar")))) + 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") } diff --git a/premium/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java b/premium/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java index 1613779..36b111c 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java +++ b/premium/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java @@ -1,11 +1,11 @@ package us.ajg0702.queue.logic; import us.ajg0702.queue.api.AliasManager; -import us.ajg0702.queue.api.Logic; -import us.ajg0702.queue.api.LogicGetter; +import us.ajg0702.queue.api.premium.Logic; +import us.ajg0702.queue.api.premium.LogicGetter; import us.ajg0702.queue.api.players.AdaptedPlayer; +import us.ajg0702.queue.api.premium.PermissionGetter; import us.ajg0702.queue.common.QueueMain; -import us.ajg0702.queue.logic.permissions.PermissionGetter; import us.ajg0702.utils.common.Config; import java.util.List; @@ -31,4 +31,9 @@ public class LogicGetterImpl implements LogicGetter { if(logic == null) return null; return logic.getPermissionGetter().getSelected().getPermissions(player); } + + @Override + public PermissionGetter getPermissionGetter() { + return logic.getPermissionGetter(); + } } diff --git a/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java b/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java index 7cdd042..a9bcc87 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java +++ b/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java @@ -1,14 +1,15 @@ package us.ajg0702.queue.logic; import com.google.common.collect.ImmutableList; -import us.ajg0702.queue.api.Logic; +import us.ajg0702.queue.api.premium.Logic; import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.players.QueuePlayer; import us.ajg0702.queue.api.queues.QueueServer; import us.ajg0702.queue.api.util.QueueLogger; import us.ajg0702.queue.common.QueueMain; import us.ajg0702.queue.common.players.QueuePlayerImpl; -import us.ajg0702.queue.logic.permissions.PermissionGetter; +import us.ajg0702.queue.api.premium.PermissionGetter; +import us.ajg0702.queue.logic.permissions.PermissionGetterImpl; public class PremiumLogic implements Logic { @@ -18,7 +19,7 @@ public class PremiumLogic implements Logic { private final PermissionGetter permissionGetter; public PremiumLogic(QueueMain main) { - permissionGetter = new PermissionGetter(main); + permissionGetter = new PermissionGetterImpl(main); } @Override diff --git a/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetter.java b/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetterImpl.java similarity index 85% rename from premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetter.java rename to premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetterImpl.java index cd46361..6ca9d1a 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetter.java +++ b/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetterImpl.java @@ -1,28 +1,33 @@ package us.ajg0702.queue.logic.permissions; import us.ajg0702.queue.api.players.AdaptedPlayer; +import us.ajg0702.queue.api.premium.PermissionGetter; +import us.ajg0702.queue.api.premium.PermissionHook; import us.ajg0702.queue.common.QueueMain; +import us.ajg0702.queue.logic.permissions.hooks.AquaCoreHook; import us.ajg0702.queue.logic.permissions.hooks.BuiltInHook; import us.ajg0702.queue.logic.permissions.hooks.LuckPermsHook; import us.ajg0702.queue.logic.permissions.hooks.UltraPermissionsHook; import java.util.*; -public class PermissionGetter { +public class PermissionGetterImpl implements PermissionGetter { private final List hooks; private final QueueMain main; - public PermissionGetter(QueueMain main) { + public PermissionGetterImpl(QueueMain main) { hooks = Arrays.asList( new BuiltInHook(main), new LuckPermsHook(main), - new UltraPermissionsHook(main) + new UltraPermissionsHook(main), + new AquaCoreHook(main) ); this.main = main; } private PermissionHook selected; + @Override public PermissionHook getSelected() { if(selected != null) return selected; if(hooks == null) { @@ -40,14 +45,17 @@ public class PermissionGetter { return selected; } + @Override public int getMaxOfflineTime(AdaptedPlayer player) { return getHighestPermission(player, "ajqueue.stayqueued."); } + @Override public int getPriority(AdaptedPlayer player) { return getHighestPermission(player, "ajqueue.priority."); } + @Override public int getServerPriotity(String server, AdaptedPlayer player) { return getHighestPermission(player, "ajqueue.serverpriority."+server+"."); } diff --git a/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/AquaCoreHook.java b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/AquaCoreHook.java new file mode 100644 index 0000000..328ce80 --- /dev/null +++ b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/AquaCoreHook.java @@ -0,0 +1,51 @@ +package us.ajg0702.queue.logic.permissions.hooks; + +import me.activated.core.plugin.AquaCoreAPI; +import us.ajg0702.queue.api.players.AdaptedPlayer; +import us.ajg0702.queue.common.QueueMain; +import us.ajg0702.queue.api.premium.PermissionHook; + +import java.util.ArrayList; +import java.util.List; + +public class AquaCoreHook implements PermissionHook { + + private final QueueMain main; + public AquaCoreHook(QueueMain main) { + this.main = main; + } + + @Override + public String getName() { + return "AquaCore"; + } + + @Override + public boolean canUse() { + if(!main.getPlatformMethods().hasPlugin("AquaProxy") ) return false; + try { + if(AquaCoreAPI.INSTANCE == null) { + main.getLogger().warn("AquaCore is installed, but its INSTANCE returned null! Unable to hook into it."); + return false; + } + } catch(NoClassDefFoundError e) { + main.getLogger().warning("AquaCore seems to be installed, but its api doesnt seem to be!"); + return false; + } + return true; + } + + @Override + public List getPermissions(AdaptedPlayer player) { + AquaCoreAPI api = AquaCoreAPI.INSTANCE; + + List permissions = new ArrayList<>(); + + api.getPlayerData(player.getUniqueId()).getActiveGrants().forEach(grant -> { + if(!grant.isActiveSomewhere() || grant.hasExpired()) return; + permissions.addAll(grant.getRank().getAvailablePermissions()); + }); + + return permissions; + } +} diff --git a/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/BuiltInHook.java b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/BuiltInHook.java index 80ad546..1ea1391 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/BuiltInHook.java +++ b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/BuiltInHook.java @@ -2,7 +2,7 @@ package us.ajg0702.queue.logic.permissions.hooks; import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.common.QueueMain; -import us.ajg0702.queue.logic.permissions.PermissionHook; +import us.ajg0702.queue.api.premium.PermissionHook; import java.util.ArrayList; import java.util.List; 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 1b21b79..ed892ce 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 @@ -8,7 +8,7 @@ import net.luckperms.api.node.NodeType; import net.luckperms.api.query.QueryOptions; import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.common.QueueMain; -import us.ajg0702.queue.logic.permissions.PermissionHook; +import us.ajg0702.queue.api.premium.PermissionHook; import java.util.*; diff --git a/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/UltraPermissionsHook.java b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/UltraPermissionsHook.java index 837dd7e..4aebd0f 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/UltraPermissionsHook.java +++ b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/UltraPermissionsHook.java @@ -5,7 +5,7 @@ import me.TechsCode.UltraPermissions.UltraPermissionsAPI; import me.TechsCode.UltraPermissions.storage.objects.User; import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.common.QueueMain; -import us.ajg0702.queue.logic.permissions.PermissionHook; +import us.ajg0702.queue.api.premium.PermissionHook; import java.util.ArrayList; import java.util.List; @@ -27,7 +27,7 @@ public class UltraPermissionsHook implements PermissionHook { public boolean canUse() { if(!main.getPlatformMethods().hasPlugin("UltraPermissions") ) return false; if(UltraPermissions.getAPI() == null) { - main.getLogger().warn("UltraPermissions getApi() method returned null! Unable to hook into it."); + main.getLogger().warn("UltraPermissions is installed, but its getApi() method returned null! Unable to hook into it."); return false; } return true; From e51f2d3dcd34739994c3692e396fea8b44fa2a39 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sat, 21 Aug 2021 07:56:52 -0700 Subject: [PATCH 12/17] update gradle to try to fix funny timeout --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 77be3e6..ae70bc9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: gradle:6.8.2-jdk8 +image: gradle:7.2.0-jdk8 # Cache downloaded dependencies and plugins between builds. # To keep cache across branches add 'key: "$CI_JOB_NAME"' From 835ba0d5f65a4eadb0715f8e0062ef827a952801 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sat, 21 Aug 2021 08:41:27 -0700 Subject: [PATCH 13/17] auto-retry failed builds --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ae70bc9..cb9af02 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,6 +9,7 @@ cache: build: + retry: 2 stage: build script: - rm -rf build From 737a3f66f87ac6a57251a77976c5ea3958748b10 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sat, 21 Aug 2021 08:41:45 -0700 Subject: [PATCH 14/17] auto-retry failed builds --- .gitlab-ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cb9af02..8b2c76d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -12,8 +12,7 @@ build: retry: 2 stage: build script: - - rm -rf build - - gradle :free:shadowJar + - gradle clean :free:shadowJar artifacts: paths: - free/build/libs From 959c2b860e155f98b3d72407d4ccb3acc3e43c70 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sat, 21 Aug 2021 09:43:48 -0700 Subject: [PATCH 15/17] allow pausing of all servers --- .../queue/commands/commands/manage/Pause.java | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Pause.java b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Pause.java index a165642..05e28c0 100644 --- a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Pause.java +++ b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Pause.java @@ -9,6 +9,7 @@ import us.ajg0702.utils.common.Messages; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; public class Pause extends SubCommand { @@ -47,26 +48,36 @@ public class Pause extends SubCommand { return; } - QueueServer server = main.getQueueManager().findServer(args[0]); - if(server == null) { + List servers; + QueueServer queueServer = main.getQueueManager().findServer(args[0]); + if(queueServer == null && !args[0].equalsIgnoreCase("all")) { sender.sendMessage(getMessages().getComponent("commands.pause.no-server", "SERVER:"+args[1])); return; - } - if(args.length == 1) { - server.setPaused(!server.isPaused()); + } else if(queueServer == null && args[0].equalsIgnoreCase("all")) { + servers = main.getQueueManager().getServers(); } else { - server.setPaused(args[1].equalsIgnoreCase("on") || args[1].equalsIgnoreCase("true")); + servers = Collections.singletonList(queueServer); + } + + for(QueueServer server : servers) { + if(args.length == 1) { + server.setPaused(!server.isPaused()); + } else { + server.setPaused(args[1].equalsIgnoreCase("on") || args[1].equalsIgnoreCase("true")); + } + sender.sendMessage(getMessages().getComponent("commands.pause.success", + "SERVER:"+server.getName(), + "PAUSED:"+getMessages().getString("commands.pause.paused."+server.isPaused()) + )); } - sender.sendMessage(getMessages().getComponent("commands.pause.success", - "SERVER:"+server.getName(), - "PAUSED:"+getMessages().getString("commands.pause.paused."+server.isPaused()) - )); } @Override public List autoComplete(ICommandSender sender, String[] args) { if(args.length == 1) { - return main.getQueueManager().getServerNames(); + List servers = new ArrayList<>(main.getQueueManager().getServerNames()); + servers.add("all"); + return servers; } if(args.length == 2) { return Arrays.asList("on", "off", "true", "false"); From f9c2eed94c089436a3b3c5298999f318ab9497fb Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sat, 21 Aug 2021 10:09:17 -0700 Subject: [PATCH 16/17] make api accessable. Documentation coming soon. --- .../us/ajg0702/queue/common/AjQueueAPI.java | 112 ++++++++++++++++++ .../us/ajg0702/queue/common/QueueMain.java | 18 ++- 2 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/us/ajg0702/queue/common/AjQueueAPI.java diff --git a/common/src/main/java/us/ajg0702/queue/common/AjQueueAPI.java b/common/src/main/java/us/ajg0702/queue/common/AjQueueAPI.java new file mode 100644 index 0000000..6bf12ff --- /dev/null +++ b/common/src/main/java/us/ajg0702/queue/common/AjQueueAPI.java @@ -0,0 +1,112 @@ +package us.ajg0702.queue.common; + +import us.ajg0702.queue.api.AliasManager; +import us.ajg0702.queue.api.EventHandler; +import us.ajg0702.queue.api.PlatformMethods; +import us.ajg0702.queue.api.QueueManager; +import us.ajg0702.queue.api.premium.Logic; +import us.ajg0702.queue.api.premium.LogicGetter; +import us.ajg0702.queue.api.util.QueueLogger; +import us.ajg0702.utils.common.Config; +import us.ajg0702.utils.common.Messages; + +public abstract class AjQueueAPI { + + public static AjQueueAPI INSTANCE; + + /** + * Gets the instance of the ajQueue API + * @return the ajQueue API + */ + @SuppressWarnings("unused") + public static AjQueueAPI getInstance() { + return INSTANCE; + } + + + /** + * Gets the time that ajQueue will wait between sending players. In seconds + * @return The time, in seconds, ajQueue will wait between attempting to send players + */ + public abstract double getTimeBetweenPlayers(); + + /** + * Updates the time between players. Takes it from the config. + */ + public abstract void setTimeBetweenPlayers(); + + /** + * Gets the ajQueue config + * @return the ajQueue config + */ + public abstract Config getConfig(); + + /** + * Gets the ajQueue messages manager + * @return the messages manager + */ + public abstract Messages getMessages(); + + /** + * Gets the alias manager. Used to get aliases of servers set in ajqueue's config. + * Note that the alias manager on the free version will just return the server's name + * @return The alias manager + */ + public abstract AliasManager getAliasManager(); + + /** + * Gets the priority logic. Note that the priority logic for the free version does nothing. + * @return The priority logic + */ + public abstract Logic getLogic(); + + /** + * Checks if the plugin is the premium version or not. + * @return True if ajQueuePlus, false if ajQueue + */ + public abstract boolean isPremium(); + + /** + * Gets the PlatformMethods for the platform (e.g. bungee, velocity) + * The methods in this class do things that the code for each is different on the platform. + * @return the PlatformMethods + */ + public abstract PlatformMethods getPlatformMethods(); + + /** + * Gets the ajQueue logger. If you are using this, please add your own prefix to it. + * @return The ajQueue logger + */ + public abstract QueueLogger getLogger(); + + /** + * Gets the repeating task manager + * @return The TaskManager + */ + public abstract TaskManager getTaskManager(); + + /** + * Gets the event handler. + * + * This class will probably be replaced in the future with an actual event system + * @return the EventHandler + */ + public abstract EventHandler getEventHandler(); + + /** + * Gets the queue manager. Most things you do interacting with queues will be through this. + * @return the QueueManager + */ + public abstract QueueManager getQueueManager(); + + /** + * Gets the logic getter. + * @return The logic getter + */ + public abstract LogicGetter getLogicGetter(); + + /** + * Tells ajQueue to shut down. + */ + public abstract void shutdown(); +} 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 5c4bc0a..00a9224 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueMain.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueMain.java @@ -13,7 +13,7 @@ import us.ajg0702.utils.common.Messages; import java.io.File; import java.util.LinkedHashMap; -public class QueueMain { +public class QueueMain extends AjQueueAPI { private static QueueMain instance; public static QueueMain getInstance() { @@ -21,67 +21,81 @@ public class QueueMain { } private double timeBetweenPlayers; + @Override public double getTimeBetweenPlayers() { return timeBetweenPlayers; } + @Override public void setTimeBetweenPlayers() { this.timeBetweenPlayers = config.getDouble("wait-time"); } private Config config; + @Override public Config getConfig() { return config; } private Messages messages; + @Override public Messages getMessages() { return messages; } private AliasManager aliasManager; + @Override public AliasManager getAliasManager() { return aliasManager; } private Logic logic; + @Override public Logic getLogic() { return logic; } + @Override public boolean isPremium() { return getLogic().isPremium(); } private final PlatformMethods platformMethods; + @Override public PlatformMethods getPlatformMethods() { return platformMethods; } private final QueueLogger logger; + @Override public QueueLogger getLogger() { return logger; } private final TaskManager taskManager = new TaskManager(this); + @Override public TaskManager getTaskManager() { return taskManager; } private final EventHandler eventHandler = new EventHandlerImpl(this); + @Override public EventHandler getEventHandler() { return eventHandler; } private QueueManager queueManager; + @Override public QueueManager getQueueManager() { return queueManager; } private final LogicGetter logicGetter; + @Override public LogicGetter getLogicGetter() { return logicGetter; } + @Override public void shutdown() { taskManager.shutdown(); } @@ -103,6 +117,8 @@ public class QueueMain { } instance = this; + AjQueueAPI.INSTANCE = this; + this.logger = logger; this.platformMethods = platformMethods; From cae47dc4b109e88d7f68f50e01bb60aaa85bf0c2 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Sat, 21 Aug 2021 10:30:18 -0700 Subject: [PATCH 17/17] 2.0.4 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 49d7b69..99e913c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ repositories { } allprojects { - version = "2.0.4-pre2" + version = "2.0.4" group = "us.ajg0702" plugins.apply("java")