From a88a14234896a4a6c54085f5e31d299ae13d6763 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Tue, 27 Jul 2021 18:41:55 -0700 Subject: [PATCH] progress --- .../queue/api/players/QueuePlayer.java | 6 ++ .../ajg0702/queue/api/util/QueueLogger.java | 9 +++ build.gradle.kts | 24 +----- common/build.gradle.kts | 4 +- .../us/ajg0702/queue/common/QueueMain.java | 34 +++++--- .../queue/common/QueueManagerImpl.java | 48 ++++++++++- .../queue/common/players/QueuePlayerImpl.java | 11 ++- .../queue/common/queues/QueueServerImpl.java | 4 +- .../queue/common/utils/LogConverter.java | 32 ++++++++ .../us/ajg0702/queue/logic/FreeLogic.java | 2 +- ...{LogicGetter.java => LogicGetterImpl.java} | 2 +- .../platforms/velocity/VelocityLogger.java | 39 +++++++++ .../platforms/velocity/VelocityMethods.java | 19 ++--- .../platforms/velocity/VelocityQueue.java | 15 ++-- premium/build.gradle.kts | 50 ++++++++++++ .../ajg0702/queue/logic/LogicGetterImpl.java | 18 +++++ .../queue/logic/PremiumAliasManager.java | 37 +++++++++ .../us/ajg0702/queue/logic/PremiumLogic.java | 80 +++++++++++++++++++ .../logic/permissions/PermissionGetter.java | 20 +++++ settings.gradle.kts | 3 +- .../us/ajg0702/queue/spigot/Commands.java | 4 +- .../us/ajg0702/queue/spigot/Placeholders.java | 4 +- .../spigot/{Main.java => SpigotMain.java} | 25 +----- spigot/src/main/resources/plugin.yml | 2 +- 24 files changed, 404 insertions(+), 88 deletions(-) create mode 100644 api/src/main/java/us/ajg0702/queue/api/util/QueueLogger.java create mode 100644 common/src/main/java/us/ajg0702/queue/common/utils/LogConverter.java rename common/src/main/java/us/ajg0702/queue/logic/{LogicGetter.java => LogicGetterImpl.java} (83%) create mode 100644 platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityLogger.java create mode 100644 premium/build.gradle.kts create mode 100644 premium/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java create mode 100644 premium/src/main/java/us/ajg0702/queue/logic/PremiumAliasManager.java create mode 100644 premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java create mode 100644 premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetter.java rename spigot/src/main/java/us/ajg0702/queue/spigot/{Main.java => SpigotMain.java} (86%) diff --git a/api/src/main/java/us/ajg0702/queue/api/players/QueuePlayer.java b/api/src/main/java/us/ajg0702/queue/api/players/QueuePlayer.java index de3e4c4..ed5d6e9 100644 --- a/api/src/main/java/us/ajg0702/queue/api/players/QueuePlayer.java +++ b/api/src/main/java/us/ajg0702/queue/api/players/QueuePlayer.java @@ -62,4 +62,10 @@ public interface QueuePlayer { * @return The number of miliseconds since this player was online */ long getTimeSinceOnline(); + + /** + * Gets the max number of seconds this player is allowed to be offline before getting removed from the queue. + * @return + */ + int getMaxOfflineTime(); } diff --git a/api/src/main/java/us/ajg0702/queue/api/util/QueueLogger.java b/api/src/main/java/us/ajg0702/queue/api/util/QueueLogger.java new file mode 100644 index 0000000..412b468 --- /dev/null +++ b/api/src/main/java/us/ajg0702/queue/api/util/QueueLogger.java @@ -0,0 +1,9 @@ +package us.ajg0702.queue.api.util; + +public interface QueueLogger { + void warn(String message); + void warning(String message); + void info(String message); + void error(String message); + void severe(String message); +} diff --git a/build.gradle.kts b/build.gradle.kts index 2233619..7b470d8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,36 +22,14 @@ allprojects { } -repositories { - mavenCentral() - mavenLocal() - - maven { url = uri("https://jitpack.io") } - maven { url = uri("https://gitlab.com/api/v4/projects/19978391/packages/maven") } - maven { url = uri("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") } - maven { url = uri("https://repo.extendedclip.com/content/repositories/placeholderapi/") } - maven { url = uri("https://repo.codemc.org/repository/maven-public") } - maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots") } - maven { url = uri("https://repo.codemc.io/repository/nms/") } - maven { url = uri("https://repo.ajg0702.us") } -} dependencies { testImplementation("junit:junit:4.12") + implementation(project(":free")) } - - -tasks.shadowJar { - relocate("us.ajg0702.utils", "us.ajg0702.queue.utils") - relocate("org.bstats", "us.ajg0702.bstats") - relocate("net.kyori", "us.ajg0702.queue.kyori") - relocate("org.spongepowered.configurate", "us.ajg0702.queue.configurate") - archiveFileName.set("${archiveBaseName.get()}-${archiveVersion.get()}.${archiveExtension.get()}") -} - publishing { publications { create("mavenJava") { diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 43b4b32..e62ad3b 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -12,10 +12,12 @@ repositories { dependencies { compileOnly("net.kyori:adventure-api:4.8.1") + 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.6") - compileOnly("net.kyori:adventure-text-serializer-plain:4.0.0-SNAPSHOT") + compileOnly("org.slf4j:slf4j-log4j12:1.7.29") compileOnly("org.spongepowered:configurate-yaml:4.0.0") 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 4735f45..8b860b9 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueMain.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueMain.java @@ -3,7 +3,9 @@ package us.ajg0702.queue.common; import org.spongepowered.configurate.ConfigurateException; import us.ajg0702.queue.api.*; import us.ajg0702.queue.api.server.ServerBuilder; -import us.ajg0702.queue.logic.LogicGetter; +import us.ajg0702.queue.api.util.QueueLogger; +import us.ajg0702.queue.common.utils.LogConverter; +import us.ajg0702.queue.logic.LogicGetterImpl; import us.ajg0702.utils.common.Config; import us.ajg0702.utils.common.Messages; @@ -12,10 +14,13 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.concurrent.*; -import java.util.logging.Logger; public class QueueMain { + private static QueueMain instance; + public static QueueMain getInstance() { + return instance; + } private double timeBetweenPlayers; public double getTimeBetweenPlayers() { @@ -54,8 +59,8 @@ public class QueueMain { return platformMethods; } - private final Logger logger; - public Logger getLogger() { + private final QueueLogger logger; + public QueueLogger getLogger() { return logger; } @@ -104,7 +109,18 @@ public class QueueMain { private final File dataFolder; - public QueueMain(Logger logger, PlatformMethods platformMethods, File dataFolder) { + public QueueMain(QueueLogger logger, PlatformMethods platformMethods, File dataFolder) { + + if(instance != null) { + try { + throw new Exception("ajQueue QueueMain is being initialized when there is already one! Still initializing it, but this can cause issues."); + } catch(Exception e) { + e.printStackTrace(); + } + } + instance = this; + + this.logger = logger; this.platformMethods = platformMethods; this.dataFolder = dataFolder; @@ -112,7 +128,7 @@ public class QueueMain { constructMessages(); try { - config = new Config(dataFolder, logger); + config = new Config(dataFolder, new LogConverter(logger)); } catch (ConfigurateException e) { logger.warning("Unable to load config:"); e.printStackTrace(); @@ -123,8 +139,8 @@ public class QueueMain { queueManager = new QueueManagerImpl(this); - logic = new LogicGetter().constructLogic(); - aliasManager = new LogicGetter().constructAliasManager(config); + logic = new LogicGetterImpl().constructLogic(); + aliasManager = new LogicGetterImpl().constructAliasManager(config); taskManager.rescheduleTasks(); @@ -196,6 +212,6 @@ public class QueueMain { 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); + messages = new Messages(dataFolder, new LogConverter(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 a315f55..350b604 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java @@ -8,6 +8,7 @@ import us.ajg0702.queue.api.queues.QueueServer; import us.ajg0702.queue.api.server.AdaptedServer; import us.ajg0702.queue.api.server.ServerBuilder; import us.ajg0702.queue.common.players.QueuePlayerImpl; +import us.ajg0702.queue.common.queues.QueueServerImpl; import us.ajg0702.utils.bungee.BungeeUtils; import us.ajg0702.utils.common.Messages; import us.ajg0702.utils.common.TimeUtils; @@ -31,7 +32,39 @@ public class QueueManagerImpl implements QueueManager { serverBuilderFuture.thenRunAsync(() -> { try { servers = serverBuilderFuture.get().buildServers(); - // TODO: groups + List groupsRaw = main.getConfig().getStringList("server-groups"); + for(String groupRaw : groupsRaw) { + if(groupRaw.isEmpty()) { + main.getLogger().warning("Empty group string! If you dont want server groups, set server-groups like this: server-groups: []"); + continue; + } + + String groupName = groupRaw.split(":")[0]; + String[] serversRaw = groupRaw.split(":")[1].split(","); + + if(main.getServerBuilder().getServer(groupName) != null) { + main.getLogger().warning("The name of a group ('"+groupName+"') cannot be the same as the name of a server!"); + continue; + } + + List groupServers = new ArrayList<>(); + + for(String serverRaw : serversRaw) { + AdaptedServer si = main.getServerBuilder().getServer(serverRaw); + if(si == null) { + main.getLogger().warning("Could not find server named '"+serverRaw+"' in servergroup '"+groupName+"'!"); + continue; + } + groupServers.add(si); + } + + if(groupServers.size() == 0) { + main.getLogger().warning("Server group '"+groupName+"' has no servers! Ignoring it."); + continue; + } + + servers.add(new QueueServerImpl(groupName, main, groupServers)); + } } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } @@ -81,7 +114,8 @@ public class QueueManagerImpl implements QueueManager { } else { int priority = player.hasPermission("ajqueue.priority") || player.hasPermission("ajqueue.serverpriority."+server.getName()) ? 1 : 0; - queuePlayer = new QueuePlayerImpl(player, server, priority); + int maxOfflineTime = player.hasPermission("ajqueue.stayqueued") ? 60 : 0; + queuePlayer = new QueuePlayerImpl(player, server, priority, maxOfflineTime); if( priority == 1 && server.getQueue().size() > 0 @@ -180,7 +214,9 @@ public class QueueManagerImpl implements QueueManager { @Override public String getQueuedName(AdaptedPlayer player) { - return getSingleServer(player).getName(); + QueueServer server = getSingleServer(player); + if(server == null) return main.getMessages().getString("placeholders.queued.none"); + return server.getName(); } @Override @@ -367,6 +403,12 @@ public class QueueManagerImpl implements QueueManager { } for(QueueServer server : sendingServers) { + for(QueuePlayer queuePlayer : server.getQueue()) { + if(queuePlayer.getPlayer() != null) continue; + if(main.getLogic().playerDisconnectedTooLong(queuePlayer)) { + server.removePlayer(queuePlayer); + } + } if(!server.isOnline()) continue; if(server.getQueue().size() == 0) continue; diff --git a/common/src/main/java/us/ajg0702/queue/common/players/QueuePlayerImpl.java b/common/src/main/java/us/ajg0702/queue/common/players/QueuePlayerImpl.java index 756b356..14385f9 100644 --- a/common/src/main/java/us/ajg0702/queue/common/players/QueuePlayerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/players/QueuePlayerImpl.java @@ -18,7 +18,9 @@ public class QueuePlayerImpl implements QueuePlayer { private final UUID uuid; private final String name; - public QueuePlayerImpl(AdaptedPlayer player, QueueServer server, int highestPriority) { + private final int maxOfflineTime; + + public QueuePlayerImpl(AdaptedPlayer player, QueueServer server, int highestPriority, int maxOfflineTime) { this.player = player; this.server = server; @@ -26,6 +28,8 @@ public class QueuePlayerImpl implements QueuePlayer { uuid = player.getUniqueId(); name = player.getName(); + + this.maxOfflineTime = maxOfflineTime; } @Override @@ -84,6 +88,11 @@ public class QueuePlayerImpl implements QueuePlayer { return System.currentTimeMillis()-leaveTime; } + @Override + public int getMaxOfflineTime() { + return maxOfflineTime; + } + private long leaveTime = 0; public void setLeaveTime(long leaveTime) { 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 c457c2d..f352ff8 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 @@ -244,12 +244,12 @@ public class QueueServerImpl implements QueueServer { } @Override - public synchronized void addPlayer(QueuePlayer player) { + public void addPlayer(QueuePlayer player) { addPlayer(player, -1); } @Override - public void addPlayer(QueuePlayer player, int position) { + public synchronized void addPlayer(QueuePlayer player, int position) { if(!player.getQueueServer().equals(this) || queue.contains(player)) return; if(position > 0) { queue.add(position, player); diff --git a/common/src/main/java/us/ajg0702/queue/common/utils/LogConverter.java b/common/src/main/java/us/ajg0702/queue/common/utils/LogConverter.java new file mode 100644 index 0000000..3e9449d --- /dev/null +++ b/common/src/main/java/us/ajg0702/queue/common/utils/LogConverter.java @@ -0,0 +1,32 @@ +package us.ajg0702.queue.common.utils; + +import org.jetbrains.annotations.NotNull; +import us.ajg0702.queue.api.util.QueueLogger; + +import java.util.logging.LogRecord; +import java.util.logging.Logger; + +public class LogConverter extends Logger { + private final QueueLogger logger; + public LogConverter(QueueLogger logger) { + super("ajqueue-convert", null); + this.logger = logger; + } + + @Override + public void log(@NotNull LogRecord logRecord) { + String message = logRecord.getMessage(); + switch(logRecord.getLevel().getName()) { + case "OFF": + break; + case "SEVERE": + logger.error(message); + case "WARNING": + logger.warn(message); + case "INFO": + logger.info(message); + default: + logger.info(message); + } + } +} 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 bf73f3b..948da26 100644 --- a/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java +++ b/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java @@ -18,6 +18,6 @@ public class FreeLogic implements Logic { @Override public boolean playerDisconnectedTooLong(QueuePlayer player) { - return true; + return 60000L < player.getTimeSinceOnline(); } } diff --git a/common/src/main/java/us/ajg0702/queue/logic/LogicGetter.java b/common/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java similarity index 83% rename from common/src/main/java/us/ajg0702/queue/logic/LogicGetter.java rename to common/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java index 9bf6f83..611dbff 100644 --- a/common/src/main/java/us/ajg0702/queue/logic/LogicGetter.java +++ b/common/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java @@ -4,7 +4,7 @@ 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 { +public class LogicGetterImpl implements us.ajg0702.queue.api.LogicGetter { @Override public Logic constructLogic() { diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityLogger.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityLogger.java new file mode 100644 index 0000000..ce3706d --- /dev/null +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityLogger.java @@ -0,0 +1,39 @@ +package us.ajg0702.queue.platforms.velocity; + + +import org.slf4j.Logger; +import us.ajg0702.queue.api.util.QueueLogger; + +public class VelocityLogger implements QueueLogger { + + private final Logger logger; + + protected VelocityLogger(Logger logger) { + this.logger = logger; + } + + @Override + public void warn(String message) { + logger.warn(message); + } + + @Override + public void warning(String message) { + logger.warn(message); + } + + @Override + public void info(String message) { + logger.info(message); + } + + @Override + public void error(String message) { + logger.error(message); + } + + @Override + public void severe(String message) { + logger.error(message); + } +} diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityMethods.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityMethods.java index bf4bc7e..784f943 100644 --- a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityMethods.java +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityMethods.java @@ -5,16 +5,15 @@ import com.google.common.io.ByteStreams; import com.velocitypowered.api.plugin.PluginContainer; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ProxyServer; -import com.velocitypowered.api.proxy.messages.ChannelIdentifier; +import com.velocitypowered.api.proxy.ServerConnection; import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier; import com.velocitypowered.api.proxy.server.RegisteredServer; -import net.kyori.adventure.text.Component; + import us.ajg0702.queue.api.PlatformMethods; import us.ajg0702.queue.api.commands.IBaseCommand; import us.ajg0702.queue.api.commands.ICommandSender; 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.commands.commands.PlayerSender; import us.ajg0702.queue.platforms.velocity.players.VelocityPlayer; @@ -22,15 +21,14 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Optional; -import java.util.logging.Logger; public class VelocityMethods implements PlatformMethods { final ProxyServer proxyServer; - final Logger logger; + final QueueLogger logger; final VelocityQueue plugin; - public VelocityMethods(VelocityQueue plugin, ProxyServer proxyServer, Logger logger) { + public VelocityMethods(VelocityQueue plugin, ProxyServer proxyServer, QueueLogger logger) { this.proxyServer = proxyServer; this.logger = logger; this.plugin = plugin; @@ -46,8 +44,11 @@ public class VelocityMethods implements PlatformMethods { for(String s : data) { out.writeUTF( s ); } - - velocityPlayer.sendPluginMessage(MinecraftChannelIdentifier.from("ajqueue:tospigot"), out.toByteArray()); + Optional server = velocityPlayer.getCurrentServer(); + if(!server.isPresent()) { + throw new IllegalStateException("No server to send data to"); + } + server.get().sendPluginMessage(MinecraftChannelIdentifier.from("ajqueue:tospigot"), out.toByteArray()); } @Override 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 dcba9d3..3db804e 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 @@ -13,7 +13,6 @@ import com.velocitypowered.api.plugin.annotation.DataDirectory; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ProxyServer; import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier; -import net.kyori.adventure.text.Component; import us.ajg0702.queue.api.commands.IBaseCommand; import us.ajg0702.queue.commands.BaseCommand; import us.ajg0702.queue.commands.commands.leavequeue.LeaveCommand; @@ -29,7 +28,8 @@ import java.io.File; import java.nio.file.Path; import java.util.Arrays; import java.util.List; -import java.util.logging.Logger; + +import org.slf4j.Logger; @Plugin( id = "ajqueue", @@ -42,7 +42,7 @@ import java.util.logging.Logger; public class VelocityQueue { final ProxyServer proxyServer; - final Logger logger; + final VelocityLogger logger; QueueMain main; @@ -51,7 +51,7 @@ public class VelocityQueue { @Inject public VelocityQueue(ProxyServer proxyServer, Logger logger, @DataDirectory Path dataFolder) { this.proxyServer = proxyServer; - this.logger = logger; + this.logger = new VelocityLogger(logger); this.dataFolder = dataFolder.toFile(); } @@ -104,14 +104,9 @@ public class VelocityQueue { System.out.println("Skipping message: "+e.getIdentifier().getId()); return; } - if(!e.getIdentifier().getId().equals("ajqueue:toproxy")) { - System.out.println("Skipping message: "+e.getIdentifier().getId()); - return; - } + if(!e.getIdentifier().getId().equals("ajqueue:toproxy")) return; e.setResult(PluginMessageEvent.ForwardResult.handled()); - System.out.println("Processing message: "+e.getIdentifier().getId()); - if(!(e.getTarget() instanceof Player)) return; main.getEventHandler().handleMessage(new VelocityPlayer((Player) e.getTarget()), e.getData()); diff --git a/premium/build.gradle.kts b/premium/build.gradle.kts new file mode 100644 index 0000000..59952ae --- /dev/null +++ b/premium/build.gradle.kts @@ -0,0 +1,50 @@ +plugins { + `java-library` + id("com.github.johnrengelman.shadow") + `maven-publish` +} + +group = "us.ajg0702.queue" + +repositories { + mavenCentral() + maven { url = uri("https://repo.ajg0702.us") } +} + +dependencies { + implementation(project(":free")) + + compileOnly(project(":api")) + compileOnly(project(":common")) + + compileOnly("com.google.guava:guava:30.1.1-jre") + + compileOnly("us.ajg0702:ajUtils:1.1.6") + + compileOnly("net.kyori:adventure-api:4.8.1") +} + +publishing { + publications { + create("mavenJava") { + artifact(tasks["jar"]) + } + } + + repositories { + + val mavenUrl = "https://repo.ajg0702.us/releases" + + if(!System.getenv("REPO_TOKEN").isNullOrEmpty()) { + maven { + url = uri(mavenUrl) + name = "ajRepo" + + credentials { + username = "plugins" + password = System.getenv("REPO_TOKEN") + } + } + } + } +} \ No newline at end of file diff --git a/premium/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java b/premium/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java new file mode 100644 index 0000000..2bb3814 --- /dev/null +++ b/premium/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.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.queue.api.LogicGetter; +import us.ajg0702.utils.common.Config; + +public class LogicGetterImpl implements LogicGetter { + @Override + public Logic constructLogic() { + return new PremiumLogic(); + } + + @Override + public AliasManager constructAliasManager(Config config) { + return new PremiumAliasManager(config); + } +} diff --git a/premium/src/main/java/us/ajg0702/queue/logic/PremiumAliasManager.java b/premium/src/main/java/us/ajg0702/queue/logic/PremiumAliasManager.java new file mode 100644 index 0000000..324de46 --- /dev/null +++ b/premium/src/main/java/us/ajg0702/queue/logic/PremiumAliasManager.java @@ -0,0 +1,37 @@ +package us.ajg0702.queue.logic; + +import us.ajg0702.queue.api.AliasManager; +import us.ajg0702.utils.common.Config; + +import java.util.List; + +public class PremiumAliasManager implements AliasManager { + + private final Config config; + + protected PremiumAliasManager(Config config) { + this.config = config; + } + + @Override + public String getAlias(String server) { + List aliasesraw = config.getStringList("server-aliases"); + for(String aliasraw : aliasesraw) { + String realname = aliasraw.split(":")[0]; + if(!realname.equalsIgnoreCase(server)) continue; + return aliasraw.split(":")[1]; + } + return server; + } + + @Override + public String getServer(String alias) { + List aliasesraw = config.getStringList("server-aliases"); + for(String aliasraw : aliasesraw) { + String salias = aliasraw.split(":")[1]; + if(!alias.equalsIgnoreCase(salias)) continue; + return aliasraw.split(":")[0]; + } + return alias; + } +} diff --git a/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java b/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java new file mode 100644 index 0000000..cd6df55 --- /dev/null +++ b/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java @@ -0,0 +1,80 @@ +package us.ajg0702.queue.logic; + +import com.google.common.collect.ImmutableList; +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; +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; + +public class PremiumLogic implements Logic { + @Override + public boolean isPremium() { + return true; + } + + @Override + public QueuePlayer priorityLogic(QueueServer server, AdaptedPlayer player) { + int maxOfflineTime = PermissionGetter.getMaxOfflineTime(player); + + QueueMain main = QueueMain.getInstance(); + + if(player.hasPermission("ajqueue.bypass") || player.hasPermission("ajqueue.serverbypass."+server.getName())) { + QueuePlayer queuePlayer = new QueuePlayerImpl(player, server, Integer.MAX_VALUE, maxOfflineTime); + server.addPlayer(queuePlayer, 0); + main.getQueueManager().sendPlayers(server); + return queuePlayer; + } + + int priority = PermissionGetter.getPriority(player); + int serverPriority = PermissionGetter.getServerPriotity(server.getName(), player); + + int highestPriority = Math.max(priority, serverPriority); + + QueuePlayer queuePlayer = new QueuePlayerImpl(player, server, highestPriority, maxOfflineTime); + + QueueLogger logger = main.getLogger(); + boolean debug = main.getConfig().getBoolean("priority-queue-debug"); + + if(debug) { + logger.info("[priority] "+player.getName()+" highestPriority: "+highestPriority); + logger.info("[priority] "+player.getName()+" priority: "+priority); + logger.info("[priority] "+player.getName()+" serverPriority: "+serverPriority); + } + + if(highestPriority <= 0) { + if(debug) { + logger.info("[priority] "+player.getName()+" No priority" ); + } + server.addPlayer(queuePlayer); + return queuePlayer; + } + + ImmutableList list = server.getQueue(); + + for(int i = 0; i < list.size(); i++) { + QueuePlayer pl = list.get(i); + if(pl.getPriority() < highestPriority) { + if(debug) { + logger.info("[priority] "+player.getName()+" Adding to: "+i); + } + server.addPlayer(queuePlayer, i); + return queuePlayer; + } + } + + if(debug) { + logger.info("[priority] "+player.getName()+" Cant go infront of anyone" ); + } + server.addPlayer(queuePlayer); + return queuePlayer; + } + + @Override + public boolean playerDisconnectedTooLong(QueuePlayer player) { + return player.getTimeSinceOnline() > player.getMaxOfflineTime(); + } +} diff --git a/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetter.java b/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetter.java new file mode 100644 index 0000000..4b5140b --- /dev/null +++ b/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetter.java @@ -0,0 +1,20 @@ +package us.ajg0702.queue.logic.permissions; + +import us.ajg0702.queue.api.players.AdaptedPlayer; + +public class PermissionGetter { + + //TODO: all of this + + public static int getMaxOfflineTime(AdaptedPlayer player) { + return -1; + } + + public static int getPriority(AdaptedPlayer player) { + return -1; + } + + public static int getServerPriotity(String server, AdaptedPlayer player) { + return -1; + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 0b2c159..1c312a2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,4 +7,5 @@ include(":spigot") include(":platforms:velocity") -include(":free") \ No newline at end of file +include(":free") +include(":premium") \ No newline at end of file diff --git a/spigot/src/main/java/us/ajg0702/queue/spigot/Commands.java b/spigot/src/main/java/us/ajg0702/queue/spigot/Commands.java index 356fd41..30f0db3 100644 --- a/spigot/src/main/java/us/ajg0702/queue/spigot/Commands.java +++ b/spigot/src/main/java/us/ajg0702/queue/spigot/Commands.java @@ -9,8 +9,8 @@ import org.bukkit.entity.Player; public class Commands implements CommandExecutor { - Main pl; - public Commands(Main pl) { + SpigotMain pl; + public Commands(SpigotMain pl) { this.pl = pl; } 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 b7a21ff..cecb7a4 100644 --- a/spigot/src/main/java/us/ajg0702/queue/spigot/Placeholders.java +++ b/spigot/src/main/java/us/ajg0702/queue/spigot/Placeholders.java @@ -14,7 +14,7 @@ import java.util.Iterator; */ public class Placeholders extends PlaceholderExpansion { - private Main plugin; + private SpigotMain plugin; /** * Since we register the expansion inside our own plugin, we @@ -24,7 +24,7 @@ public class Placeholders extends PlaceholderExpansion { * @param plugin * The instance of our plugin. */ - public Placeholders(Main plugin){ + public Placeholders(SpigotMain plugin){ this.plugin = plugin; } diff --git a/spigot/src/main/java/us/ajg0702/queue/spigot/Main.java b/spigot/src/main/java/us/ajg0702/queue/spigot/SpigotMain.java similarity index 86% rename from spigot/src/main/java/us/ajg0702/queue/spigot/Main.java rename to spigot/src/main/java/us/ajg0702/queue/spigot/SpigotMain.java index 9f41511..23d3284 100644 --- a/spigot/src/main/java/us/ajg0702/queue/spigot/Main.java +++ b/spigot/src/main/java/us/ajg0702/queue/spigot/SpigotMain.java @@ -15,7 +15,7 @@ import us.ajg0702.queue.spigot.utils.VersionSupport; import java.util.HashMap; -public class Main extends JavaPlugin implements PluginMessageListener,Listener { +public class SpigotMain extends JavaPlugin implements PluginMessageListener,Listener { boolean papi = false; Placeholders placeholders; @@ -64,30 +64,12 @@ public class Main extends JavaPlugin implements PluginMessageListener,Listener { @Override public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] message) { - if (!channel.equals("ajqueue:tospigot")) { - getLogger().info("Skipping message: "+channel); - return; - } - getLogger().info("Processing message: "+channel); + if (!channel.equals("ajqueue:tospigot")) return; ByteArrayDataInput in = ByteStreams.newDataInput(message); String subchannel = in.readUTF(); - - if(subchannel.equals("actionbar")) { - String playername = in.readUTF(); - Player p = Bukkit.getPlayer(playername); - if(p == null) return; - - String data = in.readUTF(); - final String text = data.split(";time=")[0]; - //getLogger().info("recieved actionbar for "+player.getName()+": "+text); - VersionSupport.sendActionBar(p, text); - - /*QueueActionbarUpdateEvent e = new QueueActionbarUpdateEvent(p); - Bukkit.getPluginManager().callEvent(e);*/ - return; - } + if(subchannel.equals("inqueueevent")) { String playername = in.readUTF(); Player p = Bukkit.getPlayer(playername); @@ -161,7 +143,6 @@ public class Main extends JavaPlugin implements PluginMessageListener,Listener { public void sendMessage(Player player, String subchannel, String data) { - //getLogger().info("Sending message. "+subchannel+" "+data); ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF(subchannel); out.writeUTF(data); diff --git a/spigot/src/main/resources/plugin.yml b/spigot/src/main/resources/plugin.yml index 81632df..afc875e 100644 --- a/spigot/src/main/resources/plugin.yml +++ b/spigot/src/main/resources/plugin.yml @@ -1,4 +1,4 @@ -main: us.ajg0702.queue.spigot.Main +main: us.ajg0702.queue.spigot.SpigotMain version: "@VERSION@" api-version: 1.13 author: ajgeiss0702