Skip to content

Commit

Permalink
Added MineQueryLoader for setting up JS
Browse files Browse the repository at this point in the history
MineQueryLoader loads script files and sets up the JS environment for
use within minequery.
  • Loading branch information
cody-code-wy committed Oct 27, 2016
1 parent 4a57c67 commit fc0e7f9
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 0 deletions.
21 changes: 21 additions & 0 deletions src/main/java/tech/unstable/mineQuery/QueryMod.java
@@ -1,11 +1,17 @@
package tech.unstable.mineQuery;

import java.io.File;
import java.io.IOException;

import org.apache.logging.log4j.Logger;

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import tech.unstable.mineQuery.engine.MineQueryLoader;
import tech.unstable.mineQuery.eventHandlers.CommonHandlers;

/**
Expand All @@ -32,6 +38,21 @@ public void preInit(FMLPreInitializationEvent preinit){

MinecraftForge.EVENT_BUS.register(new CommonHandlers());


scripts = new File(preinit.getModConfigurationDirectory().toPath()+"/minequery-scripts");
if ( !scripts.exists() ) {
scripts.mkdir();
}

for(File f : scripts.listFiles()){
try {
MineQueryLoader.loadScript(f);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

@EventHandler
Expand Down
Expand Up @@ -25,5 +25,8 @@ public void eval(JsEvent event){


public void fire(JsEvent event){
Context cx = Context.enter();
NativeJavaObject thiz = new NativeJavaObject(cx.initStandardObjects(), event.getValidSelector(), Object.class);
function.call(cx, MineQueryLoader.getGlobalScope("FUNCTION"), thiz, new Object[]{event}); // TODO replace with script's name
}
}
42 changes: 42 additions & 0 deletions src/main/java/tech/unstable/mineQuery/engine/MineQueryLoader.java
@@ -0,0 +1,42 @@
package tech.unstable.mineQuery.engine;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

import org.mozilla.javascript.Context;
import org.mozilla.javascript.RhinoException;
import org.mozilla.javascript.Scriptable;

import tech.unstable.mineQuery.QueryMod;
import tech.unstable.mineQuery.jsHelers.JsConsole;

public class MineQueryLoader {

public static void loadScript(File script) throws IOException{
Reader src = null;
try {
src = new FileReader(script);
Context cx = Context.enter();
cx.evaluateReader(getGlobalScope(script.getName()), src, script.getName(), 0, null);
} catch (RhinoException ex) {
QueryMod.logger.error(ex.getMessage() + " from " + ex.sourceName());
QueryMod.logger.error(ex.sourceName() + " : " + ex.lineNumber());
} finally {
src.close();
}
}

public static Scriptable getGlobalScope(String scriptName) {
Context cx = Context.enter();
Scriptable scope = cx.initStandardObjects();

scope.put("console", scope, new JsConsole(QueryMod.logger, scriptName));
scope.put("$", scope, new MineQuery());
scope.put("Minecraft", scope, null); // TODO

return scope;
}

}

0 comments on commit fc0e7f9

Please sign in to comment.