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/src/main/resources/boot.js
2014-12-23 14:31:20 +00:00

99 lines
2.7 KiB
JavaScript

/*
This file is the first and only file executed directly from the Java Plugin.
*/
var __scboot = null;
(function(){
var File = java.io.File,
FileReader = java.io.FileReader,
FileOutputStream = java.io.FileOutputStream,
ZipInputStream = java.util.zip.ZipInputStream,
//jsPlugins = new File('plugins/scriptcraft'),
jsPlugins = new File('scriptcraft'),
initScript = 'lib/scriptcraft.js';
var unzip = function(zis, logger) {
var entry,
reason = null,
unzipFile = false,
zTime = 0,
fTime = 0,
fout = null,
c,
newFile;
while ( ( entry = zis.nextEntry ) != null ) {
newFile = new File(jsPlugins, entry.name);
if (entry.isDirectory()){
newFile.mkdirs();
zis.closeEntry();
continue;
}
reason = null;
zTime = entry.time;
unzipFile = false;
if (!newFile.exists()) {
reason = 'NE';
unzipFile = true;
}else{
fTime = newFile.lastModified();
if (zTime > fTime) {
reason = ((zTime - fTime) / 3600000) + "h";
unzipFile = true;
}
}
if (unzipFile) {
logger.info('Unzipping ' + newFile.canonicalPath + ' (' + reason + ')' );
fout = new FileOutputStream(newFile);
for (c = zis.read(); c != -1; c = zis.read()) {
fout.write(c);
}
fout.close();
}
zis.closeEntry();
}
zis.close();
};
/*
Called from Java plugin
*/
__scboot = function ( plugin, engine, classLoader )
{
var logger = plugin.canary ? plugin.logman : plugin.logger,
initScriptFile = new File(jsPlugins,initScript),
zips = ['lib','plugins','modules'],
i = 0,
zis,
len = zips.length;
if (!jsPlugins.exists()){
logger.info('Directory ' + jsPlugins.canonicalPath + ' does not exist.');
logger.info('Initializing ' + jsPlugins.canonicalPath + ' directory with contents from plugin archive.');
jsPlugins.mkdirs();
}
for (i = 0; i < len;i++){
if ( plugin.canary ) {
zis = new ZipInputStream(classLoader.getResourceAsStream(zips[i] + '.zip'));
unzip( zis, logger );
} else {
if ( plugin.config.getBoolean('extract-js.' + zips[i]) ) {
zis = new ZipInputStream(plugin.getResource(zips[i] + '.zip'));
unzip( zis, logger );
}
}
}
if (plugin.bukkit) {
plugin.saveDefaultConfig();
}
try {
engine.eval(new FileReader(initScriptFile));
__onEnable(engine, plugin, initScriptFile);
}catch ( e ){
var msg = 'Error evaluating ' + initScriptFile + ': ' + e;
plugin.canary ? logger.error(msg) : logger.severe(msg);
throw e;
}
};
})();