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
This commit is contained in:
extendedclip 2018-03-09 11:01:19 -05:00
parent 62a496bb58
commit b17620cdbf
4 changed files with 109 additions and 21 deletions

View File

@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.extendedclip.papi.expansion.javascript</groupId> <groupId>com.extendedclip.papi.expansion.javascript</groupId>
<artifactId>javascript-expansion</artifactId> <artifactId>javascript-expansion</artifactId>
<version>1.4.0</version> <version>1.4.1</version>
<name>PAPI-Expansion-Javascript</name> <name>PAPI-Expansion-Javascript</name>
<description>PlaceholderAPI expansion for javascript placeholders</description> <description>PlaceholderAPI expansion for javascript placeholders</description>

View File

@ -20,8 +20,10 @@
*/ */
package com.extendedclip.papi.expansion.javascript; package com.extendedclip.papi.expansion.javascript;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -32,18 +34,76 @@ import me.clip.placeholderapi.PlaceholderAPIPlugin;
import me.clip.placeholderapi.expansion.Cacheable; import me.clip.placeholderapi.expansion.Cacheable;
import me.clip.placeholderapi.expansion.Configurable; import me.clip.placeholderapi.expansion.Configurable;
import me.clip.placeholderapi.expansion.PlaceholderExpansion; import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import me.clip.placeholderapi.util.Msg;
import org.bukkit.entity.Player; 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 ScriptEngine globalEngine = null;
private JavascriptPlaceholdersConfig config; private JavascriptPlaceholdersConfig config;
private final Set<JavascriptPlaceholder> scripts = new HashSet<JavascriptPlaceholder>(); private final Set<JavascriptPlaceholder> scripts = new HashSet<>();
private final String VERSION = getClass().getPackage().getImplementationVersion(); 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<String> 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 @Override
public String getAuthor() { public String getAuthor() {
@ -65,11 +125,6 @@ public class JavascriptExpansion extends PlaceholderExpansion implements Cacheab
return VERSION; return VERSION;
} }
@Override
public boolean canRegister() {
return true;
}
@Override @Override
public boolean register() { public boolean register() {
if (globalEngine == null) { if (globalEngine == null) {
@ -96,6 +151,7 @@ public class JavascriptExpansion extends PlaceholderExpansion implements Cacheab
} }
scripts.clear(); scripts.clear();
globalEngine = null; globalEngine = null;
instance = null;
} }
@Override @Override
@ -119,7 +175,7 @@ public class JavascriptExpansion extends PlaceholderExpansion implements Cacheab
return null; return null;
} }
public boolean addJavascriptPlaceholder(JavascriptPlaceholder p) { public boolean addJSPlaceholder(JavascriptPlaceholder p) {
if (p == null) { if (p == null) {
return false; return false;
} }
@ -129,17 +185,32 @@ public class JavascriptExpansion extends PlaceholderExpansion implements Cacheab
return true; return true;
} }
for (JavascriptPlaceholder pl : scripts) { if (scripts.stream().filter(s -> s.getIdentifier().equalsIgnoreCase(p.getIdentifier())).findFirst().orElse(null) != null) {
if (pl.getIdentifier().equalsIgnoreCase(p.getIdentifier())) { return false;
return false;
}
} }
scripts.add(p); scripts.add(p);
return true; return true;
} }
public int getJavascriptPlaceholdersAmount() { public Set<JavascriptPlaceholder> getJSPlaceholders() {
return scripts == null ? 0 : scripts.size(); return scripts;
}
public List<String> getLoadedIdentifiers() {
List<String> 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() { public ScriptEngine getGlobalEngine() {
@ -152,4 +223,20 @@ public class JavascriptExpansion extends PlaceholderExpansion implements Cacheab
def.put("engine", "javascript"); def.put("engine", "javascript");
return def; 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;
}
} }

View File

@ -58,6 +58,9 @@ public class JavascriptPlaceholder {
Validate.notNull(identifier, "Identifier can not be null"); Validate.notNull(identifier, "Identifier can not be null");
Validate.notNull(script, "script can not be null"); Validate.notNull(script, "script can not be null");
this.engine = engine; this.engine = engine;
engine.put("Data", getData());
engine.put("BukkitServer", Bukkit.getServer());
engine.put("Expansion", JavascriptExpansion.getInstance());
this.identifier = identifier; this.identifier = identifier;
this.script = script; this.script = script;
File dir = new File(FILEDIR); File dir = new File(FILEDIR);
@ -108,8 +111,6 @@ public class JavascriptPlaceholder {
} }
engine.put("args", c); engine.put("args", c);
engine.put("Data", getData());
engine.put("BukkitServer", Bukkit.getServer());
engine.put("BukkitPlayer", p); engine.put("BukkitPlayer", p);
Object result = engine.eval(exp); Object result = engine.eval(exp);
return result != null ? PlaceholderAPI.setBracketPlaceholders(p, result.toString()) : ""; 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); PlaceholderAPIPlugin.getInstance().getLogger().severe("Error in javascript for placeholder - " + this.identifier);
ex.printStackTrace(); ex.printStackTrace();
} }
return "invalid javascript"; return "Script error";
} }
public ScriptData getData() { public ScriptData getData() {

View File

@ -173,7 +173,7 @@ public class JavascriptPlaceholdersConfig {
JavascriptPlaceholder pl = new JavascriptPlaceholder(engine, identifier, script); JavascriptPlaceholder pl = new JavascriptPlaceholder(engine, identifier, script);
boolean added = ex.addJavascriptPlaceholder(pl); boolean added = ex.addJSPlaceholder(pl);
if (added) { if (added) {
@ -185,7 +185,7 @@ public class JavascriptPlaceholdersConfig {
plugin.getLogger().warning("Javascript placeholder %javascript_" + identifier + "% is a duplicate!"); plugin.getLogger().warning("Javascript placeholder %javascript_" + identifier + "% is a duplicate!");
} }
} }
return ex.getJavascriptPlaceholdersAmount(); return ex.getAmountLoaded();
} }
private String getContents(File f) { private String getContents(File f) {