From 98e487b44edf90b80f79d27e0b3edfe9c1dfa980 Mon Sep 17 00:00:00 2001 From: ME1312 Date: Mon, 8 Mar 2021 04:47:49 -0500 Subject: [PATCH] Add placeholders for groups --- .../SubServers/Bungee/Host/Executable.java | 5 +- .../Compatibility/PlaceholderImpl.java | 61 ++++++++++++++++++- .../Host/Executable/Executable.java | 5 +- 3 files changed, 64 insertions(+), 7 deletions(-) diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java index 963e01f0..64f7db93 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java @@ -18,12 +18,11 @@ private Executable() {} * * @param gitbash Git Bash location (optional) * @param exec Executable String - * @return + * @return Formatted Executable */ public static String[] parse(String gitbash, String exec) { - if (exec.startsWith("java ")) { + if (exec.startsWith("java ")) exec = '\"' + System.getProperty("java.home") + File.separator + "bin" + File.separator + "java" + '\"' + exec.substring(4); - } String[] cmd; if (System.getProperty("os.name").toLowerCase().startsWith("windows")) { diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/PlaceholderImpl.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/PlaceholderImpl.java index f417711e..02f0cef2 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/PlaceholderImpl.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Library/Compatibility/PlaceholderImpl.java @@ -1,5 +1,7 @@ package net.ME1312.SubServers.Client.Bukkit.Library.Compatibility; +import net.ME1312.Galaxi.Library.Container.ContainedPair; +import net.ME1312.Galaxi.Library.Container.Pair; import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.Galaxi.Library.Util; import net.ME1312.SubServers.Client.Bukkit.Event.*; @@ -348,6 +350,7 @@ private String runMethod(OfflinePlayer player, String text) { private String runMethod(OfflinePlayer player, String method, String[] args, String[] responses) { Server server = (plugin.api.getName() != null)? cache.getServer(plugin.api.getName()) : null; SubServer subserver = (server instanceof SubServer)? (SubServer) server : null; + Pair> group = null; Host host = (subserver != null)? cache.getHost(subserver.getHost()) : null; Proxy proxy = cache.getMasterProxy(); @@ -358,6 +361,9 @@ private String runMethod(OfflinePlayer player, String method, String[] args, Str } else if (method.startsWith("host.")) { if (args.length > 0 && !args[0].isEmpty()) host = cache.getHost(args[0]); if (host == null) return null; + } else if (method.startsWith("group.")) { + if (args.length > 0 && !args[0].isEmpty()) group = cache.getGroup(args[0]); +// if (group == null) return null; // Empty groups are null } else if (method.startsWith("server.")) { if (args.length > 0 && !args[0].isEmpty()) server = cache.getServer(args[0]); if (server == null) return null; @@ -393,7 +399,12 @@ private String runMethod(OfflinePlayer player, String method, String[] args, Str } } else switch (method) { // --- Straight up Methods --- case "example": { - return defaults(responses, "Example!")[0]; + return defaults(responses, ChatColor.LIGHT_PURPLE+"Example!")[0]; + } + case "players": { + int i = cache.getMasterProxy().getPlayers().size(); + for (Proxy p : cache.getProxies().values()) i += p.getPlayers().size(); + return Integer.toString(i); } case "proxy": case "proxies": { @@ -487,6 +498,18 @@ private String runMethod(OfflinePlayer player, String method, String[] args, Str case "host.signature": { return host.getSignature(); } + case "group": + case "groups": { + return Integer.toString(cache.getGroups().size()); + } + case "group.servers": { + return Integer.toString((group == null)?0:group.value().size()); + } + case "group.players": { + int i = 0; + if (group != null) for (Server s : group.value()) i += s.getRemotePlayers().size(); + return Integer.toString(i); + } case "server": case "servers": { return Integer.toString(cache.getServers().size()); @@ -705,6 +728,42 @@ private Host getHost(String name) { return getHosts().get(name.toLowerCase()); } + public Map> getGroups() { + TreeMap> groups = new TreeMap>(); + HashMap conflitresolver = new HashMap(); + for (Server server : getServers().values()) { + for (String name : server.getGroups()) { + String group = name; + if (conflitresolver.keySet().contains(name.toLowerCase())) { + group = conflitresolver.get(name.toLowerCase()); + } else { + conflitresolver.put(name.toLowerCase(), name); + } + List list = (groups.keySet().contains(group))?groups.get(group):new ArrayList(); + list.add(server); + groups.put(group, list); + } + } + return groups; + } + + public Map> getLowercaseGroups() { + Map> groups = getGroups(); + TreeMap> lowercaseGroups = new TreeMap>(); + for (String key : groups.keySet()) { + lowercaseGroups.put(key.toLowerCase(), groups.get(key)); + } + return lowercaseGroups; + } + + public Pair> getGroup(String name) { + if (Util.isNull(name)) throw new NullPointerException(); + for (Map.Entry> group : getLowercaseGroups().entrySet()) { + if (group.getKey().equalsIgnoreCase(name)) return new ContainedPair<>(group.getKey(), group.getValue()); + } + return null; + } + public Map getServers() { return servers; } diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/Executable.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/Executable.java index bd4b7cc2..07025b7e 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/Executable.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/Executable.java @@ -18,12 +18,11 @@ private Executable() {} * * @param gitbash Git Bash location (optional) * @param exec Executable String - * @return + * @return Formatted Executable */ public static String[] parse(String gitbash, String exec) { - if (exec.startsWith("java ")) { + if (exec.startsWith("java ")) exec = '\"' + System.getProperty("java.home") + File.separator + "bin" + File.separator + "java" + '\"' + exec.substring(4); - } String[] cmd; if (System.getProperty("os.name").toLowerCase().startsWith("windows")) {