From 1bc6192c8b41d8065956afa9eb2429cdfd33736e Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Wed, 9 Jul 2025 15:16:11 +0200 Subject: [PATCH] merge kts engine into this codebase --- core/build.gradle.kts | 13 ++ core/src/main/java/com/volmit/iris/Iris.java | 9 +- .../core/scripting/ExecutionEnvironment.java | 56 +------- .../com/volmit/iris/util/misc/SlimJar.java | 37 +++++ .../core/scripting/kotlin/base/DataScript.kt | 15 ++ .../scripting/kotlin/base/EngineScript.kt | 25 ++++ .../kotlin/base/MobSpawningScript.kt | 15 ++ .../kotlin/base/PostMobSpawningScript.kt | 15 ++ .../kotlin/base/PreprocessorScript.kt | 15 ++ .../scripting/kotlin/base/SimpleScript.kt | 40 ++++++ .../environment/IrisExecutionEnvironment.kt | 45 ++++++ .../IrisPackExecutionEnvironment.kt | 35 +++++ .../IrisSimpleExecutionEnvironment.kt | 135 ++++++++++++++++++ .../scripting/kotlin/runner/CachedScript.kt | 64 +++++++++ .../core/scripting/kotlin/runner/Script.kt | 8 ++ .../scripting/kotlin/runner/ScriptRunner.kt | 53 +++++++ .../core/scripting/kotlin/runner/Utils.kt | 54 +++++++ ...iris.core.scripting.kotlin.base.DataScript | 0 ...is.core.scripting.kotlin.base.EngineScript | 0 ...re.scripting.kotlin.base.MobSpawningScript | 0 ...cripting.kotlin.base.PostMobSpawningScript | 0 ...e.scripting.kotlin.base.PreprocessorScript | 0 ...is.core.scripting.kotlin.base.SimpleScript | 0 gradle/libs.versions.toml | 14 ++ 24 files changed, 591 insertions(+), 57 deletions(-) create mode 100644 core/src/main/java/com/volmit/iris/util/misc/SlimJar.java create mode 100644 core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/DataScript.kt create mode 100644 core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/EngineScript.kt create mode 100644 core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/MobSpawningScript.kt create mode 100644 core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/PostMobSpawningScript.kt create mode 100644 core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/PreprocessorScript.kt create mode 100644 core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/SimpleScript.kt create mode 100644 core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisExecutionEnvironment.kt create mode 100644 core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisPackExecutionEnvironment.kt create mode 100644 core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisSimpleExecutionEnvironment.kt create mode 100644 core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/CachedScript.kt create mode 100644 core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/Script.kt create mode 100644 core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/ScriptRunner.kt create mode 100644 core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/Utils.kt create mode 100644 core/src/main/resources/META-INF/kotlin/script/templates/com.volmit.iris.core.scripting.kotlin.base.DataScript create mode 100644 core/src/main/resources/META-INF/kotlin/script/templates/com.volmit.iris.core.scripting.kotlin.base.EngineScript create mode 100644 core/src/main/resources/META-INF/kotlin/script/templates/com.volmit.iris.core.scripting.kotlin.base.MobSpawningScript create mode 100644 core/src/main/resources/META-INF/kotlin/script/templates/com.volmit.iris.core.scripting.kotlin.base.PostMobSpawningScript create mode 100644 core/src/main/resources/META-INF/kotlin/script/templates/com.volmit.iris.core.scripting.kotlin.base.PreprocessorScript create mode 100644 core/src/main/resources/META-INF/kotlin/script/templates/com.volmit.iris.core.scripting.kotlin.base.SimpleScript diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 0abad7812..da7b101bd 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -26,6 +26,8 @@ plugins { alias(libs.plugins.shadow) alias(libs.plugins.sentry) alias(libs.plugins.slimjar) + alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.kotlin.lombok) } val apiVersion = "1.19" @@ -91,6 +93,14 @@ dependencies { slim(libs.byteBuddy.agent) slim(libs.dom4j) slim(libs.jaxen) + + // Script Engine + slim(libs.kotlin.stdlib) + slim(libs.kotlin.coroutines) + slim(libs.kotlin.scripting.common) + slim(libs.kotlin.scripting.jvm) + slim(libs.kotlin.scripting.jvm.host) + slim(libs.kotlin.scripting.dependencies.maven) } java { @@ -117,6 +127,9 @@ slimJar { relocate("net.kyori", "$lib.kyori") relocate("org.bstats", "$lib.metrics") relocate("io.sentry", "$lib.sentry") + relocate("org.apache.maven", "$lib.maven") + relocate("org.codehaus.plexus", "$lib.plexus") + relocate("org.eclipse.sisu", "$lib.sisu") } tasks { diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index cfd03f730..8da92f0c4 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -53,6 +53,7 @@ import com.volmit.iris.util.io.JarScanner; import com.volmit.iris.util.math.M; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.misc.Bindings; +import com.volmit.iris.util.misc.SlimJar; import com.volmit.iris.util.misc.getHardware; import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.plugin.IrisService; @@ -438,13 +439,7 @@ public class Iris extends VolmitPlugin implements Listener { } public Iris() { - ApplicationBuilder.appending("Iris") - .downloadDirectoryPath(getDataFolder("cache", "libraries").toPath()) - .logger((message, args) -> { - if (!message.startsWith("Loaded library ")) return; - getLogger().info(message.formatted(args)); - }) - .build(); + SlimJar.load(getDataFolder("cache", "libraries")); } private void enable() { diff --git a/core/src/main/java/com/volmit/iris/core/scripting/ExecutionEnvironment.java b/core/src/main/java/com/volmit/iris/core/scripting/ExecutionEnvironment.java index b484242bf..7e903a218 100644 --- a/core/src/main/java/com/volmit/iris/core/scripting/ExecutionEnvironment.java +++ b/core/src/main/java/com/volmit/iris/core/scripting/ExecutionEnvironment.java @@ -1,81 +1,37 @@ package com.volmit.iris.core.scripting; -import com.volmit.iris.Iris; import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.loader.IrisRegistrant; -import com.volmit.iris.util.io.IO; +import com.volmit.iris.core.scripting.kotlin.environment.IrisExecutionEnvironment; +import com.volmit.iris.core.scripting.kotlin.environment.IrisPackExecutionEnvironment; +import com.volmit.iris.core.scripting.kotlin.environment.IrisSimpleExecutionEnvironment; import lombok.NonNull; -import lombok.SneakyThrows; import lombok.experimental.UtilityClass; import org.bukkit.Location; import org.bukkit.entity.Entity; import org.jetbrains.annotations.Nullable; import java.io.File; -import java.net.URI; -import java.net.URL; -import java.net.URLClassLoader; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; -import java.nio.file.Path; import java.util.*; @UtilityClass public class ExecutionEnvironment { - private static final String VERSION = System.getProperty("iris.scriptVersion", "master-ffbf167eba-1"); - private static final String BASE_URL = "https://jitpack.io/com/github/VolmitSoftware/Iris-Scripts/" + VERSION + "/Iris-Scripts-" + VERSION + "-all.jar"; - private static final Provider PROVIDER = ServiceLoader.load(Provider.class, buildLoader()) - .findFirst() - .orElseThrow() - .init(Iris.instance.getDataFolder("cache", "libraries").toPath()); @NonNull public static Engine createEngine(@NonNull com.volmit.iris.engine.framework.Engine engine) { - return PROVIDER.createEngine(engine); + return new IrisExecutionEnvironment(engine); } @NonNull public static Pack createPack(@NonNull IrisData data) { - return PROVIDER.createPack(data); + return new IrisPackExecutionEnvironment(data); } @NonNull public static Simple createSimple() { - return PROVIDER.createSimple(); + return new IrisSimpleExecutionEnvironment(); } - @SneakyThrows - private static URLClassLoader buildLoader() { - try (HttpClient client = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.ALWAYS).build()) { - var resolved = client.send(HttpRequest.newBuilder(URI.create(BASE_URL)).build(), HttpResponse.BodyHandlers.discarding()) - .request(); - String hash = IO.hash(resolved.uri().getPath()); - File file = Iris.instance.getDataFile("cache", hash.substring(0, 2), hash.substring(3, 5), hash + ".jar"); - if (!file.exists()) { - file.getParentFile().mkdirs(); - Iris.info("Downloading Script Engine..."); - client.send(resolved, HttpResponse.BodyHandlers.ofFile(file.toPath())); - Iris.info("Downloaded Script Engine!"); - } - return new URLClassLoader(new URL[]{file.toURI().toURL()}, Provider.class.getClassLoader()); - } - } - - public interface Provider { - Provider init(Path localRepository); - - @NonNull - Engine createEngine(@NonNull com.volmit.iris.engine.framework.Engine engine); - - @NonNull - Pack createPack(@NonNull IrisData data); - - @NonNull - Simple createSimple(); - } - - public interface Simple { void configureProject(@NonNull File projectDir); diff --git a/core/src/main/java/com/volmit/iris/util/misc/SlimJar.java b/core/src/main/java/com/volmit/iris/util/misc/SlimJar.java new file mode 100644 index 000000000..bbd5ee878 --- /dev/null +++ b/core/src/main/java/com/volmit/iris/util/misc/SlimJar.java @@ -0,0 +1,37 @@ +package com.volmit.iris.util.misc; + +import io.github.slimjar.app.builder.ApplicationBuilder; +import org.jetbrains.annotations.Nullable; + +import java.io.File; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.locks.ReentrantLock; +import java.util.logging.Logger; + +public class SlimJar { + private static final Logger LOGGER = Logger.getLogger("Iris"); + private static final ReentrantLock lock = new ReentrantLock(); + private static final AtomicBoolean loaded = new AtomicBoolean(); + + public static void load(@Nullable File localRepository) { + if (loaded.get()) return; + lock.lock(); + + try { + if (loaded.getAndSet(true)) return; + if (localRepository == null) { + localRepository = new File(".iris/libraries"); + } + + ApplicationBuilder.appending("Iris") + .downloadDirectoryPath(localRepository.toPath()) + .logger((message, args) -> { + if (!message.startsWith("Loaded library ")) return; + LOGGER.info(message.formatted(args)); + }) + .build(); + } finally { + lock.unlock(); + } + } +} diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/DataScript.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/DataScript.kt new file mode 100644 index 000000000..1a180701c --- /dev/null +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/DataScript.kt @@ -0,0 +1,15 @@ +package com.volmit.iris.core.scripting.kotlin.base + +import com.volmit.iris.core.loader.IrisData +import kotlin.script.experimental.annotations.KotlinScript +import kotlin.script.experimental.api.ScriptCompilationConfiguration +import kotlin.script.experimental.api.providedProperties + +@KotlinScript(fileExtension = "data.kts", compilationConfiguration = DataScriptDefinition::class) +abstract class DataScript + +object DataScriptDefinition : ScriptCompilationConfiguration(listOf(SimpleScriptDefinition), { + providedProperties("data" to IrisData::class) +}) { + private fun readResolve(): Any = DataScriptDefinition +} \ No newline at end of file diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/EngineScript.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/EngineScript.kt new file mode 100644 index 000000000..768f2a9d3 --- /dev/null +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/EngineScript.kt @@ -0,0 +1,25 @@ +package com.volmit.iris.core.scripting.kotlin.base + +import com.volmit.iris.core.scripting.func.BiomeLookup +import com.volmit.iris.engine.IrisComplex +import com.volmit.iris.engine.framework.Engine +import com.volmit.iris.engine.`object`.IrisDimension +import kotlin.script.experimental.annotations.KotlinScript +import kotlin.script.experimental.api.ScriptCompilationConfiguration +import kotlin.script.experimental.api.providedProperties + +@KotlinScript(fileExtension = "engine.kts", compilationConfiguration = EngineScriptDefinition::class) +abstract class EngineScript + +object EngineScriptDefinition : ScriptCompilationConfiguration(listOf(DataScriptDefinition), { + providedProperties( + "engine" to Engine::class, + "complex" to IrisComplex::class, + "seed" to Long::class, + "dimension" to IrisDimension::class, + "biome" to BiomeLookup::class, + ) +}) { + + private fun readResolve(): Any = EngineScriptDefinition +} \ No newline at end of file diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/MobSpawningScript.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/MobSpawningScript.kt new file mode 100644 index 000000000..f9add58dc --- /dev/null +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/MobSpawningScript.kt @@ -0,0 +1,15 @@ +package com.volmit.iris.core.scripting.kotlin.base + +import org.bukkit.Location +import kotlin.script.experimental.annotations.KotlinScript +import kotlin.script.experimental.api.ScriptCompilationConfiguration +import kotlin.script.experimental.api.providedProperties + +@KotlinScript(fileExtension = "spawn.kts", compilationConfiguration = MobSpawningScriptDefinition::class) +abstract class MobSpawningScript + +object MobSpawningScriptDefinition : ScriptCompilationConfiguration(listOf(EngineScriptDefinition), { + providedProperties("location" to Location::class) +}) { + private fun readResolve(): Any = MobSpawningScriptDefinition +} \ No newline at end of file diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/PostMobSpawningScript.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/PostMobSpawningScript.kt new file mode 100644 index 000000000..02b485bed --- /dev/null +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/PostMobSpawningScript.kt @@ -0,0 +1,15 @@ +package com.volmit.iris.core.scripting.kotlin.base + +import org.bukkit.entity.Entity +import kotlin.script.experimental.annotations.KotlinScript +import kotlin.script.experimental.api.ScriptCompilationConfiguration +import kotlin.script.experimental.api.providedProperties + +@KotlinScript(fileExtension = "postspawn.kts", compilationConfiguration = PostMobSpawningScriptDefinition::class) +abstract class PostMobSpawningScript + +object PostMobSpawningScriptDefinition : ScriptCompilationConfiguration(listOf(MobSpawningScriptDefinition), { + providedProperties("entity" to Entity::class) +}) { + private fun readResolve(): Any = PostMobSpawningScriptDefinition +} \ No newline at end of file diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/PreprocessorScript.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/PreprocessorScript.kt new file mode 100644 index 000000000..f594649e1 --- /dev/null +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/PreprocessorScript.kt @@ -0,0 +1,15 @@ +package com.volmit.iris.core.scripting.kotlin.base + +import com.volmit.iris.core.loader.IrisRegistrant +import kotlin.script.experimental.annotations.KotlinScript +import kotlin.script.experimental.api.ScriptCompilationConfiguration +import kotlin.script.experimental.api.providedProperties + +@KotlinScript(fileExtension = "proc.kts", compilationConfiguration = PreprocessorScriptDefinition::class) +abstract class PreprocessorScript + +object PreprocessorScriptDefinition : ScriptCompilationConfiguration(listOf(EngineScriptDefinition), { + providedProperties("object" to IrisRegistrant::class) +}) { + private fun readResolve(): Any = PreprocessorScriptDefinition +} \ No newline at end of file diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/SimpleScript.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/SimpleScript.kt new file mode 100644 index 000000000..5adbbaf8c --- /dev/null +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/SimpleScript.kt @@ -0,0 +1,40 @@ +package com.volmit.iris.core.scripting.kotlin.base + +import com.volmit.iris.core.scripting.kotlin.runner.configureMavenDepsOnAnnotations +import com.volmit.iris.util.misc.SlimJar +import kotlin.script.experimental.annotations.KotlinScript +import kotlin.script.experimental.api.ScriptCompilationConfiguration +import kotlin.script.experimental.api.defaultImports +import kotlin.script.experimental.api.isStandalone +import kotlin.script.experimental.api.refineConfiguration +import kotlin.script.experimental.dependencies.DependsOn +import kotlin.script.experimental.dependencies.Repository +import kotlin.script.experimental.jvm.dependenciesFromClassContext +import kotlin.script.experimental.jvm.jvm + +@KotlinScript(fileExtension = "simple.kts", compilationConfiguration = SimpleScriptDefinition::class) +abstract class SimpleScript + +object SimpleScriptDefinition : ScriptCompilationConfiguration({ + SlimJar.load(null) + + isStandalone(false) + defaultImports( + "kotlin.script.experimental.dependencies.DependsOn", + "kotlin.script.experimental.dependencies.Repository", + "com.volmit.iris.Iris.info", + "com.volmit.iris.Iris.debug", + "com.volmit.iris.Iris.warn", + "com.volmit.iris.Iris.error" + ) + + jvm { + dependenciesFromClassContext(SimpleScript::class, wholeClasspath = true) + } + + refineConfiguration { + onAnnotations(DependsOn::class, Repository::class, handler = ::configureMavenDepsOnAnnotations) + } +}) { + private fun readResolve(): Any = SimpleScriptDefinition +} \ No newline at end of file diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisExecutionEnvironment.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisExecutionEnvironment.kt new file mode 100644 index 000000000..df13c7ad4 --- /dev/null +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisExecutionEnvironment.kt @@ -0,0 +1,45 @@ +package com.volmit.iris.core.scripting.kotlin.environment + +import com.volmit.iris.core.loader.IrisRegistrant +import com.volmit.iris.core.scripting.ExecutionEnvironment +import com.volmit.iris.core.scripting.func.BiomeLookup +import com.volmit.iris.core.scripting.kotlin.base.EngineScript +import com.volmit.iris.core.scripting.kotlin.base.MobSpawningScript +import com.volmit.iris.core.scripting.kotlin.base.PostMobSpawningScript +import com.volmit.iris.core.scripting.kotlin.base.PreprocessorScript +import com.volmit.iris.engine.framework.Engine +import org.bukkit.Location +import org.bukkit.entity.Entity + +data class IrisExecutionEnvironment( + private val engine: Engine +) : IrisPackExecutionEnvironment(engine.data), ExecutionEnvironment.Engine { + override fun getEngine() = engine + + override fun execute(script: String) = + execute(script, EngineScript::class.java, engine.parameters()) + + override fun evaluate(script: String) = + evaluate(script, EngineScript::class.java, engine.parameters()) + + override fun spawnMob(script: String, location: Location) = + evaluate(script, MobSpawningScript::class.java, engine.parameters("location" to location)) + + override fun postSpawnMob(script: String, location: Location, mob: Entity) = + execute(script, PostMobSpawningScript::class.java, engine.parameters("location" to location, "entity" to mob,)) + + override fun preprocessObject(script: String, `object`: IrisRegistrant) = + execute(script, PreprocessorScript::class.java, engine.parameters("object" to `object`)) + + private fun Engine.parameters(vararg values: Pair): Map { + return mapOf( + "data" to data, + "engine" to this, + "complex" to complex, + "seed" to seedManager.seed, + "dimension" to dimension, + "biome" to BiomeLookup(::getSurfaceBiome), + *values, + ) + } +} \ No newline at end of file diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisPackExecutionEnvironment.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisPackExecutionEnvironment.kt new file mode 100644 index 000000000..a69b9ea6a --- /dev/null +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisPackExecutionEnvironment.kt @@ -0,0 +1,35 @@ +package com.volmit.iris.core.scripting.kotlin.environment + +import com.volmit.iris.core.loader.IrisData +import com.volmit.iris.core.scripting.ExecutionEnvironment +import com.volmit.iris.core.scripting.kotlin.base.DataScript +import com.volmit.iris.core.scripting.kotlin.runner.Script +import kotlin.reflect.KClass +import kotlin.script.experimental.api.valueOrThrow + +open class IrisPackExecutionEnvironment( + private val data: IrisData +) : IrisSimpleExecutionEnvironment(), ExecutionEnvironment.Pack { + + override fun getData() = data + + override fun compile(script: String, type: KClass<*>): Script { + val loaded = data.scriptLoader.load(script) + return compileCache.get(script) + .computeIfAbsent(type) { _ -> runner.compileText(type, loaded.source, script) } + .valueOrThrow() + } + + override fun execute(script: String) = + execute(script, DataScript::class.java, data.parameters()) + + override fun evaluate(script: String) = + evaluate(script, DataScript::class.java, data.parameters()) + + private fun IrisData.parameters(vararg values: Pair): Map { + return mapOf( + "data" to this, + *values, + ) + } +} \ No newline at end of file diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisSimpleExecutionEnvironment.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisSimpleExecutionEnvironment.kt new file mode 100644 index 000000000..014d440f4 --- /dev/null +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/environment/IrisSimpleExecutionEnvironment.kt @@ -0,0 +1,135 @@ +package com.volmit.iris.core.scripting.kotlin.environment + +import com.volmit.iris.Iris +import com.volmit.iris.core.IrisSettings +import com.volmit.iris.core.scripting.ExecutionEnvironment +import com.volmit.iris.core.scripting.kotlin.base.* +import com.volmit.iris.core.scripting.kotlin.runner.Script +import com.volmit.iris.core.scripting.kotlin.runner.ScriptRunner +import com.volmit.iris.core.scripting.kotlin.runner.classpath +import com.volmit.iris.core.scripting.kotlin.runner.valueOrNull +import com.volmit.iris.util.collection.KMap +import com.volmit.iris.util.data.KCache +import com.volmit.iris.util.format.C +import java.io.File +import kotlin.reflect.KClass +import kotlin.script.experimental.api.ResultWithDiagnostics +import kotlin.script.experimental.api.valueOrThrow +import kotlin.text.split + +open class IrisSimpleExecutionEnvironment : ExecutionEnvironment.Simple { + protected val compileCache = KCache, ResultWithDiagnostics