Merge pull request #154 from pvginkel/master

Fixed class loader of the script engine.
This commit is contained in:
Walter Higgins 2014-09-22 13:22:38 +01:00
commit 0906f61575

View file

@ -1,13 +1,16 @@
package net.walterhiggins.scriptcraft; package net.walterhiggins.scriptcraft;
import java.io.InputStreamReader; import org.bukkit.command.Command;
import javax.script.*; import org.bukkit.command.CommandSender;
import java.util.List;
import java.util.ArrayList;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.command.*;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class ScriptCraftPlugin extends JavaPlugin implements Listener public class ScriptCraftPlugin extends JavaPlugin implements Listener
{ {
@ -19,12 +22,15 @@ public class ScriptCraftPlugin extends JavaPlugin implements Listener
@Override @Override
public void onEnable() public void onEnable()
{ {
Thread currentThread = Thread.currentThread();
ClassLoader previousClassLoader = currentThread.getContextClassLoader();
currentThread.setContextClassLoader(getClassLoader());
try{ try{
ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngineManager factory = new ScriptEngineManager();
this.engine = factory.getEngineByName("JavaScript"); this.engine = factory.getEngineByName("JavaScript");
if (this.engine == null){ if (this.engine == null){
this.getLogger().severe(NO_JAVASCRIPT_MESSAGE); this.getLogger().severe(NO_JAVASCRIPT_MESSAGE);
} else { } else {
Invocable inv = (Invocable)this.engine; Invocable inv = (Invocable)this.engine;
this.engine.eval(new InputStreamReader(this.getResource("boot.js"))); this.engine.eval(new InputStreamReader(this.getResource("boot.js")));
inv.invokeFunction("__scboot", this, engine); inv.invokeFunction("__scboot", this, engine);
@ -32,6 +38,8 @@ public class ScriptCraftPlugin extends JavaPlugin implements Listener
}catch(Exception e){ }catch(Exception e){
e.printStackTrace(); e.printStackTrace();
this.getLogger().severe(e.getMessage()); this.getLogger().severe(e.getMessage());
}finally{
currentThread.setContextClassLoader(previousClassLoader);
} }
} }
public List<String> onTabComplete(CommandSender sender, Command cmd, public List<String> onTabComplete(CommandSender sender, Command cmd,
@ -62,7 +70,7 @@ public class ScriptCraftPlugin extends JavaPlugin implements Listener
this.getLogger().severe(NO_JAVASCRIPT_MESSAGE); this.getLogger().severe(NO_JAVASCRIPT_MESSAGE);
return false; return false;
} }
try { try {
jsResult = ((Invocable)this.engine).invokeFunction("__onCommand", sender, cmd, label, args); jsResult = ((Invocable)this.engine).invokeFunction("__onCommand", sender, cmd, label, args);
}catch (Exception se){ }catch (Exception se){
this.getLogger().severe(se.toString()); this.getLogger().severe(se.toString());