diff --git a/core/assets/scripts/base.js b/core/assets/scripts/base.js index ac684f6550..488ff67dac 100755 --- a/core/assets/scripts/base.js +++ b/core/assets/scripts/base.js @@ -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" diff --git a/core/assets/scripts/global.js b/core/assets/scripts/global.js index 280650b8dc..71af1fbdaa 100755 --- a/core/assets/scripts/global.js +++ b/core/assets/scripts/global.js @@ -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) diff --git a/core/src/mindustry/mod/Scripts.java b/core/src/mindustry/mod/Scripts.java index 5bfa61e8b0..f78645915f 100644 --- a/core/src/mindustry/mod/Scripts.java +++ b/core/src/mindustry/mod/Scripts.java @@ -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 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 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 events = new Array<>(); public Scripts(){ Time.mark(); @@ -76,6 +78,11 @@ public class Scripts implements Disposable{ Log.log(level, "[@]: @", source, message); } + public void onEvent(Class type, Cons 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("^(.+?)/(.+)"); diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index d929c27dda..85a3b979cc 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -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);