diff --git a/api/build.gradle.kts b/api/build.gradle.kts index 10b331c..a0dbbd3 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -7,11 +7,15 @@ group = "us.ajg0702.queue.api" repositories { mavenCentral() + + maven { url = uri("https://repo.ajg0702.us") } } dependencies { implementation("net.kyori:adventure-api:4.8.1") compileOnly("com.google.guava:guava:30.1.1-jre") + + compileOnly("us.ajg0702:ajUtils:1.1.6") } publishing { diff --git a/api/src/main/java/us/ajg0702/queue/api/LogicGetter.java b/api/src/main/java/us/ajg0702/queue/api/LogicGetter.java new file mode 100644 index 0000000..292afed --- /dev/null +++ b/api/src/main/java/us/ajg0702/queue/api/LogicGetter.java @@ -0,0 +1,8 @@ +package us.ajg0702.queue.api; + +import us.ajg0702.utils.common.Config; + +public interface LogicGetter { + Logic constructLogic(); + AliasManager constructAliasManager(Config config); +} diff --git a/api/src/main/java/us/ajg0702/queue/api/PlatformMethods.java b/api/src/main/java/us/ajg0702/queue/api/PlatformMethods.java index b6581bb..57b9a9a 100644 --- a/api/src/main/java/us/ajg0702/queue/api/PlatformMethods.java +++ b/api/src/main/java/us/ajg0702/queue/api/PlatformMethods.java @@ -1,6 +1,9 @@ package us.ajg0702.queue.api; 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.server.AdaptedServer; public interface PlatformMethods { /** @@ -10,7 +13,7 @@ public interface PlatformMethods { * BungeeUtils.sendCustomData(p, "inqueue", "true"); * BungeeUtils.sendCustomData(p, "inqueueevent", "true"); */ - void sendJoinQueueChannelMessages(); + void sendJoinQueueChannelMessages(QueueServer queueServer, QueuePlayer queuePlayer); /** * Sends a plugin message on the plugin messaging channel diff --git a/api/src/main/java/us/ajg0702/queue/api/server/AdaptedServer.java b/api/src/main/java/us/ajg0702/queue/api/server/AdaptedServer.java index 4d311ca..a2f59a3 100644 --- a/api/src/main/java/us/ajg0702/queue/api/server/AdaptedServer.java +++ b/api/src/main/java/us/ajg0702/queue/api/server/AdaptedServer.java @@ -1,10 +1,11 @@ package us.ajg0702.queue.api.server; import us.ajg0702.queue.api.players.AdaptedPlayer; +import us.ajg0702.queue.api.util.Handle; import java.util.concurrent.CompletableFuture; -public interface AdaptedServer { +public interface AdaptedServer extends Handle { /** * Gets the ServerInfo for this server diff --git a/api/src/main/java/us/ajg0702/queue/api/server/AdaptedServerInfo.java b/api/src/main/java/us/ajg0702/queue/api/server/AdaptedServerInfo.java index 81be1bb..3c04b42 100644 --- a/api/src/main/java/us/ajg0702/queue/api/server/AdaptedServerInfo.java +++ b/api/src/main/java/us/ajg0702/queue/api/server/AdaptedServerInfo.java @@ -1,6 +1,8 @@ package us.ajg0702.queue.api.server; -public interface AdaptedServerInfo { +import us.ajg0702.queue.api.util.Handle; + +public interface AdaptedServerInfo extends Handle { /** * Gets the name of the server 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 1ed42e2..6a72b5f 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 @@ -1,8 +1,9 @@ package us.ajg0702.queue.api.server; import net.kyori.adventure.text.Component; +import us.ajg0702.queue.api.util.Handle; -public interface AdaptedServerPing { +public interface AdaptedServerPing extends Handle { /** * Gets the component of the description (aka MOTD) * @return A compoent of the description diff --git a/build.gradle.kts b/build.gradle.kts index c55c9e3..d51fff1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -38,8 +38,6 @@ repositories { dependencies { testImplementation("junit:junit:4.12") - - implementation(project(":common")) } diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 828b58d..bc64320 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -13,7 +13,9 @@ 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.5") + compileOnly("us.ajg0702:ajUtils:1.1.6") + + compileOnly("org.spongepowered:configurate-yaml:4.0.0") implementation(project(":api")) } 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 e9e8c6e..787ef2a 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueMain.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueMain.java @@ -1,9 +1,12 @@ package us.ajg0702.queue.common; +import org.spongepowered.configurate.ConfigurateException; import us.ajg0702.queue.api.*; import us.ajg0702.utils.common.Config; import us.ajg0702.utils.common.Messages; +import java.io.File; +import java.util.LinkedHashMap; import java.util.logging.Logger; public class QueueMain { @@ -57,4 +60,91 @@ public class QueueMain { public QueueManager getQueueManager() { return queueManager; } + + + public QueueMain(Logger logger, ServerBuilder serverBuilder, PlatformMethods platformMethods, File dataFolder) { + this.logger = logger; + this.serverBuilder = serverBuilder; + this.platformMethods = platformMethods; + + try { + config = new Config(dataFolder, logger); + } catch (ConfigurateException e) { + logger.warning("Unable to load config:"); + e.printStackTrace(); + return; + } + + timeBetweenPlayers = config.getDouble("wait-time"); + + queueManager = new QueueManagerImpl(this); + + + LinkedHashMap d = new LinkedHashMap<>(); + + d.put("status.offline.base", "&c{SERVER} is {STATUS}. &7You are in position &f{POS}&7 of &f{LEN}&7."); + + d.put("status.offline.offline", "offline"); + d.put("status.offline.restarting", "restarting"); + d.put("status.offline.full", "full"); + d.put("status.offline.restricted", "restricted"); + d.put("status.offline.paused", "paused"); + + d.put("status.online.base", "&7You are in position &f{POS}&7 of &f{LEN}&7. Estimated time: {TIME}"); + d.put("status.left-last-queue", "&aYou left the last queue you were in."); + d.put("status.now-in-queue", "&aYou are now queued for {SERVER}! &7You are in position &f{POS}&7 of &f{LEN}&7.\n&7Type &f/leavequeue&7 or &fclick here&7 to leave the queue!"); + d.put("status.now-in-empty-queue", ""); + d.put("status.sending-now", "&aSending you to &f{SERVER} &anow.."); + + d.put("errors.server-not-exist", "&cThe server {SERVER} does not exist!"); + d.put("errors.already-queued", "&cYou are already queued for that server!"); + d.put("errors.player-only", "&cThis command can only be executed as a player!"); + d.put("errors.already-connected", "&cYou are already connected to this server!"); + d.put("errors.cant-join-paused", "&cYou cannot join the queue for {SERVER} because it is paused."); + d.put("errors.deny-joining-from-server", "&cYou are not allowed to join queues from this server!"); + + d.put("commands.leave-queue", "&aYou left the queue for {SERVER}!"); + d.put("commands.reload", "&aConfig and messages reloaded successfully!"); + d.put("commands.joinqueue.usage", "&cUsage: /joinqueue "); + + d.put("noperm", "&cYou do not have permission to do this!"); + + d.put("format.time.mins", "{m}m {s}s"); + d.put("format.time.secs", "{s} seconds"); + + d.put("list.format", "&b{SERVER} &7({COUNT}): {LIST}"); + d.put("list.playerlist", "&9{NAME}&7, "); + d.put("list.total", "&7Total players in queues: &f{TOTAL}"); + d.put("list.none", "&7None"); + + d.put("spigot.actionbar.online", "&7You are queued for &f{SERVER}&7. You are in position &f{POS}&7 of &f{LEN}&7. Estimated time: {TIME}"); + d.put("spigot.actionbar.offline", "&7You are queued for &f{SERVER}&7. &7You are in position &f{POS}&7 of &f{LEN}&7."); + + d.put("send", "&aAdded &f{PLAYER}&a to the queue for &f{SERVER}"); + d.put("remove", "&aRemoved &f{PLAYER} from all queues they were in."); + + d.put("placeholders.queued.none", "None"); + d.put("placeholders.position.none", "None"); + + 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}"); + d.put("commands.leave.no-queues", "&cYou are not queued!"); + + d.put("commands.pause.more-args", "&cUsage: /ajqueue pause [on/off]"); + d.put("commands.pause.no-server", "&cThat server does not exist!"); + d.put("commands.pause.success", "&aThe queue for &f{SERVER} &ais now {PAUSED}"); + d.put("commands.pause.paused.true", "&epaused"); + d.put("commands.pause.paused.false", "&aun-paused"); + + d.put("commands.send.player-not-found", "&cThat player could not be found. Make sure they are online!"); + + d.put("commands.listqueues.header", "&9Queues:"); + d.put("commands.listqueues.format", "{COLOR}{NAME}&7: {COUNT} queued"); + + d.put("max-tries-reached", "&cUnable to connect to {SERVER}. Max retries reached."); + d.put("auto-queued", "&aYou've been auto-queued for {SERVER} because you were kicked."); + + messages = new Messages(dataFolder, logger, d); + } } 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 1298bf2..283d27d 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java @@ -115,7 +115,7 @@ public class QueueManagerImpl implements QueueManager { )); } - main.getPlatformMethods().sendJoinQueueChannelMessages(); + main.getPlatformMethods().sendJoinQueueChannelMessages(server, queuePlayer); return true; } diff --git a/common/src/main/java/us/ajg0702/queue/logic/FreeAliasManager.java b/common/src/main/java/us/ajg0702/queue/logic/FreeAliasManager.java new file mode 100644 index 0000000..3ef538e --- /dev/null +++ b/common/src/main/java/us/ajg0702/queue/logic/FreeAliasManager.java @@ -0,0 +1,21 @@ +package us.ajg0702.queue.logic; + +import us.ajg0702.queue.api.AliasManager; +import us.ajg0702.utils.common.Config; + +public class FreeAliasManager implements AliasManager { + Config config; + public FreeAliasManager(Config config) { + this.config = config; + } + + @Override + public String getAlias(String server) { + return server; + } + + @Override + public String getServer(String alias) { + return alias; + } +} diff --git a/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java b/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java new file mode 100644 index 0000000..247b742 --- /dev/null +++ b/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java @@ -0,0 +1,18 @@ +package us.ajg0702.queue.logic; + +import us.ajg0702.queue.api.Logic; +import us.ajg0702.queue.api.players.AdaptedPlayer; +import us.ajg0702.queue.api.players.QueuePlayer; +import us.ajg0702.queue.api.queues.QueueServer; + +public class FreeLogic implements Logic { + @Override + public boolean isPremium() { + return false; + } + + @Override + public QueuePlayer priorityLogic(QueueServer server, AdaptedPlayer player) { + return null; + } +} diff --git a/common/src/main/java/us/ajg0702/queue/logic/LogicGetter.java b/common/src/main/java/us/ajg0702/queue/logic/LogicGetter.java new file mode 100644 index 0000000..9bf6f83 --- /dev/null +++ b/common/src/main/java/us/ajg0702/queue/logic/LogicGetter.java @@ -0,0 +1,18 @@ +package us.ajg0702.queue.logic; + +import us.ajg0702.queue.api.AliasManager; +import us.ajg0702.queue.api.Logic; +import us.ajg0702.utils.common.Config; + +public class LogicGetter implements us.ajg0702.queue.api.LogicGetter { + + @Override + public Logic constructLogic() { + return new FreeLogic(); + } + + @Override + public AliasManager constructAliasManager(Config config) { + return new FreeAliasManager(config); + } +} diff --git a/platforms/velocity/build.gradle.kts b/platforms/velocity/build.gradle.kts index db7d679..8d081fd 100644 --- a/platforms/velocity/build.gradle.kts +++ b/platforms/velocity/build.gradle.kts @@ -14,12 +14,13 @@ 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.5") + compileOnly("us.ajg0702:ajUtils:1.1.6") compileOnly("com.velocitypowered:velocity-api:3.0.0") annotationProcessor("com.velocitypowered:velocity-api:3.0.0") implementation(project(":common")) + implementation(project(":api")) } diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/PlatformMethodImpl.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/PlatformMethodImpl.java new file mode 100644 index 0000000..86f20ae --- /dev/null +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/PlatformMethodImpl.java @@ -0,0 +1,32 @@ +package us.ajg0702.queue.platforms.velocity; + +import com.velocitypowered.api.proxy.ProxyServer; +import us.ajg0702.queue.api.PlatformMethods; +import us.ajg0702.queue.api.players.AdaptedPlayer; +import us.ajg0702.queue.api.players.QueuePlayer; +import us.ajg0702.queue.api.queues.QueueServer; + +import java.util.logging.Logger; + +public class PlatformMethodImpl implements PlatformMethods { + + ProxyServer proxyServer; + Logger logger; + + public PlatformMethodImpl(ProxyServer proxyServer, Logger logger) { + this.proxyServer = proxyServer; + this.logger = logger; + } + + @Override + public void sendJoinQueueChannelMessages(QueueServer queueServer, QueuePlayer queuePlayer) { + AdaptedPlayer player = queuePlayer.getPlayer(); + if(player == null) return; + + } + + @Override + public void sendPluginMessage(AdaptedPlayer player, String channel, String... data) { + + } +} diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/ServerBuilderImpl.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/ServerBuilderImpl.java new file mode 100644 index 0000000..8a0a4a2 --- /dev/null +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/ServerBuilderImpl.java @@ -0,0 +1,34 @@ +package us.ajg0702.queue.platforms.velocity; + +import com.velocitypowered.api.proxy.ProxyServer; +import com.velocitypowered.api.proxy.server.RegisteredServer; +import us.ajg0702.queue.api.ServerBuilder; +import us.ajg0702.queue.api.queues.QueueServer; +import us.ajg0702.queue.api.server.AdaptedServer; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class ServerBuilderImpl implements ServerBuilder { + + private final ProxyServer proxyServer; + public ServerBuilderImpl(ProxyServer proxyServer) { + this.proxyServer = proxyServer; + } + + @Override + public List getServers() { + List result = new ArrayList<>(); + Collection servers = proxyServer.getAllServers(); + + + + return result; + } + + @Override + public QueueServer buildGroup(String name, List servers) { + return null; + } +} diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityQueue.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityQueue.java index 8b4e502..1349d40 100644 --- a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityQueue.java +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityQueue.java @@ -1,8 +1,48 @@ package us.ajg0702.queue.platforms.velocity; +import com.google.inject.Inject; +import com.velocitypowered.api.event.Subscribe; +import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; import com.velocitypowered.api.plugin.Plugin; +import com.velocitypowered.api.proxy.ProxyServer; +import us.ajg0702.queue.common.QueueMain; + +import java.io.File; +import java.nio.file.Path; +import java.util.logging.Logger; + +@Plugin( + id = "ajqueue", + name = "ajQueue", + version = "@VERSION@", + url = "https://ajg0702.us", + description = "Queue for servers", + authors = {"ajgeiss0702"} +) -@Plugin(id = "ajqueue", name = "ajQueue", version = "@VERSION@") public class VelocityQueue { + ProxyServer proxyServer; + Logger logger; + QueueMain main; + + File dataFolder; + + @Inject + public VelocityQueue(ProxyServer proxyServer, Logger logger, Path dataFolder) { + this.proxyServer = proxyServer; + this.logger = logger; + + this.dataFolder = dataFolder.toFile(); + } + + @Subscribe + public void onProxyInit(ProxyInitializeEvent e) { + main = new QueueMain( + logger, + new ServerBuilderImpl(proxyServer), + new PlatformMethodImpl(proxyServer, logger), + dataFolder + ); + } } 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 new file mode 100644 index 0000000..9e21eda --- /dev/null +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/players/VelocityPlayer.java @@ -0,0 +1,68 @@ +package us.ajg0702.queue.platforms.velocity.players; + +import com.velocitypowered.api.proxy.Player; +import com.velocitypowered.api.proxy.ServerConnection; +import com.velocitypowered.api.proxy.server.RegisteredServer; +import net.kyori.adventure.text.Component; +import us.ajg0702.queue.api.players.AdaptedPlayer; +import us.ajg0702.queue.api.server.AdaptedServer; + +import java.util.Optional; +import java.util.UUID; + +public class VelocityPlayer implements AdaptedPlayer { + + Player handle; + + public VelocityPlayer(Player player) { + handle = player; + } + + @Override + public boolean isConnected() { + return handle.isActive(); + } + + @Override + public void sendMessage(Component message) { + handle.sendMessage(message); + } + + @Override + public void sendActionBar(Component message) { + handle.sendActionBar(message); + } + + @Override + public void sendMessage(String message) { + handle.sendMessage(Component.text().content(message)); + } + + @Override + public boolean hasPermission(String permission) { + return handle.hasPermission(permission); + } + + @Override + public String getServerName() { + Optional serverConnection = handle.getCurrentServer(); + if(!serverConnection.isPresent()) return "none"; + ServerConnection connection = serverConnection.get(); + return connection.getServerInfo().getName(); + } + + @Override + public UUID getUniqueId() { + return handle.getUniqueId(); + } + + @Override + public void connect(AdaptedServer server) { + handle.createConnectionRequest((RegisteredServer) server.getHandle()).connect(); + } + + @Override + public Player getHandle() { + return handle; + } +} diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/test.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/test.java deleted file mode 100644 index 0d2cd51..0000000 --- a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/test.java +++ /dev/null @@ -1,5 +0,0 @@ -package us.ajg0702.queue.platforms.velocity; - -public class test { - public static int i = 0; -}