Merge pull request #154 from pvginkel/master
Fixed class loader of the script engine.
This commit is contained in:
commit
0906f61575
1 changed files with 17 additions and 9 deletions
|
@ -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());
|
||||||
|
|
Reference in a new issue