From b17620cdbf8e801201fcceb7f421817474e9cea7 Mon Sep 17 00:00:00 2001 From: extendedclip Date: Fri, 9 Mar 2018 11:01:19 -0500 Subject: [PATCH] Experimenting... Added a listener to the expansion so I can execute a reload command that does not reload all expansions, only the javascript placeholders. Added "Expansion" var to get the expansion instance. Added some methods related to javascript placeholders --- pom.xml | 2 +- .../javascript/JavascriptExpansion.java | 117 +++++++++++++++--- .../javascript/JavascriptPlaceholder.java | 7 +- .../JavascriptPlaceholdersConfig.java | 4 +- 4 files changed, 109 insertions(+), 21 deletions(-) diff --git a/pom.xml b/pom.xml index 6167e7a..3079784 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.extendedclip.papi.expansion.javascript javascript-expansion - 1.4.0 + 1.4.1 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 179e640..72a34fa 100644 --- a/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptExpansion.java +++ b/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptExpansion.java @@ -20,8 +20,10 @@ */ package com.extendedclip.papi.expansion.javascript; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -32,18 +34,76 @@ import me.clip.placeholderapi.PlaceholderAPIPlugin; import me.clip.placeholderapi.expansion.Cacheable; import me.clip.placeholderapi.expansion.Configurable; import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import me.clip.placeholderapi.util.Msg; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; -public class JavascriptExpansion extends PlaceholderExpansion implements Cacheable, Configurable { - +public class JavascriptExpansion extends PlaceholderExpansion implements Cacheable, Configurable, Listener { + private ScriptEngine globalEngine = null; private JavascriptPlaceholdersConfig config; - private final Set scripts = new HashSet(); + private final Set scripts = new HashSet<>(); private final String VERSION = getClass().getPackage().getImplementationVersion(); + + private static JavascriptExpansion instance; + + public JavascriptExpansion() { + instance = this; + } + + /* + * I am just testing the waters here because there is no command system for expansions... + */ + @EventHandler + public void onCmdExecute(PlayerCommandPreprocessEvent event) { + + String msg = event.getMessage(); + + if (!msg.startsWith("/papijsp")) { + return; + } + + if (!event.getPlayer().hasPermission("placeholderapi.admin")) { + return; + } + + event.setCancelled(true); + + Player p = event.getPlayer(); + + // default command + if (msg.indexOf(" ") == -1) { + Msg.msg(p, "&7Javascript expansion v: &f" + getVersion()); + Msg.msg(p, "&7Created by: &f" + getAuthor()); + Msg.msg(p, "&fWiki: &ahttps://github.com/PlaceholderAPI-Expansions/Javascript-Expansion/wiki"); + Msg.msg(p, "&r"); + Msg.msg(p, "&7/papijsp reload &7- &fReload your javascripts without reloading PlaceholderAPI"); + Msg.msg(p, "&7/papijsp list &7- &fList loaded script identifiers."); + return; + } + + if (msg.equals("/papijsp reload")) { + Msg.msg(p, "&aReloading..."); + int l = this.reloadScripts(); + Msg.msg(p, l + " &7script" + (l == 1 ? "" : "s")+ " loaded"); + return; + } + + if (msg.equals("/papijsp list")) { + List loaded = this.getLoadedIdentifiers(); + Msg.msg(p, loaded.size() + " &7script" + (loaded.size() == 1 ? "" : "s")+ " loaded"); + Msg.msg(p, loaded.toString()); + return; + } + + event.getPlayer().sendMessage("&cIncorrect usage &7- &f/papijsp"); + } @Override public String getAuthor() { @@ -65,11 +125,6 @@ public class JavascriptExpansion extends PlaceholderExpansion implements Cacheab return VERSION; } - @Override - public boolean canRegister() { - return true; - } - @Override public boolean register() { if (globalEngine == null) { @@ -96,6 +151,7 @@ public class JavascriptExpansion extends PlaceholderExpansion implements Cacheab } scripts.clear(); globalEngine = null; + instance = null; } @Override @@ -119,7 +175,7 @@ public class JavascriptExpansion extends PlaceholderExpansion implements Cacheab return null; } - public boolean addJavascriptPlaceholder(JavascriptPlaceholder p) { + public boolean addJSPlaceholder(JavascriptPlaceholder p) { if (p == null) { return false; } @@ -129,17 +185,32 @@ public class JavascriptExpansion extends PlaceholderExpansion implements Cacheab return true; } - for (JavascriptPlaceholder pl : scripts) { - if (pl.getIdentifier().equalsIgnoreCase(p.getIdentifier())) { - return false; - } + if (scripts.stream().filter(s -> s.getIdentifier().equalsIgnoreCase(p.getIdentifier())).findFirst().orElse(null) != null) { + return false; } + scripts.add(p); return true; } - public int getJavascriptPlaceholdersAmount() { - return scripts == null ? 0 : scripts.size(); + public Set getJSPlaceholders() { + return scripts; + } + + public List getLoadedIdentifiers() { + List l = new ArrayList<>(); + scripts.stream().forEach(s -> { + l.add(s.getIdentifier()); + }); + return l; + } + + public JavascriptPlaceholder getJSPlaceholder(String identifier) { + return scripts.stream().filter(s -> s.getIdentifier().equalsIgnoreCase(identifier)).findFirst().orElse(null); + } + + public int getAmountLoaded() { + return scripts.size(); } public ScriptEngine getGlobalEngine() { @@ -152,4 +223,20 @@ public class JavascriptExpansion extends PlaceholderExpansion implements Cacheab def.put("engine", "javascript"); return def; } + + private int reloadScripts() { + if (!scripts.isEmpty()) { + scripts.stream().forEach(s -> { + s.saveData(); + s.cleanup(); + }); + } + scripts.clear(); + config.reload(); + return config.loadPlaceholders(); + } + + public static JavascriptExpansion getInstance() { + return instance; + } } diff --git a/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptPlaceholder.java b/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptPlaceholder.java index 74d1670..a3b9d6c 100644 --- a/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptPlaceholder.java +++ b/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptPlaceholder.java @@ -58,6 +58,9 @@ public class JavascriptPlaceholder { Validate.notNull(identifier, "Identifier can not be null"); Validate.notNull(script, "script can not be null"); this.engine = engine; + engine.put("Data", getData()); + engine.put("BukkitServer", Bukkit.getServer()); + engine.put("Expansion", JavascriptExpansion.getInstance()); this.identifier = identifier; this.script = script; File dir = new File(FILEDIR); @@ -108,8 +111,6 @@ public class JavascriptPlaceholder { } engine.put("args", c); - engine.put("Data", getData()); - engine.put("BukkitServer", Bukkit.getServer()); engine.put("BukkitPlayer", p); Object result = engine.eval(exp); return result != null ? PlaceholderAPI.setBracketPlaceholders(p, result.toString()) : ""; @@ -118,7 +119,7 @@ public class JavascriptPlaceholder { PlaceholderAPIPlugin.getInstance().getLogger().severe("Error in javascript for placeholder - " + this.identifier); ex.printStackTrace(); } - return "invalid javascript"; + return "Script error"; } public ScriptData getData() { diff --git a/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptPlaceholdersConfig.java b/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptPlaceholdersConfig.java index 212d40f..38817e7 100644 --- a/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptPlaceholdersConfig.java +++ b/src/main/java/com/extendedclip/papi/expansion/javascript/JavascriptPlaceholdersConfig.java @@ -173,7 +173,7 @@ public class JavascriptPlaceholdersConfig { JavascriptPlaceholder pl = new JavascriptPlaceholder(engine, identifier, script); - boolean added = ex.addJavascriptPlaceholder(pl); + boolean added = ex.addJSPlaceholder(pl); if (added) { @@ -185,7 +185,7 @@ public class JavascriptPlaceholdersConfig { plugin.getLogger().warning("Javascript placeholder %javascript_" + identifier + "% is a duplicate!"); } } - return ex.getJavascriptPlaceholdersAmount(); + return ex.getAmountLoaded(); } private String getContents(File f) {