mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-07-09 15:27:45 +07:00
Mod event support
This commit is contained in:
@ -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"
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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("^(.+?)/(.+)");
|
||||
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user