This repository has been archived on 2021-07-14. You can view files and clone it, but cannot push or open issues or pull requests.
scriptcraft/js-plugins/core/_scriptcraft.js

85 lines
2.4 KiB
JavaScript
Raw Normal View History

2013-01-08 00:59:42 +01:00
var global = this;
var ScriptCraft = ScriptCraft || {};
ScriptCraft.core = ScriptCraft.core || {};
//
// private implementation
//
(function(){
//
// don't execute this more than once
//
if (typeof load == "function")
return ;
var _originalScript = __script;
importPackage(java.io);
var _canonize = function(file){
return file.getCanonicalPath().replaceAll("\\\\","/");
};
var _load = function(filename){
print("loading " + filename);
var file = new File(filename);
if (file.exists()){
var parent = file.getParentFile();
var reader = new FileReader(file);
__engine.put("__script",_canonize(file));
__engine.put("__folder",(parent?_canonize(parent):"")+"/");
__engine.eval(reader);
}else{
print("Error: " + filename + " not found");
}
};
var _listJsFiles = function(store,dir)
{
if (typeof dir == "undefined"){
dir = new File(_originalScript).getParentFile().getParentFile();
}
var files = dir.listFiles();
for (var i = 0;i < files.length; i++){
if (files[i].isDirectory()){
_listJsFiles(store,files[i]);
}else{
if (files[i].getCanonicalPath().endsWith(".js") &&
!(files[i].getName().startsWith("_")))
{
store.push(files[i]);
}
}
}
};
var _reload = function(pluginDir)
{
var jsFiles = [];
_listJsFiles(jsFiles,pluginDir);
//
// script files whose name begins with _ (underscore)
// will not be loaded automatically at startup.
// These files are assumed to be dependencies/private to plugins
//
// E.g. If you have a plugin called myMiniGame.js in the myMiniGame directory
// and which in addition to myMiniGame.js also includes _myMiniGame_currency.js _myMiniGame_events.js etc.
// then it's assumed that _myMiniGame_currency.js and _myMiniGame_events.js will be loaded
// as dependencies by myMiniGame.js and do not need to be loaded via js reload
//
for (var i = 0;i < jsFiles.length; i++){
load(_canonize(jsFiles[i]));
}
};
ScriptCraft.core.load = _load;
ScriptCraft.core.reload = _reload;
for (var f in ScriptCraft.core){
global[f] = ScriptCraft.core[f];
}
ScriptCraft.core.initialized = true;
//
// assumes this was loaded from js-plugins/core/
//
reload(new File(__script).getParentFile().getParentFile());
}());