From c7e2eeed8570c1b6479e419646781bb4a87220f2 Mon Sep 17 00:00:00 2001 From: walterhiggins Date: Sat, 3 Jan 2015 09:50:37 +0000 Subject: [PATCH] minor tweaks to fort, ladder, sign and young person's guide. --- ...YoungPersonsGuideToProgrammingMinecraft.md | 30 ++++--- src/docs/templates/ypgpm.md | 30 ++++--- src/main/js/plugins/drone/contrib/fort.js | 5 +- .../js/plugins/drone/contrib/lcd-clock.js | 85 ++++++++++--------- src/main/js/plugins/drone/ladder.js | 21 +++-- src/main/js/plugins/drone/sign.js | 16 ++-- 6 files changed, 105 insertions(+), 82 deletions(-) diff --git a/docs/YoungPersonsGuideToProgrammingMinecraft.md b/docs/YoungPersonsGuideToProgrammingMinecraft.md index 76b1596..b708159 100644 --- a/docs/YoungPersonsGuideToProgrammingMinecraft.md +++ b/docs/YoungPersonsGuideToProgrammingMinecraft.md @@ -818,7 +818,8 @@ through arrays. The following loop prints out all of the players on the server... ```javascript -var players = server.onlinePlayers; +var utils = require('utils'); +var players = utils.players(); var i = 0; while ( i < players.length ) { console.log( players[i] ); @@ -847,7 +848,9 @@ loops. utils.foreach() takes two parameters... Let's see it in action, the following code will `console.log()` (print) the name of each online player in the server console window... - utils.foreach( server.onlinePlayers, console.log ); + var utils = require('utils'); + var players = utils.players; + utils.foreach( players, console.log ); ... in the above example, the list of online players is processed one at a time and each item (player) is passed to the `console.log` @@ -863,8 +866,9 @@ utils.foreach() function... give every player the ability to fly. */ var utils = require('utils'); -utils.foreach( server.onlinePlayers, function( player ) { - player.setAllowFlight(true); +var players = utils.players(); +utils.foreach( players, function( player ) { + player.capabilities.setMayFly(true); } ); ``` @@ -875,19 +879,21 @@ utils.foreach( server.onlinePlayers, function( player ) { Play a Cat's Meow sound for each player. */ var utils = require('utils'); -utils.foreach( server.onlinePlayers, function( player ) { - player.playSound(player.location, - org.bukkit.Sound.CAT_MEOW, - 1, - 1); +var players = utils.players(); +var sounds = require('sounds'); +utils.foreach( players, function( player ) { + sounds.catMeow( player ); } ); ``` ### Exercise Try changing the above function so that different sounds are played -instead of a Cat's Meow. You'll need to lookup the [CanaryMod API's -Sound class][soundapi] to see all of the possible sounds that can be -played. +instead of a Cat's Meow. To see all of the possible sounds that can be +played, load the sounds module at the in-game prompt using the following statement: + + /js var sounds = require('sounds'); + +... then type `/js sounds.` and press the TAB key to see a list of all possible sounds. Loops are a key part of programming in any language. Javascript provides `for` and `while` statements for looping and many javascript diff --git a/src/docs/templates/ypgpm.md b/src/docs/templates/ypgpm.md index ecb7a7c..5189f3b 100644 --- a/src/docs/templates/ypgpm.md +++ b/src/docs/templates/ypgpm.md @@ -782,7 +782,8 @@ through arrays. The following loop prints out all of the players on the server... ```javascript -var players = server.onlinePlayers; +var utils = require('utils'); +var players = utils.players(); var i = 0; while ( i < players.length ) { console.log( players[i] ); @@ -811,7 +812,9 @@ loops. utils.foreach() takes two parameters... Let's see it in action, the following code will `console.log()` (print) the name of each online player in the server console window... - utils.foreach( server.onlinePlayers, console.log ); + var utils = require('utils'); + var players = utils.players; + utils.foreach( players, console.log ); ... in the above example, the list of online players is processed one at a time and each item (player) is passed to the `console.log` @@ -827,8 +830,9 @@ utils.foreach() function... give every player the ability to fly. */ var utils = require('utils'); -utils.foreach( server.onlinePlayers, function( player ) { - player.setAllowFlight(true); +var players = utils.players(); +utils.foreach( players, function( player ) { + player.capabilities.setMayFly(true); } ); ``` @@ -839,19 +843,21 @@ utils.foreach( server.onlinePlayers, function( player ) { Play a Cat's Meow sound for each player. */ var utils = require('utils'); -utils.foreach( server.onlinePlayers, function( player ) { - player.playSound(player.location, - org.bukkit.Sound.CAT_MEOW, - 1, - 1); +var players = utils.players(); +var sounds = require('sounds'); +utils.foreach( players, function( player ) { + sounds.catMeow( player ); } ); ``` ### Exercise Try changing the above function so that different sounds are played -instead of a Cat's Meow. You'll need to lookup the [CanaryMod API's -Sound class][soundapi] to see all of the possible sounds that can be -played. +instead of a Cat's Meow. To see all of the possible sounds that can be +played, load the sounds module at the in-game prompt using the following statement: + + /js var sounds = require('sounds'); + +... then type `/js sounds.` and press the TAB key to see a list of all possible sounds. Loops are a key part of programming in any language. Javascript provides `for` and `while` statements for looping and many javascript diff --git a/src/main/js/plugins/drone/contrib/fort.js b/src/main/js/plugins/drone/contrib/fort.js index 1b6d6ff..b51f87b 100644 --- a/src/main/js/plugins/drone/contrib/fort.js +++ b/src/main/js/plugins/drone/contrib/fort.js @@ -1,3 +1,4 @@ +'use strict'; var Drone = require('../drone').Drone; var blocks = require('blocks'); // @@ -6,8 +7,7 @@ var blocks = require('blocks'); function fort( side, height ) { var turret, i, - torch, - ladder; + torch; if ( typeof side == 'undefined' ) { side = 18; @@ -93,6 +93,7 @@ function fort( side, height ) { .right((side/2)-3) .fwd(1) // move inside fort .turn(2) + .box(blocks.air, 1, height-1, 1) .ladder(height-1) .move('fort'); } diff --git a/src/main/js/plugins/drone/contrib/lcd-clock.js b/src/main/js/plugins/drone/contrib/lcd-clock.js index 4bbf521..34baa9e 100644 --- a/src/main/js/plugins/drone/contrib/lcd-clock.js +++ b/src/main/js/plugins/drone/contrib/lcd-clock.js @@ -1,3 +1,5 @@ +'use strict'; +/*global require, setInterval, clearInterval, __plugin, exports*/ /* Experimental: Point at a block and issue the following ... @@ -7,68 +9,69 @@ ... start the clock... /js clock.stop24(); ... stops the clock... -*/ -var Drone = require('../drone').Drone; -var blocktype = require('../blocktype'); + */ +var Drone = require('../drone').Drone, + blocktype = require('../blocktype'), + blocks = require('blocks'); exports.LCDClock = function(drone, fgColor,bgColor,border) { - var lastSecs = [0,0,0,0], - world = drone.world, - intervalId = -1; + var lastSecs = [0,0,0,0], + world = drone.world, + intervalId = -1; + + function update(secs) { + var digits = [0,0,0,0], + s = secs % 60, + m = (secs - s) / 60; + digits[3] = s%10; + digits[2] = (s-digits[3])/10; + digits[1] = m%10; + digits[0] = (m-digits[1])/10; + // + // updating all 4 digits each time is expensive + // only update digits which have changed (in most cases - just 1) + // + if (digits[3] != lastSecs[3]) + drone.right(14).blocktype(''+digits[3],fgColor,bgColor).left(14); + if (digits[2] != lastSecs[2]) + drone.right(10).blocktype(''+digits[2],fgColor,bgColor).left(10); + if (digits[1] != lastSecs[1]) + drone.right(4).blocktype(''+digits[1], fgColor, bgColor).left(4); + if (digits[0] != lastSecs[0]) + drone.blocktype(''+digits[0], fgColor, bgColor); + + lastSecs[0] = digits[0]; + lastSecs[1] = digits[1]; + lastSecs[2] = digits[2]; + lastSecs[3] = digits[3]; + + } if ( typeof bgColor == 'undefined' ) { - bgColor = '35:15'; // black wool + bgColor = blocks.wool.black; } if ( typeof fgColor == 'undefined' ) { - fgColor = 35 ; // white wool + fgColor = blocks.wool.white ; // white wool } if ( border ) { drone.box(border,21,9,1); drone.up().right(); } - drone.blocktype('00:00',fgColor,bgColor); + drone.blocktype('00:00', fgColor, bgColor); return { start24: function( ) { - var clock = this; function tick() { - var rolloverMins = 24*60; - var timeOfDayInMins = Math.floor(((world.totalTime + 6000) % 24000) / 16.6667); + var rolloverMins = 24*60, + mcTime = __plugin.canary ? world.totalTime : world.time, + timeOfDayInMins = Math.floor(((mcTime + 6000) % 24000) / 16.6667); timeOfDayInMins = timeOfDayInMins % rolloverMins; - console.log('Minecraft time: ' + world.totalTime + ' timeOfDayInMins: ' + timeOfDayInMins); - clock.update(timeOfDayInMins); + update( timeOfDayInMins ); }; intervalId = setInterval(tick, 800); }, stop24: function() { clearInterval( intervalId ); - }, - update: function(secs) { - var digits = [0,0,0,0], - s = secs % 60; - m = (secs - s) / 60; - digits[3] = s%10; - digits[2] = (s-digits[3])/10; - digits[1] = m%10; - digits[0] = (m-digits[1])/10; - // - // updating all 4 digits each time is expensive - // only update digits which have changed (in most cases - just 1) - // - if (digits[3] != lastSecs[3]) - drone.right(14).blocktype(''+digits[3],fgColor,bgColor).left(14); - if (digits[2] != lastSecs[2]) - drone.right(10).blocktype(''+digits[2],fgColor,bgColor).left(10); - if (digits[1] != lastSecs[1]) - drone.right(4).blocktype(''+digits[1], fgColor, bgColor).left(4); - if (digits[0] != lastSecs[0]) - drone.blocktype(''+digits[0], fgColor, bgColor); - - lastSecs[0] = digits[0]; - lastSecs[1] = digits[1]; - lastSecs[2] = digits[2]; - lastSecs[3] = digits[3]; - } }; }; diff --git a/src/main/js/plugins/drone/ladder.js b/src/main/js/plugins/drone/ladder.js index 15a2d7e..78ef5e0 100644 --- a/src/main/js/plugins/drone/ladder.js +++ b/src/main/js/plugins/drone/ladder.js @@ -26,15 +26,18 @@ A ladder 10 blocks high will be created at the point you were looking at. ##### 3.0.3 ***/ var blocks = require('blocks'); + function ladder( height ){ - var block = this.getBlock(); - if (block.typeId == blocks.air || block.typeId == blocks.ladder){ - this.box(blocks.ladder, 1, height, 1); - } else { - this - .back() - .box(blocks.ladder, 1, height, 1) - .fwd(); - } + this.then(function ladderLater(){ + var block = this.getBlock(); + if (block.typeId == blocks.air || block.typeId == blocks.ladder){ + this.box(blocks.ladder, 1, height, 1); + } else { + this + .back() + .box(blocks.ladder, 1, height, 1) + .fwd(); + } + }); } Drone.extend( ladder ); diff --git a/src/main/js/plugins/drone/sign.js b/src/main/js/plugins/drone/sign.js index 670e4f0..9af69f2 100644 --- a/src/main/js/plugins/drone/sign.js +++ b/src/main/js/plugins/drone/sign.js @@ -59,6 +59,7 @@ To create a free-standing sign... ***/ function putSign( drone, texts, blockId, meta ) { var i, + len = texts.length, block, state, getState, @@ -74,23 +75,26 @@ function putSign( drone, texts, blockId, meta ) { var sign = block.getTileEntity(); return sign.setTextOnLine; }; - setLine = function( block, i, text) { + setLine = function( block, i) { var sign = block.getTileEntity(); - sign.setTextOnLine( text, i ); + sign.setTextOnLine( texts[i], i ); sign.update(); }; } if (__plugin.bukkit){ isSign = function(block){ return block.state && block.state.setLine; }; - setLine = function( block, i, text) { + setLine = function( block, i) { var sign = block.state; - sign.setLine( i, text ); + sign.setLine( i, texts[i] ); sign.update(true); }; } if ( isSign(block) ) { - for ( i = 0; i < texts.length; i++ ) { - setLine(block, i % 4, texts[ i ] ); + if (len > 4){ + len = 4; + } + for ( i = 0; i < len; i++ ) { + setLine(block, i, texts[ i ] ); } } };