From d44a43e598c1f4f3f9068e97934a0406f1c3be97 Mon Sep 17 00:00:00 2001 From: walterhiggins Date: Wed, 25 Dec 2013 07:48:10 +0000 Subject: [PATCH] Fixed a bug in plugin code where stores were being trashed at startup --- build.properties | 3 +- build.xml | 2 +- src/main/javascript/lib/plugin.js | 9 ++-- src/main/javascript/lib/require.js | 54 ++++++------------- src/main/javascript/lib/scriptcraft.js | 11 +++- .../javascript/plugins/classroom/classroom.js | 2 +- 6 files changed, 35 insertions(+), 46 deletions(-) diff --git a/build.properties b/build.properties index f7c14f9..4ef2b33 100644 --- a/build.properties +++ b/build.properties @@ -1 +1,2 @@ -bukkit-version=1.6.4 +bukkit-version=1.7.2 +scriptcraft-version=2.0 diff --git a/build.xml b/build.xml index 3f64ef4..b845ae4 100644 --- a/build.xml +++ b/build.xml @@ -90,7 +90,7 @@ - + [[version]] diff --git a/src/main/javascript/lib/plugin.js b/src/main/javascript/lib/plugin.js index 1cea02d..f9b1027 100644 --- a/src/main/javascript/lib/plugin.js +++ b/src/main/javascript/lib/plugin.js @@ -36,12 +36,13 @@ var _plugin = function(/* String */ moduleName, /* Object */ moduleObject, isPer _plugins[moduleName] = pluginData; if (isPersistent){ + if (!moduleObject.store){ + moduleObject.store = {}; + } var loadedStore = load(dataDir.canonicalPath + "/" + moduleName + "-store.json"); if (loadedStore){ - moduleObject.store = loadedStore; - }else{ - if (!moduleObject.store){ - moduleObject.store = {}; + for (var i in loadedStore){ + moduleObject.store[i] = loadedStore[i]; } } } diff --git a/src/main/javascript/lib/require.js b/src/main/javascript/lib/require.js index d7b0c59..fd08ee4 100644 --- a/src/main/javascript/lib/require.js +++ b/src/main/javascript/lib/require.js @@ -54,10 +54,12 @@ module specification, the '.js' suffix is optional. [cjsmodules]: http://wiki.commonjs.org/wiki/Modules/1.1.1. ***/ -( function (logger, evaluator, verbose, rootDir) { +( function (logger, evaluator, verbose, rootDir, modulePaths) { - if (verbose) + if (verbose){ logger.info("Setting up 'require' module system. Root Directory: " + rootDir); + logger.info("Module paths: " + JSON.stringify(modulePaths)); + } var File = java.io.File; @@ -84,9 +86,6 @@ module specification, the '.js' suffix is optional. } }; - var LIB_DIR = rootDir + '/lib/'; - var MODULE_DIR = rootDir + '/modules/'; - var resolveModuleToFile = function(moduleName, parentDir) { /********************************************************************** ## When resolving module names to file paths, ScriptCraft uses the following rules... @@ -120,6 +119,7 @@ module specification, the '.js' suffix is optional. 3.2 if no package.json file exists then look for an index.js file in the directory ***/ + var file = new File(moduleName); var fileExists = function(file) { @@ -137,41 +137,19 @@ module specification, the '.js' suffix is optional. if (moduleName.match(/^[^\.\/]/)){ // it's a module named like so ... 'events' , 'net/http' // - - var resolvedFile = new File(LIB_DIR + moduleName); - if (resolvedFile.exists()){ - - return fileExists(resolvedFile); - } else{ - - // try appending a .js to the end - resolvedFile = new File(LIB_DIR + moduleName + '.js'); + var resolvedFile; + for (var i = 0;i < modulePaths.length; i++){ + resolvedFile = new File(modulePaths[i] + moduleName); if (resolvedFile.exists()){ - - return resolvedFile; + return fileExists(resolvedFile); }else{ - - if (verbose){ - logger.info("File not found in " + LIB_DIR + ': ' + resolvedFile.canonicalPath); - } - - resolvedFile = new File(MODULE_DIR + moduleName); - if (resolvedFile.exists()){ - return fileExists(resolvedFile); - }else { - if (verbose){ - logger.info("File not found in " + MODULE_DIR + ': ' + resolvedFile.canonicalPath); - } - resolvedFile = new File(MODULE_DIR + moduleName + '.js'); - if (resolvedFile.exists()) - return resolvedFile; - else{ - - if (verbose){ - logger.info("File not found in " + MODULE_DIR + ': ' + resolvedFile.canonicalPath); - } - } - } + // try appending a .js to the end + resolvedFile = new File(modulePaths[i] + moduleName + '.js'); + if (resolvedFile.exists()) + return resolvedFile; + } + if (verbose){ + logger.info("Module " + moduleName + " not found in " + modulePaths[i]); } } } else { diff --git a/src/main/javascript/lib/scriptcraft.js b/src/main/javascript/lib/scriptcraft.js index 50ec87e..143fd0d 100644 --- a/src/main/javascript/lib/scriptcraft.js +++ b/src/main/javascript/lib/scriptcraft.js @@ -740,7 +740,16 @@ See [issue #69][issue69] for more information. global.addUnloadHandler = _addUnloadHandler; var fnRequire = load(jsPluginsRootDirName + '/lib/require.js',true); - global.require = fnRequire(__plugin.logger, __engine, config.verbose, jsPluginsRootDirName); + /* + setup paths to search for modules + */ + var modulePaths = [jsPluginsRootDirName + '/lib/', + jsPluginsRootDirName + '/modules/']; + global.require = fnRequire(__plugin.logger, + __engine, + config.verbose, + jsPluginsRootDirName, + modulePaths); var plugins = require('plugin'); diff --git a/src/main/javascript/plugins/classroom/classroom.js b/src/main/javascript/plugins/classroom/classroom.js index 19feab4..42ef205 100644 --- a/src/main/javascript/plugins/classroom/classroom.js +++ b/src/main/javascript/plugins/classroom/classroom.js @@ -75,7 +75,7 @@ exports.classroom = classroom; events.on('player.PlayerLoginEvent', function(listener, event) { var player = event.player; - if (classroom.store.enableScripting){ + if (_store.enableScripting){ player.addAttachment(__plugin, "scriptcraft.*", true); } }, "HIGHEST");