Mod event support

This commit is contained in:
Anuken
2020-05-04 17:57:08 -04:00
parent 8876c673f7
commit a4bd1dcc6d
4 changed files with 81 additions and 54 deletions

View File

@ -2,6 +2,10 @@ const log = function(context, obj){
Vars.mods.getScripts().log(context, String(obj))
}
const onEvent = function(event, handler){
Vars.mods.getScripts().onEvent(EventType[event], handler)
}
var scriptName = "base.js"
var modName = "none"

View File

@ -4,6 +4,10 @@ const log = function(context, obj){
Vars.mods.getScripts().log(context, String(obj))
}
const onEvent = function(event, handler){
Vars.mods.getScripts().onEvent(EventType[event], handler)
}
var scriptName = "base.js"
var modName = "none"
@ -20,67 +24,67 @@ const extend = function(classType, params){
const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer}))
Call = Packages.mindustry.gen.Call
importPackage(Packages.mindustry.ctype)
importPackage(Packages.mindustry.gen)
importPackage(Packages.arc.func)
importPackage(Packages.mindustry.type)
importPackage(Packages.mindustry.core)
importPackage(Packages.mindustry.world.blocks.sandbox)
importPackage(Packages.mindustry.ui.dialogs)
importPackage(Packages.arc.scene.ui)
importPackage(Packages.mindustry.input)
importPackage(Packages.mindustry.world.blocks.logic)
importPackage(Packages.mindustry.entities.def)
importPackage(Packages.mindustry.game)
importPackage(Packages.arc.math)
importPackage(Packages.mindustry.world.blocks.distribution)
importPackage(Packages.mindustry.world.blocks.production)
importPackage(Packages.mindustry.ai)
importPackage(Packages.arc.func)
importPackage(Packages.mindustry.entities)
importPackage(Packages.mindustry.gen)
importPackage(Packages.mindustry.core)
importPackage(Packages.mindustry.world.blocks.storage)
importPackage(Packages.arc.scene.ui.layout)
importPackage(Packages.arc.scene.ui)
importPackage(Packages.mindustry.ai.formations.patterns)
importPackage(Packages.mindustry.world.blocks.distribution)
importPackage(Packages.mindustry.ui)
importPackage(Packages.mindustry.content)
importPackage(Packages.mindustry.world.meta.values)
importPackage(Packages.mindustry.world)
importPackage(Packages.mindustry.world.meta)
importPackage(Packages.arc.scene.style)
importPackage(Packages.mindustry.world.blocks.liquid)
importPackage(Packages.arc.struct)
importPackage(Packages.arc.graphics.g2d)
importPackage(Packages.mindustry.world.blocks)
importPackage(Packages.mindustry.world.modules)
importPackage(Packages.arc.util)
importPackage(Packages.mindustry.maps.generators)
importPackage(Packages.arc.graphics)
importPackage(Packages.mindustry.entities.def)
importPackage(Packages.arc.scene.actions)
importPackage(Packages.mindustry.graphics)
importPackage(Packages.mindustry.entities.bullet)
importPackage(Packages.mindustry.async)
importPackage(Packages.mindustry.world.blocks.legacy)
importPackage(Packages.mindustry.world.blocks.experimental)
importPackage(Packages.mindustry.editor)
importPackage(Packages.mindustry.world.blocks.defense.turrets)
importPackage(Packages.arc)
importPackage(Packages.arc.scene.utils)
importPackage(Packages.arc.scene.event)
importPackage(Packages.mindustry.ui)
importPackage(Packages.mindustry.entities.bullet)
importPackage(Packages.mindustry.graphics.g3d)
importPackage(Packages.arc.math.geom)
importPackage(Packages.arc.scene.ui.layout)
importPackage(Packages.mindustry.world.blocks.liquid)
importPackage(Packages.mindustry.world.blocks.environment)
importPackage(Packages.mindustry.world.blocks.experimental)
importPackage(Packages.mindustry.world.blocks.defense)
importPackage(Packages.mindustry.maps.filters)
importPackage(Packages.mindustry.world.blocks.storage)
importPackage(Packages.mindustry.graphics)
importPackage(Packages.mindustry.world.blocks.power)
importPackage(Packages.arc.scene.actions)
importPackage(Packages.mindustry.ui.fragments)
importPackage(Packages.mindustry.ai.formations)
importPackage(Packages.mindustry.world.modules)
importPackage(Packages.arc.graphics)
importPackage(Packages.mindustry.maps.generators)
importPackage(Packages.mindustry.world.producers)
importPackage(Packages.mindustry.world.blocks.units)
importPackage(Packages.mindustry.ui.layout)
importPackage(Packages.arc.util)
importPackage(Packages.mindustry.world.blocks.production)
importPackage(Packages.mindustry.world.blocks.sandbox)
importPackage(Packages.mindustry.input)
importPackage(Packages.mindustry.world.consumers)
importPackage(Packages.mindustry.world.blocks.defense)
importPackage(Packages.mindustry.ai.formations)
importPackage(Packages.mindustry.type)
importPackage(Packages.arc.scene.event)
importPackage(Packages.mindustry.ui.fragments)
importPackage(Packages.mindustry.world.blocks.units)
importPackage(Packages.arc.scene.utils)
importPackage(Packages.mindustry.ui.dialogs)
importPackage(Packages.mindustry.graphics.g3d)
importPackage(Packages.mindustry.world.meta)
importPackage(Packages.arc.math)
importPackage(Packages.mindustry.world.blocks.payloads)
importPackage(Packages.mindustry.maps)
importPackage(Packages.arc.scene)
importPackage(Packages.mindustry.async)
importPackage(Packages.mindustry.entities)
importPackage(Packages.mindustry.world)
importPackage(Packages.arc.scene.style)
importPackage(Packages.mindustry.world.blocks)
importPackage(Packages.arc.math.geom)
importPackage(Packages.mindustry.ai)
importPackage(Packages.mindustry.maps.filters)
importPackage(Packages.arc.graphics.g2d)
importPackage(Packages.mindustry.world.blocks.environment)
importPackage(Packages.mindustry)
importPackage(Packages.mindustry.entities.units)
importPackage(Packages.mindustry.ctype)
importPackage(Packages.mindustry.ai.types)
importPackage(Packages.mindustry.maps)
importPackage(Packages.mindustry.world.meta.values)
importPackage(Packages.mindustry.world.producers)
importPackage(Packages.mindustry.ui.layout)
importPackage(Packages.arc.scene)
importPackage(Packages.mindustry.maps.planet)
importPackage(Packages.mindustry.world.blocks.logic)
importPackage(Packages.arc)

View File

@ -2,6 +2,7 @@ package mindustry.mod;
import arc.*;
import arc.files.*;
import arc.func.*;
import arc.struct.*;
import arc.util.*;
import arc.util.Log.*;
@ -18,12 +19,13 @@ import java.util.regex.*;
public class Scripts implements Disposable{
private final Array<String> blacklist = Array.with("net", "files", "reflect", "javax", "rhino", "file", "channels", "jdk",
"runtime", "util.os", "rmi", "security", "org.", "sun.", "beans", "sql", "http", "exec", "compiler", "process", "system",
".awt", "socket", "classloader", "oracle", "invoke");
".awt", "socket", "classloader", "oracle", "invoke", "arc.events");
private final Array<String> whitelist = Array.with("mindustry.net", "netserver", "netclient", "com.sun.proxy.$proxy");
private final Context context;
private Scriptable scope;
private boolean errored;
private LoadedMod currentMod = null;
private Array<EventHandle> events = new Array<>();
public Scripts(){
Time.mark();
@ -76,6 +78,11 @@ public class Scripts implements Disposable{
Log.log(level, "[@]: @", source, message);
}
public <T> void onEvent(Class<T> type, Cons<T> listener){
Events.on(type, listener);
events.add(new EventHandle(type, listener));
}
public void run(LoadedMod mod, Fi file){
currentMod = mod;
run(file.readString(), file.name());
@ -101,9 +108,23 @@ public class Scripts implements Disposable{
@Override
public void dispose(){
for(EventHandle e : events){
Events.remove(e.type, e.listener);
}
events.clear();
Context.exit();
}
private static class EventHandle{
Class type;
Cons listener;
public EventHandle(Class type, Cons listener){
this.type = type;
this.listener = listener;
}
}
private class ScriptModuleProvider extends UrlModuleSourceProvider{
private Pattern directory = Pattern.compile("^(.+?)/(.+)");

View File

@ -81,9 +81,7 @@ public class PlanetDialog extends FloatingDialog{
}
});
Events.on(ResizeEvent.class, e -> {
makeBloom();
});
Events.on(ResizeEvent.class, e -> makeBloom());
buttons.defaults().size(220f, 64f).pad(0f);