mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-07-13 01:07:30 +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))
|
Vars.mods.getScripts().log(context, String(obj))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const onEvent = function(event, handler){
|
||||||
|
Vars.mods.getScripts().onEvent(EventType[event], handler)
|
||||||
|
}
|
||||||
|
|
||||||
var scriptName = "base.js"
|
var scriptName = "base.js"
|
||||||
var modName = "none"
|
var modName = "none"
|
||||||
|
|
||||||
|
@ -4,6 +4,10 @@ const log = function(context, obj){
|
|||||||
Vars.mods.getScripts().log(context, String(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 scriptName = "base.js"
|
||||||
var modName = "none"
|
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}))
|
const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer}))
|
||||||
Call = Packages.mindustry.gen.Call
|
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.mindustry.game)
|
||||||
importPackage(Packages.arc.math)
|
importPackage(Packages.arc.func)
|
||||||
importPackage(Packages.mindustry.world.blocks.distribution)
|
importPackage(Packages.mindustry.entities)
|
||||||
importPackage(Packages.mindustry.world.blocks.production)
|
importPackage(Packages.mindustry.gen)
|
||||||
importPackage(Packages.mindustry.ai)
|
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.ai.formations.patterns)
|
||||||
|
importPackage(Packages.mindustry.world.blocks.distribution)
|
||||||
|
importPackage(Packages.mindustry.ui)
|
||||||
importPackage(Packages.mindustry.content)
|
importPackage(Packages.mindustry.content)
|
||||||
importPackage(Packages.mindustry.world.meta.values)
|
importPackage(Packages.mindustry.world.blocks.liquid)
|
||||||
importPackage(Packages.mindustry.world)
|
|
||||||
importPackage(Packages.mindustry.world.meta)
|
|
||||||
importPackage(Packages.arc.scene.style)
|
|
||||||
importPackage(Packages.arc.struct)
|
importPackage(Packages.arc.struct)
|
||||||
importPackage(Packages.arc.graphics.g2d)
|
importPackage(Packages.mindustry.world.modules)
|
||||||
importPackage(Packages.mindustry.world.blocks)
|
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.legacy)
|
||||||
|
importPackage(Packages.mindustry.world.blocks.experimental)
|
||||||
importPackage(Packages.mindustry.editor)
|
importPackage(Packages.mindustry.editor)
|
||||||
importPackage(Packages.mindustry.world.blocks.defense.turrets)
|
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.mindustry.world.blocks.power)
|
||||||
importPackage(Packages.arc.scene.actions)
|
importPackage(Packages.mindustry.world.blocks.production)
|
||||||
importPackage(Packages.mindustry.ui.fragments)
|
importPackage(Packages.mindustry.world.blocks.sandbox)
|
||||||
importPackage(Packages.mindustry.ai.formations)
|
importPackage(Packages.mindustry.input)
|
||||||
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.consumers)
|
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.world.blocks.payloads)
|
||||||
importPackage(Packages.mindustry.maps)
|
importPackage(Packages.mindustry.world)
|
||||||
importPackage(Packages.arc.scene)
|
importPackage(Packages.arc.scene.style)
|
||||||
importPackage(Packages.mindustry.async)
|
importPackage(Packages.mindustry.world.blocks)
|
||||||
importPackage(Packages.mindustry.entities)
|
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)
|
||||||
importPackage(Packages.mindustry.entities.units)
|
importPackage(Packages.mindustry.entities.units)
|
||||||
|
importPackage(Packages.mindustry.ctype)
|
||||||
importPackage(Packages.mindustry.ai.types)
|
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.maps.planet)
|
||||||
|
importPackage(Packages.mindustry.world.blocks.logic)
|
||||||
|
importPackage(Packages.arc)
|
||||||
|
@ -2,6 +2,7 @@ package mindustry.mod;
|
|||||||
|
|
||||||
import arc.*;
|
import arc.*;
|
||||||
import arc.files.*;
|
import arc.files.*;
|
||||||
|
import arc.func.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import arc.util.Log.*;
|
import arc.util.Log.*;
|
||||||
@ -18,12 +19,13 @@ import java.util.regex.*;
|
|||||||
public class Scripts implements Disposable{
|
public class Scripts implements Disposable{
|
||||||
private final Array<String> blacklist = Array.with("net", "files", "reflect", "javax", "rhino", "file", "channels", "jdk",
|
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",
|
"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 Array<String> whitelist = Array.with("mindustry.net", "netserver", "netclient", "com.sun.proxy.$proxy");
|
||||||
private final Context context;
|
private final Context context;
|
||||||
private Scriptable scope;
|
private Scriptable scope;
|
||||||
private boolean errored;
|
private boolean errored;
|
||||||
private LoadedMod currentMod = null;
|
private LoadedMod currentMod = null;
|
||||||
|
private Array<EventHandle> events = new Array<>();
|
||||||
|
|
||||||
public Scripts(){
|
public Scripts(){
|
||||||
Time.mark();
|
Time.mark();
|
||||||
@ -76,6 +78,11 @@ public class Scripts implements Disposable{
|
|||||||
Log.log(level, "[@]: @", source, message);
|
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){
|
public void run(LoadedMod mod, Fi file){
|
||||||
currentMod = mod;
|
currentMod = mod;
|
||||||
run(file.readString(), file.name());
|
run(file.readString(), file.name());
|
||||||
@ -101,9 +108,23 @@ public class Scripts implements Disposable{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void dispose(){
|
public void dispose(){
|
||||||
|
for(EventHandle e : events){
|
||||||
|
Events.remove(e.type, e.listener);
|
||||||
|
}
|
||||||
|
events.clear();
|
||||||
Context.exit();
|
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 class ScriptModuleProvider extends UrlModuleSourceProvider{
|
||||||
private Pattern directory = Pattern.compile("^(.+?)/(.+)");
|
private Pattern directory = Pattern.compile("^(.+?)/(.+)");
|
||||||
|
|
||||||
|
@ -81,9 +81,7 @@ public class PlanetDialog extends FloatingDialog{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Events.on(ResizeEvent.class, e -> {
|
Events.on(ResizeEvent.class, e -> makeBloom());
|
||||||
makeBloom();
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
buttons.defaults().size(220f, 64f).pad(0f);
|
buttons.defaults().size(220f, 64f).pad(0f);
|
||||||
|
Reference in New Issue
Block a user