diff --git a/src/main/java/us/ajg0702/queue/Main.java b/src/main/java/us/ajg0702/queue/Main.java index 9852c7b..3b3c554 100644 --- a/src/main/java/us/ajg0702/queue/Main.java +++ b/src/main/java/us/ajg0702/queue/Main.java @@ -19,6 +19,7 @@ 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.BungeeConfig; import us.ajg0702.queue.utils.BungeeMessages; public class Main extends Plugin implements Listener { @@ -30,16 +31,22 @@ public class Main extends Plugin implements Listener { BungeeMessages msgs; + BungeeConfig config; + @Override public void onEnable() { msgs = BungeeMessages.getInstance(this); + config = new BungeeConfig(this); + this.getProxy().getPluginManager().registerCommand(this, new MoveCommand(this)); this.getProxy().getPluginManager().registerCommand(this, new ManageCommand(this)); this.getProxy().getPluginManager().registerListener(this, this); + timeBetweenPlayers = config.getInt("wait-time"); + updateOnlineServers(); getProxy().getScheduler().schedule(this, new Runnable() { @@ -55,6 +62,10 @@ public class Main extends Plugin implements Listener { } + public BungeeConfig getConfig() { + return config; + } + public static BaseComponent[] formatMessage(String text) { return TextComponent.fromLegacyText(net.md_5.bungee.api.ChatColor.translateAlternateColorCodes('&', text)); } @@ -159,6 +170,17 @@ public class Main extends Plugin implements Listener { if(queue != null) { queues.get(queue).remove(p); } + + String servername = e.getPlayer().getServer().getInfo().getName(); + List svs = config.getStringList("queue-servers"); + for(String s : svs) { + String[] parts = s.split("\\:"); + String from = parts[0]; + String to = parts[1]; + if(from.equalsIgnoreCase(servername)) { + addToQueue(p, to); + } + } } @EventHandler diff --git a/src/main/java/us/ajg0702/queue/utils/BungeeConfig.java b/src/main/java/us/ajg0702/queue/utils/BungeeConfig.java new file mode 100644 index 0000000..d7eefff --- /dev/null +++ b/src/main/java/us/ajg0702/queue/utils/BungeeConfig.java @@ -0,0 +1,205 @@ +package us.ajg0702.queue.utils; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +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 BungeeConfig { + + File f; + Configuration config; + + ConfigurationProvider cv = ConfigurationProvider.getProvider(YamlConfiguration.class); + + String nfm = "Could not find KEY in config! Try restarting the server or deleting the config and allowing the plugin to re-create it."; + + public Object get(String key) { + Object r = config.get(key); + if(r == null) { + pl.getLogger().severe(nfm.replace("KEY", key));; + } + return r; + } + public Integer getInt(String key) { + int r = config.getInt(key, -38964298); + if(r == -38964298) { + pl.getLogger().severe(nfm.replace("KEY", key));; + } + return r; + } + public String getString(String key) { + String r = config.getString(key); + if(r == null) { + pl.getLogger().severe(nfm.replace("KEY", key));; + } + return r; + } + public List getStringList(String key) { + List r = config.getStringList(key); + if(r == null) { + pl.getLogger().severe(nfm.replace("KEY", key));; + } + return r; + } + + public String getDefaultConfig() throws IOException { + BufferedReader stream = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream(File.separator+"config.yml"))); + StringBuilder configfile = new StringBuilder(); + String line; + while((line = stream.readLine()) != null) { + configfile.append(line+"\n"); + } + return configfile.toString(); + } + + public String getConfigString() throws IOException { + List lines = Files.readAllLines(Paths.get(pl.getDataFolder().getPath().toString(), "config.yml")); + String end = ""; + for(String line : lines) { + end += line+"\n"; + } + return end; + } + Plugin pl; + @SuppressWarnings("unused") + public BungeeConfig(Plugin plugin) { + pl = plugin; + f = new File(plugin.getDataFolder(), "config.yml"); + if(!f.exists()) { + if(!Files.exists(pl.getDataFolder().toPath())) { + try { + Files.createDirectory(pl.getDataFolder().toPath()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + try { + PrintWriter writer = new PrintWriter(pl.getDataFolder()+File.separator+"config.yml", "UTF-8"); + String[] lines = getDefaultConfig().split("\n"); + for(String line : lines) { + writer.println(line); + + } + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } + //Bukkit.getLogger().info(configfile.toString()); + } else { + try { + f = new File(pl.getDataFolder(), "config.yml"); + Configuration oldconfig = cv.load(f); + String newConfig = getDefaultConfig(); + int oldver = oldconfig.getInt("config-version", 0); + String strv = newConfig + .split("config\\-version: ")[1] + .split("\n")[0]; + //pl.getLogger().info("New config version: "+strv); + int newver = Integer.parseInt(strv); + if(oldver < newver) { + pl.getLogger().info("Starting config converter!"); + Date date = Calendar.getInstance().getTime(); + DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd-hh-mm-ss"); + String strDate = dateFormat.format(date); + duplicateFile(f, new File(pl.getDataFolder(), "config.yml.old."+strDate)); + String oldConfig = getConfigString(); + f = new File(pl.getDataFolder(), "config.yml"); + config = cv.load(f); + for(String key : oldconfig.getKeys()) { + pl.getLogger().info("Key: "+key); + String[] keyParts = key.split("\\."); + //pl.getLogger().info("Key len: "+keyParts.length); + String keySec = keyParts[keyParts.length-1]; + pl.getLogger().info("keySec: "+keySec); + String newVal = newConfig.split(keySec)[1].split("\n")[0]; + int i = 0; + for(String l : newConfig.split(keySec)[1].split("\n")) { + if(i == 0) { + i++; + continue; + } + i++; + pl.getLogger().info("Scanning: "+l); + if(l.startsWith("-")) { + newVal += "\n"+l; + } else { + break; + } + } + String find = keySec+ newVal; + String replace = keySec + ": " + oldconfig.get(key); + replace = replace.replaceAll("\\[", "\n- "); + replace = replace.replaceAll("\\, ", "\n- "); + replace = replace.replaceAll("\\]", ""); + pl.getLogger().info("Find: "+find +" Replace w: "+replace); + if(!keySec.equals("config-version")) { + newConfig = newConfig.replaceAll(find, replace); + } + } + PrintWriter writer = new PrintWriter(f, "UTF-8"); + String[] lines = newConfig.split("\n"); + for(String line : lines) { + writer.println(line); + } + writer.close(); + } + } catch (IOException e) { + pl.getLogger().severe("Unable to load default config! " + e.getMessage() + "\n" + e.getStackTrace().toString());; + } + } + + f = new File(pl.getDataFolder(), "config.yml"); + try { + config = cv.load(f); + } catch (IOException e) { + pl.getLogger().warning("Unable to reload the config:"); + e.printStackTrace(); + } + } + public void reload() { + try { + config = cv.load(f); + } catch (IOException e) { + pl.getLogger().warning("Unable to reload the config:"); + e.printStackTrace(); + } + } + + + + private static void duplicateFile(File source, File destination) throws IOException { + InputStream is = null; + OutputStream os = null; + try { + is = new FileInputStream(source); + os = new FileOutputStream(destination); + byte[] buffer = new byte[1024]; + int length; + while ((length = is.read(buffer)) > 0) { + os.write(buffer, 0, length); + } + } finally { + is.close(); + os.close(); + } + } +} diff --git a/src/main/java/us/ajg0702/queue/utils/BungeeMessages.java b/src/main/java/us/ajg0702/queue/utils/BungeeMessages.java index c9cb1cb..3e18293 100644 --- a/src/main/java/us/ajg0702/queue/utils/BungeeMessages.java +++ b/src/main/java/us/ajg0702/queue/utils/BungeeMessages.java @@ -66,6 +66,7 @@ public class BungeeMessages { d.put("errors.already-connected", "&cYou are already connected to this server!"); d.put("commands.leave-queue", "&aYou left the queue!"); + d.put("commands.reload", "&aConfig and messages reloaded successfully!"); d.put("noperm", "&cYou do not have permission to do this!"); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..dc6d0a1 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,11 @@ +# Dont touch this number please +config-version: 1 + +# The time the server will wait between sending people in the queue +# Default: 5 +wait-time: 5 + +# If a player is in a server, you can have the plugin make them automatically join a queue for another server +# Example with the default values: Player joins survivalfallback server, they will auto-join the queue for survival +queue-servers: +- 'survivalfallback:survival' \ No newline at end of file