From 588c7afe7ebb2e656898a071974e2d14f62a0e07 Mon Sep 17 00:00:00 2001 From: walterhiggins Date: Mon, 7 Jan 2013 23:51:49 +0000 Subject: [PATCH] reorg --- bukkit-plugin/ScriptCraft/plugin.yml | 9 - .../scriptcraft/IScriptCraft.java | 12 - .../scriptcraft/ScriptCraftBukkit.java | 132 -------- .../scriptcraft/ScriptCraftEvaluator.java | 300 ------------------ .../scriptcraft/ScriptCraftPlugin.java | 64 ---- 5 files changed, 517 deletions(-) delete mode 100644 bukkit-plugin/ScriptCraft/plugin.yml delete mode 100644 bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/IScriptCraft.java delete mode 100644 bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/ScriptCraftBukkit.java delete mode 100644 bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/ScriptCraftEvaluator.java delete mode 100644 bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/ScriptCraftPlugin.java diff --git a/bukkit-plugin/ScriptCraft/plugin.yml b/bukkit-plugin/ScriptCraft/plugin.yml deleted file mode 100644 index ca6558d..0000000 --- a/bukkit-plugin/ScriptCraft/plugin.yml +++ /dev/null @@ -1,9 +0,0 @@ -name: ScriptCraftPlugin -main: net.walterhiggins.scriptcraft.ScriptCraftPlugin -version: 0.01 -commands: - js: - description: Evaluate javascript. - usage: / Javascript code - permission: ScriptCraftPlugin.js - permission-message: You don't have diff --git a/bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/IScriptCraft.java b/bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/IScriptCraft.java deleted file mode 100644 index bc46048..0000000 --- a/bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/IScriptCraft.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.walterhiggins.scriptcraft; - -public interface IScriptCraft -{ - public double[] getPlayerPos(); - public double[] getMousePos(); - public void putSign(String[] texts,int x, int y, int z, int block, int meta); - public void putBlock(int x, int y, int z, int blockId, int meta); - public String getBlock(int x, int y, int z); - public void notifyAdministrators(String message); - public void setInvoker(Object invoker); -} diff --git a/bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/ScriptCraftBukkit.java b/bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/ScriptCraftBukkit.java deleted file mode 100644 index ad8ee8a..0000000 --- a/bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/ScriptCraftBukkit.java +++ /dev/null @@ -1,132 +0,0 @@ -package net.walterhiggins.scriptcraft; -import java.util.Set; - -import org.bukkit.command.*; -import org.bukkit.entity.*; -import org.bukkit.block.*; -import org.bukkit.Location; -import org.bukkit.OfflinePlayer; -import org.bukkit.World; -import org.bukkit.plugin.java.JavaPlugin; - -public class ScriptCraftBukkit implements IScriptCraft -{ - /* (non-Javadoc) - * @see net.walterhiggins.scriptcraft.IScriptCraft#putSign(java.lang.String[], int, int, int, int, int) - */ - @Override - public void putSign(String[] texts, int x, int y, int z, int blockId, int meta) { - // TODO Auto-generated method stub - putBlock(x,y,z,blockId,meta); - Block block = this.getBlockObjectAt(x, y, z); - BlockState blockState = block.getState(); - if (blockState instanceof Sign){ - Sign sign = (Sign)blockState; - for (int i = 0; i < texts.length;i++){ - sign.setLine(i%4, texts[i]); - } - sign.update(true); - } - } - private void _putBlock(World world,int x, int y, int z, int blockId, int meta){ - Block block = world.getBlockAt(x, y, z); - block.setTypeId(blockId); - block.setData((byte)meta); - // TODO - add support for trees. - } - /* (non-Javadoc) - * @see net.walterhiggins.scriptcraft.IScriptCraft#putBlock(int, int, int, int, int) - */ - @Override - public void putBlock(int x, int y, int z, int blockId, int meta) { - World world = this.getInvokerWorld(); - this._putBlock(world, x, y, z, blockId, meta); - } - private final World getInvokerWorld(){ - if (this.invoker instanceof Player){ - Player player = (Player)this.invoker; - return player.getLocation().getWorld(); - } - if (this.invoker instanceof BlockCommandSender){ - BlockCommandSender bcs = (BlockCommandSender)this.invoker; - return bcs.getBlock().getLocation().getWorld(); - } - return null; - } - private final Block getBlockObjectAt(int x,int y, int z){ - World world = getInvokerWorld(); - if (world != null) - return world.getBlockAt(x, y, z); - return null; - } - /* (non-Javadoc) - * @see net.walterhiggins.scriptcraft.IScriptCraft#getBlock(int, int, int) - */ - @Override - public String getBlock(int x, int y, int z) { - Block block = this.getBlockObjectAt(x, y, z); - if (block !=null) - return "" + block.getTypeId() + ":" + block.getData(); - return null; - } - /* (non-Javadoc) - * @see net.walterhiggins.scriptcraft.IScriptCraft#notifyAdministrators(java.lang.String) - */ - @Override - public void notifyAdministrators(String message) { - - Set ops = this.plugin.getServer().getOperators(); - for (OfflinePlayer op : ops){ - if (op.isOnline()){ - op.getPlayer().chat(message); - } - } - this.plugin.getLogger().info(message); - } - protected JavaPlugin plugin = null; - public CommandSender invoker = null; - - public void setInvoker(Object invoker) - { - this.invoker = (CommandSender)invoker; - } - public ScriptCraftBukkit(JavaPlugin plugin){ - this.plugin = plugin; - } - public double[] getPlayerPos() - { - double[] result = new double[4]; - if (this.invoker instanceof Player){ - Player player = (Player)this.invoker; - Location location = player.getLocation(); - result[0] = location.getX(); - result[1] = location.getY(); - result[2] = location.getZ(); - result[3] = location.getYaw(); - return result; - }else{ - return null; - } - } - public double[] getMousePos() - { - double[] result = new double[4]; - if (this.invoker instanceof Player){ - Player player = (Player)this.invoker; - Block targetedBlock = player.getTargetBlock(null,5); - if (targetedBlock == null || targetedBlock.isEmpty()){ - return null; - } - Location location = targetedBlock.getLocation(); - result[0] = location.getX(); - result[1] = location.getY(); - result[2] = location.getZ(); - result[3] = location.getYaw(); - return result; - }else{ - return null; - } - } - - -} diff --git a/bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/ScriptCraftEvaluator.java b/bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/ScriptCraftEvaluator.java deleted file mode 100644 index 37a3e71..0000000 --- a/bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/ScriptCraftEvaluator.java +++ /dev/null @@ -1,300 +0,0 @@ -package net.walterhiggins.scriptcraft; - -import org.mozilla.javascript.*; -import java.util.List; -import java.io.*; -import javax.swing.JFileChooser; -import org.bukkit.entity.Player; - -public class ScriptCraftEvaluator -{ - protected static IScriptCraft sc = null; - protected Context ctx = null; - protected Scriptable scope = null; - - public static class MCScope extends ImporterTopLevel{ - /** - * - */ - private static final long serialVersionUID = 1L; - - public MCScope(Context ctx){ - super(ctx); - } - } - public ScriptCraftEvaluator(IScriptCraft scImpl) - { - ScriptCraftEvaluator.sc = scImpl; - this.ctx = Context.enter(); - ScriptableObject importer = new ScriptCraftEvaluator.MCScope(ctx); - this.scope = this.ctx.initStandardObjects(importer); - // - // for mcp debug only - //ctx.evaluateString(scope,"importPackage(net.minecraft.src)","",1,null); - // - String[] names = { - "print" - ,"load" - ,"help" - ,"getPlayerPos" - ,"getMousePos" - ,"putBlock" - ,"getBlock" - ,"putSign" - }; - importer.defineFunctionProperties(names, - ScriptCraftEvaluator.class, - ScriptableObject.DONTENUM); - } - /** - * So clients can add their own properties ... - * - * evaluator.getScope().defineProperty("jsVarName",javaObject); - */ - public ScriptableObject getScope() - { - return (ScriptableObject)this.scope; - } - // - // wph 20130105 - Only the console user should be able to load a script - // players should not be able to open scripts - // - private static Object invoker = null; - - - public Object eval(String javascript, Object invoker) - { - ScriptCraftEvaluator.invoker = invoker; - - ScriptCraftEvaluator.sc.setInvoker(invoker); - ScriptCraftEvaluator.sc.notifyAdministrators("js> " + javascript); - Object result = null; - try - { - result = ctx.evaluateString(this.scope, javascript, "", 1, null); - } - catch(Exception e) - { - e.printStackTrace(System.err); - ScriptCraftEvaluator.sc.notifyAdministrators("Exception: " + e.getMessage()); - } - if (result != null) - { - ScriptCraftEvaluator.sc.notifyAdministrators(Context.toString(result)); - } - return result; - } - protected static Object loadJsFile(File scriptFile,Context cx, Scriptable thisObj) - { - Object result = null; - FileReader in = null; - try { - in = new FileReader(scriptFile); - } - catch (FileNotFoundException ex) - { - ex.printStackTrace(System.err); - return null; - } - String filename = null; - String filedir = null; - File parentFile = null; - try{ - filename = scriptFile.getCanonicalPath().replaceAll("\\\\","/"); - parentFile = scriptFile.getParentFile(); - if (parentFile !=null){ - filedir = parentFile.getCanonicalPath().replaceAll("\\\\","/"); - } - }catch(IOException ioe){ - ioe.printStackTrace(System.err); - } - // - // setup the special script-context-only variables - // - ((ScriptableObject)thisObj).defineProperty("$SCRIPT",filename,ScriptableObject.DONTENUM); - ((ScriptableObject)thisObj).defineProperty("$SCRIPT_DIR",filedir==null?"":filedir,ScriptableObject.DONTENUM); - - try { - // Here we evalute the entire contents of the file as - // a script. Text is printed only if the print() function - // is called. - result = cx.evaluateReader(thisObj, in, filename, 1, null); - - } - catch (WrappedException we) { - we.printStackTrace(System.err); - String wes = we.getWrappedException().toString(); - ScriptCraftEvaluator.sc.notifyAdministrators("WrappedException while loading " + filename + ": " + wes); - System.err.println(wes); - we.printStackTrace(); - } - catch (EvaluatorException ee) { - ee.printStackTrace(System.err); - System.err.println("js: " + ee.getMessage()); - ScriptCraftEvaluator.sc.notifyAdministrators( "EvaluatorException while loading " + filename + ": " + ee.getMessage()); - } - catch (JavaScriptException jse) { - jse.printStackTrace(System.err); - System.err.println("js: " + jse.getMessage()); - ScriptCraftEvaluator.sc.notifyAdministrators("JavascriptException while loading " + filename + ": " + jse.getMessage()); - } - catch (IOException ioe) { - ioe.printStackTrace(System.err); - System.err.println(ioe.toString()); - ScriptCraftEvaluator.sc.notifyAdministrators( "IOException while loading " + filename + ": " + ioe.getMessage()); - } - finally { - try { - in.close(); - } - catch (IOException ioe) { - System.err.println(ioe.toString()); - } - } - return result; - } - /** - * Load a javascript source file and evaluate its contents. - */ - public static Object load(Context cx, Scriptable thisObj, Object[] args, Function funObj) - { - if (ScriptCraftEvaluator.invoker instanceof Player){ - ScriptCraftEvaluator.sc.notifyAdministrators(invoker.toString() + " tried to load a script.\n" + - "Only the console user can load scripts.\n" + - "Players cannot load scripts."); - return null; - } - - Object result = null; - - File scriptFile = null; - - if (args.length == 0) - { - JFileChooser fc = new javax.swing.JFileChooser(); - int rc = fc.showOpenDialog(null); - if (rc ==JFileChooser.APPROVE_OPTION){ - scriptFile = fc.getSelectedFile(); - }else{ - return result; - } - }else{ - scriptFile = new File((String)args[0]); - } - - result = loadJsFile(scriptFile,cx,thisObj); - return result; - - } - public static void help(Context cx, Scriptable thisObj, Object[] args, Function funObj) - { - String cwd = java.lang.System.getProperty("user.dir"); - String[] helpArgs = {"Current Working Directory: " + cwd, - "load('path-to-script.js')", - "load() (with no params) lets you choose a script file", - "getPlayerPos() returns player coords", - "getMousePos() returns mouse/crosshair coords", - "getBlock(x,y,z) returns the block and metadata e.g. '98' for a stone block or '98:2' for a mossy stone block", - "putBlock(x,y,z,blockId,meta) e.g. putBlock(100,2,50,44,2) puts a sandstone slab (44:2) at position 100,2,50. See http://www.minecraftinfo.com/idlist.htm for block ids" - }; - print(cx,thisObj,helpArgs,funObj); - } - - public static void print(Context cx, Scriptable thisObj,Object[] args, Function funObj) - { - for (int i=0; i < args.length; i++) { - if (i > 0){ - System.out.print(" "); - } - - // Convert the arbitrary JavaScript value into a string form. - String s = Context.toString(args[i]); - ScriptCraftEvaluator.sc.notifyAdministrators(s); - System.out.print(s); - } - System.out.println(); - } - public static double[] getPlayerPos(Context cx, Scriptable thisObj,Object[] args, Function funObj) - { - return ScriptCraftEvaluator.sc.getPlayerPos(); - } - public static double[] getMousePos(Context cx, Scriptable thisObj,Object[] args, Function funObj) - { - return ScriptCraftEvaluator.sc.getMousePos(); - } - public static void putBlock(Context cx, Scriptable thisObj,Object[] args, Function funObj) - { - int x; - int y; - int z; - int b; - int m; - - if (args.length == 2){ - double[] mousePos = ScriptCraftEvaluator.sc.getMousePos(); - if (mousePos != null){ - x = (int)mousePos[0]; - y = (int)mousePos[1]; - z = (int)mousePos[2]; - b = new Double(args[0].toString()).intValue(); - m = new Double(args[1].toString()).intValue(); - }else{ - return; - } - }else { - x = new Double(args[0].toString()).intValue(); - y = new Double(args[1].toString()).intValue(); - z = new Double(args[2].toString()).intValue(); - b = new Double(args[3].toString()).intValue(); - m = new Double(args[4].toString()).intValue(); - } - ScriptCraftEvaluator.sc.putBlock(x,y,z,b,m); - } - // - // gets the blockId and metadata at the given coords - // if no coords are provided then the mouse position is used instead. - // - public static String getBlock(Context cx, Scriptable thisObj,Object[] args, Function funObj){ - int x; - int y; - int z; - - if (args.length != 0){ - x = new Double(args[0].toString()).intValue(); - y = new Double(args[1].toString()).intValue(); - z = new Double(args[2].toString()).intValue(); - }else{ - double[] mousePos = ScriptCraftEvaluator.sc.getMousePos(); - if (mousePos != null){ - x = (int)mousePos[0]; - y = (int)mousePos[1]; - z = (int)mousePos[2]; - }else{ - return null; - } - } - return ScriptCraftEvaluator.sc.getBlock(x,y,z); - } - @SuppressWarnings("unchecked") - public static void putSign(Context cx, Scriptable thisObj,Object[] args, Function funObj){ - List jsArray = (List)args[0]; - - String[] texts = new String[4]; - int i = 0; - for (String s : jsArray){ - texts[i++] = s; - } - /* - for (int i = 0; i < jsArray.size() && i <= 3;i++){ - texts[i] = (String)jsArray.get(i); - } - */ - int x = new Double(args[1].toString()).intValue(); - int y = new Double(args[2].toString()).intValue(); - int z = new Double(args[3].toString()).intValue(); - int b = new Double(args[4].toString()).intValue(); - int m = new Double(args[5].toString()).intValue(); - ScriptCraftEvaluator.sc.putSign(texts,x,y,z,b,m); - } - -} diff --git a/bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/ScriptCraftPlugin.java b/bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/ScriptCraftPlugin.java deleted file mode 100644 index e691f88..0000000 --- a/bukkit-plugin/ScriptCraft/src/net/walterhiggins/scriptcraft/ScriptCraftPlugin.java +++ /dev/null @@ -1,64 +0,0 @@ -package net.walterhiggins.scriptcraft; -import java.io.File; - -import org.bukkit.plugin.java.JavaPlugin; -import org.bukkit.command.*; -import org.mozilla.javascript.*; - -public class ScriptCraftPlugin extends JavaPlugin -{ - // right now all ops share the same JS context/scope - // need to look at possibly having context/scope per operator - //protected Map playerContexts = new HashMap(); - protected ScriptCraftEvaluator evaluator = null; - - @Override - public void onEnable(){ - getLogger().info("ScriptCraft enabled."); - if (this.evaluator == null){ - this.evaluator = new ScriptCraftEvaluator(new ScriptCraftBukkit(this)); - this.evaluator.getScope().defineProperty("plugin", this, ScriptableObject.READONLY); - // - // Auto-load Javascript plugins from the js-plugins directory - // in the current working directory - // - String userDir = System.getProperty("user.dir"); - File jsPlugins = new File(userDir + System.getProperty("file.separator") + "js-plugins"); - if (jsPlugins.exists()){ - loadJsPlugins(jsPlugins); - } - } - } - // - // called recursively to load all js plugins in the js-plugins directory and - // sub-directories - // - private void loadJsPlugins (File directory){ - File[] files = directory.listFiles(); - for (File f: files){ - if (f.isDirectory()){ - loadJsPlugins(f); - }else{ - if (f.getAbsolutePath().endsWith(".js")){ - this.getLogger().info("Loading javascript source file " + f); - ScriptCraftEvaluator.loadJsFile(f,this.evaluator.ctx,this.evaluator.scope); - } - } - } - } - public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) - { - if(cmd.getName().equalsIgnoreCase("js")) - { - this.evaluator.getScope().defineProperty("self", sender, ScriptableObject.DONTENUM); - String javascriptCode = ""; - for (int i = 0;i < args.length; i++){ - javascriptCode = javascriptCode + args[i] + " "; - } - this.evaluator.eval(javascriptCode, sender); - return true; - } - return false; - } - -}