diff --git a/pom.xml b/pom.xml index 4397b01..65befdf 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.extendedclip.papi.expansion.javascript javascript-expansion - 1.5.2 + 1.5.3 PAPI-Expansion-Javascript PlaceholderAPI expansion for javascript placeholders diff --git a/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptExpansion.java b/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptExpansion.java index c9e11ea..d141dbd 100644 --- a/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptExpansion.java +++ b/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptExpansion.java @@ -21,6 +21,16 @@ package com.extendedclip.papi.expansion.javascript; import com.extendedclip.papi.expansion.javascript.cloud.GithubScriptManager; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.script.ScriptEngine; +import javax.script.ScriptEngineFactory; +import javax.script.ScriptEngineManager; import me.clip.placeholderapi.expansion.Cacheable; import me.clip.placeholderapi.expansion.Configurable; import me.clip.placeholderapi.expansion.PlaceholderExpansion; @@ -28,219 +38,222 @@ import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandMap; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineFactory; -import javax.script.ScriptEngineManager; -import java.lang.reflect.Field; -import java.util.*; - public class JavascriptExpansion extends PlaceholderExpansion implements Cacheable, Configurable { - private ScriptEngine globalEngine = null; + private ScriptEngine globalEngine = null; - private JavascriptPlaceholdersConfig config; - private final Set scripts = new HashSet<>(); - private final String VERSION = getClass().getPackage().getImplementationVersion(); - private static JavascriptExpansion instance; - private boolean debug; - private GithubScriptManager githubScripts; - private JavascriptExpansionCommands commands; - private CommandMap commandMap; + private JavascriptPlaceholdersConfig config; + private final Set scripts = new HashSet<>(); + private final String VERSION = getClass().getPackage().getImplementationVersion(); + private static JavascriptExpansion instance; + private boolean debug; + private GithubScriptManager githubManager; + private JavascriptExpansionCommands commands; + private CommandMap commandMap; + public JavascriptExpansion() { + instance = this; + try { + final Field f = Bukkit.getServer().getClass().getDeclaredField("commandMap"); + f.setAccessible(true); + commandMap = (CommandMap) f.get(Bukkit.getServer()); + } catch (Exception e) { + e.printStackTrace(); + } + } - public JavascriptExpansion() { - instance = this; - try { - final Field f = Bukkit.getServer().getClass().getDeclaredField("commandMap"); - f.setAccessible(true); - commandMap = (CommandMap) f.get(Bukkit.getServer()); - } catch (Exception e) { - e.printStackTrace(); - } + @Override + public String getAuthor() { + return "clip"; + } + + @Override + public String getIdentifier() { + return "javascript"; + } + + @Override + public String getPlugin() { + return null; + } + + @Override + public String getVersion() { + return VERSION; + } + + @Override + public boolean register() { + if (globalEngine == null) { + try { + globalEngine = new ScriptEngineManager().getEngineByName(getString("engine", "nashorn")); + } catch (NullPointerException ex) { + getPlaceholderAPI().getLogger() + .warning("Javascript engine type was invalid! Defaulting to 'nashorn'"); + globalEngine = new ScriptEngineManager().getEngineByName("nashorn"); + } } - @Override - public String getAuthor() { - return "clip"; + debug = (boolean) get("debug", false); + config = new JavascriptPlaceholdersConfig(this); + config.loadPlaceholders(); + + if (debug) { + System.out.println("Java version: " + System.getProperty("java.version")); + final ScriptEngineManager manager = new ScriptEngineManager(); + final List factories = manager.getEngineFactories(); + System.out.println("Displaying all script engine factories."); + + for (ScriptEngineFactory factory : factories) { + System.out.println(factory.getEngineName()); + System.out.println(" Version: " + factory.getEngineVersion()); + System.out.println(" Lang name: " + factory.getLanguageName()); + System.out.println(" Lang version: " + factory.getLanguageVersion()); + System.out.println(" Extensions: ." + String.join(", .", factory.getExtensions())); + System.out.println(" Mime types: " + String.join(", ", factory.getMimeTypes())); + System.out.println(" Names: " + String.join(", ", factory.getNames())); + } } - @Override - public String getIdentifier() { - return "javascript"; + if ((Boolean) get("github_script_downloads", false)) { + githubManager = new GithubScriptManager(this); + githubManager.fetch(); } - @Override - public String getPlugin() { - return null; + registerCommand(); + return super.register(); + } + + @Override + public void clear() { + unregisterCommand(); + scripts.forEach(s -> { + s.saveData(); + s.cleanup(); + }); + + if (githubManager != null) { + githubManager.clear(); + githubManager = null; } - @Override - public String getVersion() { - return VERSION; + scripts.clear(); + globalEngine = null; + instance = null; + } + + @Override + public String onRequest(OfflinePlayer p, String identifier) { + if (p == null) { + return ""; } - @Override - public boolean register() { - if (globalEngine == null) { - try { - globalEngine = new ScriptEngineManager().getEngineByName(getString("engine", "nashorn")); - } catch (NullPointerException ex) { - getPlaceholderAPI().getLogger().warning("Javascript engine type was invalid! Defaulting to 'nashorn'"); - globalEngine = new ScriptEngineManager().getEngineByName("nashorn"); - } - } - - debug = (boolean) get("debug", false); - config = new JavascriptPlaceholdersConfig(this); - config.loadPlaceholders(); - - if (debug) { - System.out.println("Java version: " + System.getProperty("java.version")); - - final ScriptEngineManager manager = new ScriptEngineManager(); - final List factories = manager.getEngineFactories(); - System.out.println("Displaying all script engine factories."); - - for (ScriptEngineFactory factory : factories) { - System.out.println(factory.getEngineName()); - System.out.println(" Version: " + factory.getEngineVersion()); - System.out.println(" Lang name: " + factory.getLanguageName()); - System.out.println(" Lang version: " + factory.getLanguageVersion()); - System.out.println(" Extensions: ." + String.join(", .", factory.getExtensions())); - System.out.println(" Mime types: " + String.join(", ", factory.getMimeTypes())); - System.out.println(" Names: " + String.join(", ", factory.getNames())); - } - } - - githubScripts = new GithubScriptManager(this); - - if ((Boolean) get("github_script_downloads", false)) { - githubScripts.fetch(); - } - - registerCommand(); - return super.register(); + if (scripts.isEmpty()) { + return null; } - @Override - public void clear() { - unregisterCommand(); - scripts.forEach(s -> { - s.saveData(); - s.cleanup(); - }); + for (JavascriptPlaceholder script : scripts) { + if (identifier.startsWith(script.getIdentifier() + "_")) { + identifier = identifier.replace(script.getIdentifier() + "_", ""); + return !identifier.contains(",") ? script.evaluate(p, identifier) + : script.evaluate(p, identifier.split(",")); + } else if (identifier.equalsIgnoreCase(script.getIdentifier())) { + return script.evaluate(p); + } + } + return null; + } - if (githubScripts != null) { - githubScripts.clear(); - githubScripts = null; - } - - scripts.clear(); - globalEngine = null; - instance = null; + public boolean addJSPlaceholder(JavascriptPlaceholder p) { + if (p == null) { + return false; } - @Override - public String onRequest(OfflinePlayer p, String identifier) { - if (p == null) { - return ""; - } - - if (scripts.isEmpty()) { - return null; - } - - for (JavascriptPlaceholder script : scripts) { - if (identifier.startsWith(script.getIdentifier() + "_")) { - identifier = identifier.replace(script.getIdentifier() + "_", ""); - return !identifier.contains(",") ? script.evaluate(p, identifier) : script.evaluate(p, identifier.split(",")); - } else if (identifier.equalsIgnoreCase(script.getIdentifier())) { - return script.evaluate(p); - } - } - return null; + if (scripts.isEmpty()) { + scripts.add(p); + return true; } - public boolean addJSPlaceholder(JavascriptPlaceholder p) { - if (p == null) { - return false; - } - - if (scripts.isEmpty()) { - scripts.add(p); - return true; - } - - if (scripts.stream().filter(s -> s.getIdentifier().equalsIgnoreCase(p.getIdentifier())).findFirst().orElse(null) != null) { - return false; - } - - scripts.add(p); - return true; + if (scripts.stream().filter(s -> s.getIdentifier().equalsIgnoreCase(p.getIdentifier())) + .findFirst().orElse(null) != null) { + return false; } - public Set getJSPlaceholders() { - return scripts; - } + scripts.add(p); + return true; + } - public List getLoadedIdentifiers() { - List l = new ArrayList<>(); - scripts.forEach(s -> l.add(s.getIdentifier())); - return l; - } + public Set getJSPlaceholders() { + return scripts; + } - public JavascriptPlaceholder getJSPlaceholder(String identifier) { - return scripts.stream().filter(s -> s.getIdentifier().equalsIgnoreCase(identifier)).findFirst().orElse(null); - } + public List getLoadedIdentifiers() { + List l = new ArrayList<>(); + scripts.forEach(s -> l.add(s.getIdentifier())); + return l; + } - public int getAmountLoaded() { - return scripts.size(); - } + public JavascriptPlaceholder getJSPlaceholder(String identifier) { + return scripts.stream().filter(s -> s.getIdentifier().equalsIgnoreCase(identifier)).findFirst() + .orElse(null); + } - public ScriptEngine getGlobalEngine() { - return globalEngine; - } + public int getAmountLoaded() { + return scripts.size(); + } - public JavascriptPlaceholdersConfig getConfig() { - return config; - } + public ScriptEngine getGlobalEngine() { + return globalEngine; + } - @Override - public Map getDefaults() { - Map def = new HashMap<>(); - def.put("engine", "javascript"); - def.put("debug", false); - def.put("github_script_downloads", false); - return def; - } + public JavascriptPlaceholdersConfig getConfig() { + return config; + } - protected int reloadScripts() { - scripts.forEach(s -> { - s.saveData(); - s.cleanup(); - }); - scripts.clear(); - config.reload(); - return config.loadPlaceholders(); - } + @Override + public Map getDefaults() { + Map def = new HashMap<>(); + def.put("engine", "javascript"); + def.put("debug", false); + def.put("github_script_downloads", false); + return def; + } - public static JavascriptExpansion getInstance() { - return instance; - } + protected int reloadScripts() { + scripts.forEach(s -> { + s.saveData(); + s.cleanup(); + }); + scripts.clear(); + config.reload(); + return config.loadPlaceholders(); + } - public GithubScriptManager getGithubScriptManager() { - return githubScripts; - } + public static JavascriptExpansion getInstance() { + return instance; + } - private boolean unregisterCommand() { - if (commandMap == null || commands == null) return false; - return commands.unregister(commandMap); - } + public GithubScriptManager getGithubScriptManager() { + return githubManager; + } - private boolean registerCommand() { - if (commandMap == null) return false; - commands = new JavascriptExpansionCommands(this); - commandMap.register("papi" + commands.getName(), commands); - return commands.isRegistered(); + public void setGithubScriptManager(GithubScriptManager manager) { + this.githubManager = manager; + } + + private boolean unregisterCommand() { + if (commandMap == null || commands == null) { + return false; } + return commands.unregister(commandMap); + } + + private boolean registerCommand() { + if (commandMap == null) { + return false; + } + commands = new JavascriptExpansionCommands(this); + commandMap.register("papi" + commands.getName(), commands); + return commands.isRegistered(); + } } diff --git a/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptExpansionCommands.java b/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptExpansionCommands.java index 32eaaea..08d7e45 100644 --- a/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptExpansionCommands.java +++ b/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptExpansionCommands.java @@ -22,6 +22,7 @@ package com.extendedclip.papi.expansion.javascript; import com.extendedclip.papi.expansion.javascript.cloud.GithubScript; import com.extendedclip.papi.expansion.javascript.cloud.GithubScriptManager; +import me.clip.placeholderapi.PlaceholderAPIPlugin; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -161,6 +162,31 @@ public class JavascriptExpansionCommands extends Command { return true; } + case "enabled": + if (args.length < 3) { + msg(sender, "&4Incorrect usage! &f/" + command + " git enabled "); + return true; + } + + Boolean enabled = Boolean.parseBoolean(args[2]); + PlaceholderAPIPlugin papi = expansion.getPlaceholderAPI(); + papi.getConfig().set("expansions." + this.getName() + ".github_script_downloads", enabled); + papi.saveConfig(); + papi.reloadConfig(); + if (!enabled) { + if (expansion.getGithubScriptManager() != null) { + expansion.getGithubScriptManager().clear(); + expansion.setGithubScriptManager(null); + } + } else { + if (expansion.getGithubScriptManager() == null) { + expansion.setGithubScriptManager(new GithubScriptManager(expansion)); + } + expansion.getGithubScriptManager().fetch(); + } + msg(sender, "&6Git script downloads set to: &e" + enabled); + return true; + default: { msg(sender, "&4Incorrect usage! &f/" + command + " &7for more help."); return true;