diff --git a/CommandScript.java b/CommandScript.java index 14d74f4..5caa81c 100644 --- a/CommandScript.java +++ b/CommandScript.java @@ -154,7 +154,12 @@ public class CommandScript extends CommandBase { } // Now evaluate the string we've colected. notifyAdmins(par1ICommandSender, "js> " + s, (Object[])args); - Object result = ctx.evaluateString(scope, s, "", 1, null); + Object result = null; + try { + result = ctx.evaluateString(scope, s, "", 1, null); + }catch(Exception e){ + notifyAdmins(par1ICommandSender, "ERROR: " + e.getMessage(), (Object[])args); + } if (result != null){ notifyAdmins(par1ICommandSender, Context.toString(result), (Object[])args); } diff --git a/drone.js b/drone.js index 201f576..7509e7c 100644 --- a/drone.js +++ b/drone.js @@ -338,7 +338,9 @@ var Drone = { // block dirs: 0 = east, 1 = west, 2 = south , 3 = north // sign dirs: 5 = east, 3 = south, 4 = west, 2 = north Drone.PLAYER_STAIRS_FACING = [0,2,1,3]; - Drone.PLAYER_SIGN_FACING = [4,2,5,3]; // for blocks 68 (wall signs) 65 (ladders) 61,62 (furnaces) 23 (dispenser) and 54 (chest) + // for blocks 68 (wall signs) 65 (ladders) 61,62 (furnaces) 23 (dispenser) and 54 (chest) + Drone.PLAYER_SIGN_FACING = [4,2,5,3]; + Drone.PLAYER_TORCH_FACING = [2,4,1,3]; Drone.prototype.prism0 = function(block,w,d){ this.prism(block,w,d).fwd().right().prism(0,w-2,d-2).left().back(); diff --git a/fort.js b/fort.js new file mode 100644 index 0000000..7302da2 --- /dev/null +++ b/fort.js @@ -0,0 +1,55 @@ +var scriptDir = $SCRIPT_DIR; +load(scriptDir + "/drone.js"); + +function fort(d, side, h) +{ + if (typeof d == "undefined") + d = new Drone(); + if (typeof side == "undefined") + side = 18; + if (typeof h == "undefined") + h = 6; + if (h < 4 || side < 10) + throw new java.lang.RuntimeException("Forts must be at least 9 wide X 4 tall"); + // make sure side is even + if (side%2) + side++; + var brick = 98; + // build walls. + d.chkpt('fort').box0(brick,side,h-1,side); + // + // build turrets + // + d.up(h-1); + for (i = 0;i <= 3;i++){ + var turret = []; + d.box(brick) // solid brick corners + .up().box('50:5').down() // light a torch on each corner + .fwd(); + turret.push('109:'+ Drone.PLAYER_STAIRS_FACING[d.dir]); + turret.push('109:'+ Drone.PLAYER_STAIRS_FACING[(d.dir+2)%4]); + d.box(turret,1,1,side-2).fwd(side-2).turn(); + } + // + // build battlements + // + d.move('fort'); + d.up(h-2).fwd().right().box('44:5',side-2,1,side-2); + var battlementWidth = 3; + if (side <= 12) + battlementWidth = 2; + + d.fwd(battlementWidth).right(battlementWidth).box(0,side-((1+battlementWidth)*2),1,side-((1+battlementWidth)*2)); + // + // add door + // + var torch = '50:' + Drone.PLAYER_TORCH_FACING[d.dir]; + d.move('fort').right((side/2)-1).door2() // double doors + .back().left().up().box(torch) // left torch + .right(3).box(torch); // right torch + // + // add ladder up to battlements + // + d.move('fort').right((side/2)-3).fwd(1).box('65:' + Drone.PLAYER_SIGN_FACING[(d.dir+2)%4], 1,h-1,1); + return d.move('fort'); +};