From d872656bc5e68dc2fa6651ffaedcdcde41382e78 Mon Sep 17 00:00:00 2001 From: DeltaNedas <39013340+DeltaNedas@users.noreply.github.com> Date: Fri, 31 Jan 2020 23:51:33 +0000 Subject: [PATCH] it works sorta! --- core/src/mindustry/mod/Scripts.java | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/mod/Scripts.java b/core/src/mindustry/mod/Scripts.java index b490928616..d8ca80d1dc 100644 --- a/core/src/mindustry/mod/Scripts.java +++ b/core/src/mindustry/mod/Scripts.java @@ -5,8 +5,9 @@ import arc.files.*; import arc.struct.*; import arc.util.*; import arc.util.Log.*; +import java.io.IOException; import java.net.URI; -import java.util.Arrays; +import java.net.URISyntaxException; import mindustry.*; import mindustry.mod.Mods.*; import org.mozilla.javascript.*; @@ -22,6 +23,7 @@ public class Scripts implements Disposable{ private final String wrapper; private Scriptable scope; private boolean errored; + public static LoadedMod loadedMod = null; public Scripts(){ Time.mark(); @@ -29,8 +31,12 @@ public class Scripts implements Disposable{ context = Vars.platform.getScriptContext(); context.setClassShutter(type -> !blacklist.contains(type.toLowerCase()::contains) || whitelist.contains(type.toLowerCase()::contains)); context.getWrapFactory().setJavaPrimitiveWrap(false); - + scope = new ImporterTopLevel(context); + + new RequireBuilder() + .setModuleScriptProvider(new SoftCachingModuleScriptProvider(new ScriptModuleProvider())) + .setSandboxed(true).createRequire(context, scope).install(scope); wrapper = Core.files.internal("scripts/wrapper.js").readString(); if(!run(Core.files.internal("scripts/global.js").readString(), "global.js")){ @@ -72,10 +78,7 @@ public class Scripts implements Disposable{ } public void run(LoadedMod mod, Fi file){ - new RequireBuilder() - .setModuleScriptProvider(new SoftCachingModuleScriptProvider( - new UrlModuleSourceProvider(Arrays.asList(new URI[] {file.child("scripts").file().toURI()}), null))) - .setSandboxed(true).createRequire(context, scope).install(scope); + loadedMod = mod; run(wrapper.replace("$SCRIPT_NAME$", mod.name + "/" + file.nameWithoutExtension()).replace("$CODE$", file.readString()).replace("$MOD_NAME$", mod.name), file.name()); } @@ -93,4 +96,18 @@ public class Scripts implements Disposable{ public void dispose(){ Context.exit(); } + + private class ScriptModuleProvider extends UrlModuleSourceProvider{ + public ScriptModuleProvider(){ + super(null, null); + } + + @Override + public ModuleSource loadSource(String moduleId, Scriptable paths, Object validator) throws IOException, URISyntaxException{ + if(loadedMod == null) return null; + Fi module = Scripts.loadedMod.root.child("scripts").child(moduleId + ".js"); + if(!module.exists() || module.isDirectory()) return null; + return new ModuleSource(module.reader(), null, module.file().toURI(), null, validator); + } + } }