diff --git a/docs/API-Reference.md b/docs/API-Reference.md index 8c8c39e..d707964 100644 --- a/docs/API-Reference.md +++ b/docs/API-Reference.md @@ -233,6 +233,7 @@ Walter Higgins * [utils.serverAddress() function](#utilsserveraddress-function) * [utils.watchFile() function](#utilswatchfile-function) * [utils.unwatchFile() function](#utilsunwatchfile-function) + * [utils.array() function](#utilsarray-function) * [Drone Plugin](#drone-plugin) * [TLDNR; (Just read this if you're impatient)](#tldnr-just-read-this-if-youre-impatient) * [Constructing a Drone Object](#constructing-a-drone-object) @@ -2904,6 +2905,16 @@ var utils = require('utils'); utils.unwatchFile( 'test.txt'); ``` +### utils.array() function + +Converts Java collection objects to type Javascript array so they can avail of +all of Javascript's Array goodness. + +#### Example + + var utils = require('utils'); + var worlds = utils.array(server.worlds); + ## Drone Plugin The Drone is a convenience class for building. It can be used for... diff --git a/docs/release-notes.md b/docs/release-notes.md index 8d05fc5..378b472 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -1,3 +1,6 @@ +# 2014 05 19 +Improved Tab Completion to work with Java Enums too. + # 2014 05 12 Turn off modality for conversations which are started via the 'input' module. diff --git a/src/main/js/lib/bukkit.js b/src/main/js/lib/bukkit.js new file mode 100644 index 0000000..bbbf532 --- /dev/null +++ b/src/main/js/lib/bukkit.js @@ -0,0 +1,26 @@ +var bukkit = { + stat: org.bukkit.Statistic, + stats: org.bukkit.Statistic, + material: org.bukkit.Material, + art: org.bukkit.Art, + mode: org.bukkit.GameMode, + sound: org.bukkit.Sound, + players: function(){ + var result = []; + for (var i = 0; i < server.onlinePlayers.length; i++){ + result.push(server.onlinePlayers[i]); + } + return result; + }, + worlds: function(){ + var result = []; + var lWorlds = server.worlds; + for (var i = 0; i < lWorlds.size(); i++){ + result.push(lWorlds.get(i)); + } + return result; + } +}; +module.exports = function( container ){ + container.bukkit = bukkit; +}; diff --git a/src/main/js/lib/java-utils.js b/src/main/js/lib/java-utils.js index e9405e1..aaa065e 100644 --- a/src/main/js/lib/java-utils.js +++ b/src/main/js/lib/java-utils.js @@ -3,7 +3,27 @@ exports.isJavaObject = function( o ) { return false; } if (o !== undefined && o !== null){ - return o.getClass ? true : false; + try { + // this throws error for java objects in jre7 + if (typeof o.constructor === 'function'){ + return false; + } + } catch (e){ + return true; + } + try { + var result = o.getClass ? true : false; // throws error for Enums/Class in jre7 + if (result == true){ + return result; + } + }catch (e2){ + // fail silently and move on to next test + } + // java classes don't have a getClass so just because .getClass isn't present + // doesn't mean it's not a Java Enum or Class (.getClass only works for object instances?) + if (o instanceof java.lang.Object){ + return true; + } } return o instanceof java.lang.Object; }; diff --git a/src/main/js/lib/scriptcraft.js b/src/main/js/lib/scriptcraft.js index bdb9848..d901f73 100644 --- a/src/main/js/lib/scriptcraft.js +++ b/src/main/js/lib/scriptcraft.js @@ -630,6 +630,7 @@ function __onEnable ( __engine, __plugin, __script ) org.bukkit.event.HandlerList['unregisterAll(org.bukkit.plugin.Plugin)'](__plugin); }); + require('bukkit')( global ); global.__onCommand = function( sender, cmd, label, args) { var jsArgs = [], diff --git a/src/main/js/lib/tabcomplete.js b/src/main/js/lib/tabcomplete.js index 514e7ba..97ac135 100644 --- a/src/main/js/lib/tabcomplete.js +++ b/src/main/js/lib/tabcomplete.js @@ -72,8 +72,18 @@ var _getProperties = function( o ) { } for ( i in o ) { if ( i.match( /^[^_]/ ) ) { - if ( typeof o[i] == 'function' ) { - result.push( i+'()' ); + if ( typeof o[i] == 'function'){ + if ( ! (o[i] instanceof java.lang.Object) ) { + try { + if (o[i].constructor){} // throws error for java objects in jre7 + result.push(i + '()'); + } catch (e ){ + result.push(i); + } + + }else { + result.push( i ); + } } else { result.push( i ); } @@ -146,7 +156,13 @@ var onTabCompleteJS = function( result, cmdSender, pluginCmd, cmdAlias, cmdArgs if ( !name ) { // fix issue #115 break; } - symbol = symbol[name]; // this causes problem in jre8 if name is '' + try { + // this causes problems in jre if symbol is an enum and name is partial-match + symbol = symbol[name]; // this causes problem in jre8 if name is '' + } catch (e){ + symbol = null; + break; + } if ( typeof symbol == 'undefined' ) { break; } diff --git a/src/main/js/modules/items.js b/src/main/js/modules/items.js index da485a6..080a9a6 100644 --- a/src/main/js/modules/items.js +++ b/src/main/js/modules/items.js @@ -15,7 +15,7 @@ for (var i = 0;i < materials.length; i++ ){ items[name] = (function(material){ return function(amount){ if (typeof amount == 'undefined'){ - amount = 1; + return material; } if (typeof amount == 'number'){ return new bkItemStack(material, amount); diff --git a/src/main/js/modules/utils/utils.js b/src/main/js/modules/utils/utils.js index ac86768..a47f387 100644 --- a/src/main/js/modules/utils/utils.js +++ b/src/main/js/modules/utils/utils.js @@ -557,3 +557,37 @@ function fileWatcher() { setTimeout( fileWatcher, 5000 ); }; setTimeout( fileWatcher, 5000 ); +/************************************************************************** +### utils.array() function + +Converts Java collection objects to type Javascript array so they can avail of +all of Javascript's Array goodness. + +#### Example + + var utils = require('utils'); + var worlds = utils.array(server.worlds); + +***/ +exports.array = function( ){ + var result = [], + javaArray = null, + i = 0; + if (arguments[0] instanceof java.util.Collection){ + // it's a java collection + javaArray = arguments[0].toArray(); + for ( ;i < javaArray.length; i++) { + result.push(javaArray[i]); + } + } else if (arguments[0].constructor === Array){ + // it's a javascript array + return arguments[0]; + } else if (arguments[0].length) { + // it's a java array + javaArray = arguments[0]; + for ( ;i < javaArray.length; i++) { + result.push(javaArray[i]); + } + } + return result; +};