commit 947eb195a3ec315675fc3ef22f38946ed3981528 Author: ajgeiss0702 Date: Mon May 4 15:01:31 2020 -0700 Initial commit diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..ae19729 --- /dev/null +++ b/.classpath @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..9547226 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + ajQueue + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..b9a1035 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml new file mode 100644 index 0000000..2236e9e --- /dev/null +++ b/dependency-reduced-pom.xml @@ -0,0 +1,116 @@ + + + 4.0.0 + us.ajg0702 + ajQueue + ajQueue + 1.0.7 + + + + true + src/main/resources + + + + + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + + + maven-shade-plugin + 3.1.0 + + + package + + shade + + + + + + + org.bstats + us.ajg0702.queue + + + + + + + + + bungeecord-repo + https://oss.sonatype.org/content/repositories/snapshots + + + CodeMC + https://repo.codemc.org/repository/maven-public + + + + + net.md-5 + bungeecord-api + 1.14-SNAPSHOT + provided + + + bungeecord-chat + net.md-5 + + + bungeecord-config + net.md-5 + + + bungeecord-event + net.md-5 + + + bungeecord-protocol + net.md-5 + + + guava + com.google.guava + + + + + net.md-5 + bungeecord-api + 1.14-SNAPSHOT + javadoc + provided + + + bungeecord-chat + net.md-5 + + + bungeecord-config + net.md-5 + + + bungeecord-event + net.md-5 + + + bungeecord-protocol + net.md-5 + + + guava + com.google.guava + + + + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..63a3065 --- /dev/null +++ b/pom.xml @@ -0,0 +1,87 @@ + + 4.0.0 + us.ajg0702 + ajQueue + 1.0.7 + ajQueue + + + + bungeecord-repo + https://oss.sonatype.org/content/repositories/snapshots + + + CodeMC + https://repo.codemc.org/repository/maven-public + + + + + + net.md-5 + bungeecord-api + 1.14-SNAPSHOT + jar + provided + + + net.md-5 + bungeecord-api + 1.14-SNAPSHOT + javadoc + provided + + + org.bstats + bstats-bungeecord + 1.7 + compile + + + + + + + src/main/resources + true + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + + + org.bstats + + us.ajg0702.queue + + + + + + package + + shade + + + + + + + + \ No newline at end of file diff --git a/src/main/java/us/ajg0702/queue/Main.java b/src/main/java/us/ajg0702/queue/Main.java new file mode 100644 index 0000000..269ec99 --- /dev/null +++ b/src/main/java/us/ajg0702/queue/Main.java @@ -0,0 +1,241 @@ +package us.ajg0702.queue; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import org.bstats.bungeecord.Metrics; + +import net.md_5.bungee.api.Callback; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.ServerPing; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.PlayerDisconnectEvent; +import net.md_5.bungee.api.event.ServerSwitchEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.api.plugin.Plugin; +import net.md_5.bungee.event.EventHandler; +import us.ajg0702.queue.utils.BungeeMessages; + +public class Main extends Plugin implements Listener { + + int timeBetweenPlayers = 5; + int offlineSecs = 120; + + Metrics metrics; + + BungeeMessages msgs; + + @Override + public void onEnable() { + + msgs = BungeeMessages.getInstance(this); + + this.getProxy().getPluginManager().registerCommand(this, new MoveCommand(this)); + //this.getProxy().getPluginManager().registerCommand(this, new QueueCommand(this)); + //this.getProxy().getPluginManager().registerCommand(this, new ServerCommand(this)); + + this.getProxy().getPluginManager().registerListener(this, this); + + updateOnlineServers(); + + getProxy().getScheduler().schedule(this, new Runnable() { + public void run() { + updateOnlineServers(); + sendPlayers(); + } + }, 5, timeBetweenPlayers, TimeUnit.SECONDS); + + + metrics = new Metrics(this, 7404); + + + } + + public static BaseComponent[] formatMessage(String text) { + return TextComponent.fromLegacyText(net.md_5.bungee.api.ChatColor.translateAlternateColorCodes('&', text)); + } + + + HashMap offlineTime = new HashMap<>(); + boolean notif = false; + public void sendPlayers(String sv) { + for(String server : queues.keySet()) { + if(sv != null && !server.equalsIgnoreCase(sv)) continue; + List plys = queues.get(server); + if(plys.size() <= 0) continue; + while(!plys.get(0).isConnected()) { + plys.remove(0); + if(plys.size() <= 0) break; + } + if(plys.size() <= 0) continue; + ProxiedPlayer p = plys.get(0); + if(!servers.get(server)) { + int ot; + if(!offlineTime.containsKey(server)) { + ot = timeBetweenPlayers; + } else { + ot = offlineTime.get(server)+timeBetweenPlayers; + } + offlineTime.put(server, ot); + for(ProxiedPlayer ply : plys) { + int pos = plys.indexOf(ply)+1; + int len = plys.size(); + if(notif) { + String or = msgs.get("status.offline.restarting"); + if(ot > offlineSecs) { + or = msgs.get("status.offline.offline"); + } else { + //ply.sendMessage(formatMessage(ot + " <= "+offlineSecs)); + } + + ply.sendMessage(formatMessage( + msgs.get("status.offline.base") + .replaceAll("\\{STATUS\\}", or) + .replaceAll("\\{POS\\}", pos+"") + .replaceAll("\\{LEN\\}", len+"") + )); + } + } + if(!notif) { + notif = true; + } else { + notif = false; + } + continue; + } else { + offlineTime.put(server, 0); + ServerInfo target = ProxyServer.getInstance().getServerInfo(server); + p.connect(target); + //plys.remove(p); + } + + for(ProxiedPlayer ply : plys) { + int pos = plys.indexOf(ply)+1; + int len = plys.size(); + if(notif) { + ply.sendMessage(formatMessage( + msgs.get("status.online.base") + .replaceAll("\\{POS\\}", pos+"") + .replaceAll("\\{LEN\\}", len+"") + )); + } + } + if(!notif) { + notif = true; + } else { + notif = false; + } + } + + } + public void sendPlayers() { + sendPlayers(null); + } + + + @EventHandler + public void moveServer(ServerSwitchEvent e) { + ProxiedPlayer p = e.getPlayer(); + String queue = getPlayerInQueue(p); + if(queue != null) { + queues.get(queue).remove(p); + } + } + + @EventHandler + public void onLeave(PlayerDisconnectEvent e) { + ProxiedPlayer p = e.getPlayer(); + String queue = getPlayerInQueue(p); + if(queue != null) { + queues.get(queue).remove(p); + } + } + + + HashMap servers = new HashMap<>(); + public void updateOnlineServers() { + for(final String server : getProxy().getServers().keySet()) { + if(!servers.containsKey(server)) { + servers.put(server, false); + } + getProxy().getServers().get(server).ping(new Callback() { + + @Override + public void done(ServerPing result, Throwable error) { + servers.put(server, error == null); + } + }); + } + } + + + HashMap> queues = new HashMap<>(); + public void addToQueue(ProxiedPlayer p, String server) { + if(!servers.containsKey(server)) { + p.sendMessage(msgs.getBC("errors.server-not-exist")); + return; + } + if(!queues.containsKey(server)) { + queues.put(server, new ArrayList()); + } + if(p.getServer().getInfo().getName().equals(server)) { + p.sendMessage(msgs.getBC("errors.already-connected")); + return; + } + String currentQueued = getPlayerInQueue(p); + List list = queues.get(server); + if(list.indexOf(p) != -1) { + int pos = list.indexOf(p)+1; + int len = list.size(); + p.sendMessage(formatMessage( + msgs.get("errors.already-queued") + .replaceAll("\\{POS\\}", pos+"") + .replaceAll("\\{LEN\\}", len+"") + )); + return; + } + if(currentQueued != null) { + queues.get(currentQueued).remove(p); + p.sendMessage(msgs.getBC("status.left-last-queue")); + } + if(p.hasPermission("ajqueue.priority") && list.size() > 0) { + int i = 0; + for(ProxiedPlayer ply : list) { + if(!ply.hasPermission("ajqueue.priority")) { + list.add(i, p); + break; + } + i++; + } + } else { + list.add(p); + } + int pos = list.indexOf(p)+1; + int len = list.size(); + p.sendMessage(formatMessage( + msgs.get("status.now-in-queue") + .replaceAll("\\{POS\\}", pos+"") + .replaceAll("\\{LEN\\}", len+"") + )); + + if(list.size() == 1) { + sendPlayers(server); + } + } + + + public String getPlayerInQueue(ProxiedPlayer p) { + for(String server : queues.keySet()) { + if(queues.get(server).indexOf(p) != -1) { + return server; + } + } + return null; + } + +} diff --git a/src/main/java/us/ajg0702/queue/MoveCommand.java b/src/main/java/us/ajg0702/queue/MoveCommand.java new file mode 100644 index 0000000..ead4e81 --- /dev/null +++ b/src/main/java/us/ajg0702/queue/MoveCommand.java @@ -0,0 +1,42 @@ +package us.ajg0702.queue; + +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Command; +import us.ajg0702.queue.utils.BungeeMessages; + +public class MoveCommand extends Command { + Main plugin; + BungeeMessages msgs; + public MoveCommand(Main pl) { + super("move", null, "queue", "server"); + this.plugin = pl; + msgs = BungeeMessages.getInstance(); + } + + @Override + public void execute(CommandSender sender, String[] args) { + if(!(sender instanceof ProxiedPlayer)) { + sender.sendMessage(msgs.getBC("errors.player-only")); + return; + } + ProxiedPlayer p = (ProxiedPlayer) sender; + if(args.length > 0) { + if(args[0].equalsIgnoreCase("reload")) { + if(!sender.hasPermission("ajqueue.reload")) { + sender.sendMessage(msgs.getBC("noperm")); + return; + } + msgs.reload(); + return; + } + plugin.addToQueue(p, args[0]); + } else if(args.length == 0) { + String queue = plugin.getPlayerInQueue((ProxiedPlayer) sender); + if(queue != null) { + plugin.queues.get(queue).remove(p); + p.sendMessage(msgs.getBC("commands.leave-queue")); + } + } + } +} diff --git a/src/main/java/us/ajg0702/queue/utils/BungeeMessages.java b/src/main/java/us/ajg0702/queue/utils/BungeeMessages.java new file mode 100644 index 0000000..75ee399 --- /dev/null +++ b/src/main/java/us/ajg0702/queue/utils/BungeeMessages.java @@ -0,0 +1,99 @@ +package us.ajg0702.queue.utils; + +import java.io.File; +import java.io.IOException; +import java.util.LinkedHashMap; + +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.plugin.Plugin; +import net.md_5.bungee.config.Configuration; +import net.md_5.bungee.config.ConfigurationProvider; +import net.md_5.bungee.config.YamlConfiguration; + +public class BungeeMessages { + static BungeeMessages INSTANCE = null; + public static BungeeMessages getInstance() { + return INSTANCE; + } + public static BungeeMessages getInstance(Plugin pl) { + if(INSTANCE == null) { + INSTANCE = new BungeeMessages(pl); + } + return INSTANCE; + } + + Plugin pl; + ConfigurationProvider cv = ConfigurationProvider.getProvider(YamlConfiguration.class); + Configuration msgs; + File msgFile; + private BungeeMessages(Plugin pl) { + this.pl = pl; + loadMessagesFile(); + } + + private void loadMessagesFile() { + msgFile = new File(pl.getDataFolder(), "messages.yml"); + if(!msgFile.exists()) { + try { + pl.getDataFolder().mkdirs(); + msgFile.createNewFile(); + } catch (IOException e) { + pl.getLogger().severe("Unable to create messages file:"); + e.printStackTrace(); + } + } + try { + msgs = cv.load(msgFile); + } catch (IOException e) { + pl.getLogger().severe("Unable to load messages file:"); + e.printStackTrace(); + return; + } + LinkedHashMap d = new LinkedHashMap<>(); + + + d.put("status.offline.base", "&cThe server you are queued for 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.online.base", "&7You are in position &f{POS}&7 of &f{LEN}&7."); + d.put("status.left-last-queue", "&aYou left the last queue you were in."); + d.put("status.now-in-queue", "&aYou are now queued! &7You are in position &f{POS}&7 of &f{LEN}&7."); + + d.put("errors.server-not-exist", "&cThat server does not exist!"); + d.put("errors.already-queued", "&cYou are already queued! &7You are in position &f{POS}&7 of &f{LEN}&7."); + 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("commands.leave-queue", "&aYou left the queue!"); + + d.put("noperm", "&cYou do not have permission to do this!"); + + + for(String k : d.keySet()) { + if(!msgs.contains(k)) { + msgs.set(k, d.get(k)); + } + } + try { + cv.save(msgs, msgFile); + } catch (IOException e) { + pl.getLogger().severe("Unable to save messages file:"); + e.printStackTrace(); + } + } + + public String get(String key) { + String msg = msgs.get(key, "&cMessage '"+key+"' does not exist!"); + msg = net.md_5.bungee.api.ChatColor.translateAlternateColorCodes('&', msg); + return msg; + } + public BaseComponent[] getBC(String key) { + String m = get(key); + return TextComponent.fromLegacyText(m); + } + + public void reload() { + loadMessagesFile(); + } +} diff --git a/src/main/resources/bungee.yml b/src/main/resources/bungee.yml new file mode 100644 index 0000000..91f4142 --- /dev/null +++ b/src/main/resources/bungee.yml @@ -0,0 +1,4 @@ +name: ajQueue +version: ${project.version} +main: us.ajg0702.queue.Main +author: ajgeiss0702 \ No newline at end of file diff --git a/target/ajQueue-1.0.0.jar b/target/ajQueue-1.0.0.jar new file mode 100644 index 0000000..41bb10b Binary files /dev/null and b/target/ajQueue-1.0.0.jar differ diff --git a/target/ajQueue-1.0.1.jar b/target/ajQueue-1.0.1.jar new file mode 100644 index 0000000..c91c06a Binary files /dev/null and b/target/ajQueue-1.0.1.jar differ diff --git a/target/ajQueue-1.0.2.jar b/target/ajQueue-1.0.2.jar new file mode 100644 index 0000000..dc2b9ab Binary files /dev/null and b/target/ajQueue-1.0.2.jar differ diff --git a/target/ajQueue-1.0.3.jar b/target/ajQueue-1.0.3.jar new file mode 100644 index 0000000..64f21c3 Binary files /dev/null and b/target/ajQueue-1.0.3.jar differ diff --git a/target/ajQueue-1.0.4.jar b/target/ajQueue-1.0.4.jar new file mode 100644 index 0000000..5f00e5c Binary files /dev/null and b/target/ajQueue-1.0.4.jar differ diff --git a/target/ajQueue-1.0.5.jar b/target/ajQueue-1.0.5.jar new file mode 100644 index 0000000..cf95c45 Binary files /dev/null and b/target/ajQueue-1.0.5.jar differ diff --git a/target/ajQueue-1.0.6.jar b/target/ajQueue-1.0.6.jar new file mode 100644 index 0000000..5e6b6f8 Binary files /dev/null and b/target/ajQueue-1.0.6.jar differ diff --git a/target/ajQueue-1.0.7.jar b/target/ajQueue-1.0.7.jar new file mode 100644 index 0000000..2e61573 Binary files /dev/null and b/target/ajQueue-1.0.7.jar differ diff --git a/target/classes/bungee.yml b/target/classes/bungee.yml new file mode 100644 index 0000000..8156c65 --- /dev/null +++ b/target/classes/bungee.yml @@ -0,0 +1,4 @@ +name: ajQueue +version: 1.0.7 +main: us.ajg0702.queue.Main +author: ajgeiss0702 \ No newline at end of file diff --git a/target/classes/us/ajg0702/queue/Main$1.class b/target/classes/us/ajg0702/queue/Main$1.class new file mode 100644 index 0000000..fec9557 Binary files /dev/null and b/target/classes/us/ajg0702/queue/Main$1.class differ diff --git a/target/classes/us/ajg0702/queue/Main$2.class b/target/classes/us/ajg0702/queue/Main$2.class new file mode 100644 index 0000000..9f18abb Binary files /dev/null and b/target/classes/us/ajg0702/queue/Main$2.class differ diff --git a/target/classes/us/ajg0702/queue/Main.class b/target/classes/us/ajg0702/queue/Main.class new file mode 100644 index 0000000..9019755 Binary files /dev/null and b/target/classes/us/ajg0702/queue/Main.class differ diff --git a/target/classes/us/ajg0702/queue/MoveCommand.class b/target/classes/us/ajg0702/queue/MoveCommand.class new file mode 100644 index 0000000..c9f0a3d Binary files /dev/null and b/target/classes/us/ajg0702/queue/MoveCommand.class differ diff --git a/target/classes/us/ajg0702/queue/utils/BungeeMessages.class b/target/classes/us/ajg0702/queue/utils/BungeeMessages.class new file mode 100644 index 0000000..81392e9 Binary files /dev/null and b/target/classes/us/ajg0702/queue/utils/BungeeMessages.class differ diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..ca136ec --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Mon May 04 14:52:04 MST 2020 +version=1.0.7 +groupId=us.ajg0702 +artifactId=ajQueue diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..66e4553 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,3 @@ +/home/aiden/eclipse-workspace/ajQueue/src/main/java/us/ajg0702/queue/Main.java +/home/aiden/eclipse-workspace/ajQueue/src/main/java/us/ajg0702/queue/MoveCommand.java +/home/aiden/eclipse-workspace/ajQueue/src/main/java/us/ajg0702/queue/utils/BungeeMessages.java diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/target/original-ajQueue-1.0.2.jar b/target/original-ajQueue-1.0.2.jar new file mode 100644 index 0000000..df24ab3 Binary files /dev/null and b/target/original-ajQueue-1.0.2.jar differ diff --git a/target/original-ajQueue-1.0.3.jar b/target/original-ajQueue-1.0.3.jar new file mode 100644 index 0000000..8245149 Binary files /dev/null and b/target/original-ajQueue-1.0.3.jar differ diff --git a/target/original-ajQueue-1.0.4.jar b/target/original-ajQueue-1.0.4.jar new file mode 100644 index 0000000..bd60fba Binary files /dev/null and b/target/original-ajQueue-1.0.4.jar differ diff --git a/target/original-ajQueue-1.0.5.jar b/target/original-ajQueue-1.0.5.jar new file mode 100644 index 0000000..b5a06e2 Binary files /dev/null and b/target/original-ajQueue-1.0.5.jar differ diff --git a/target/original-ajQueue-1.0.6.jar b/target/original-ajQueue-1.0.6.jar new file mode 100644 index 0000000..9552291 Binary files /dev/null and b/target/original-ajQueue-1.0.6.jar differ diff --git a/target/original-ajQueue-1.0.7.jar b/target/original-ajQueue-1.0.7.jar new file mode 100644 index 0000000..404671b Binary files /dev/null and b/target/original-ajQueue-1.0.7.jar differ