diff --git a/core/src/main/java/com/volmit/iris/core/loader/IrisData.java b/core/src/main/java/com/volmit/iris/core/loader/IrisData.java index aaf1a49de..fc038ecec 100644 --- a/core/src/main/java/com/volmit/iris/core/loader/IrisData.java +++ b/core/src/main/java/com/volmit/iris/core/loader/IrisData.java @@ -58,8 +58,8 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { private static final KMap dataLoaders = new KMap<>(); private final File dataFolder; private final int id; - private final PackEnvironment environment; private boolean closed = false; + private PackEnvironment environment; private ResourceLoader biomeLoader; private ResourceLoader lootLoader; private ResourceLoader regionLoader; @@ -92,7 +92,6 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { this.engine = null; this.dataFolder = dataFolder; this.id = RNG.r.imax(); - this.environment = PackEnvironment.create(this); hotloaded(); } @@ -350,7 +349,6 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { public synchronized void hotloaded() { closed = false; - environment.close(); possibleSnippets = new KMap<>(); builder = new GsonBuilder() .addDeserializationExclusionStrategy(this) @@ -382,6 +380,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { this.imageLoader = registerLoader(IrisImage.class); this.scriptLoader = registerLoader(IrisScript.class); this.matterObjectLoader = registerLoader(IrisMatterObject.class); + this.environment = PackEnvironment.create(this); builder.registerTypeAdapterFactory(KeyedType::createTypeAdapter); gson = builder.create(); @@ -389,6 +388,10 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { .map(IrisDimension::getDataScripts) .flatMap(KList::stream) .forEach(environment::execute); + + if (engine != null) { + engine.hotload(); + } } public void dump() { diff --git a/core/src/main/java/com/volmit/iris/core/scripting/environment/PackEnvironment.java b/core/src/main/java/com/volmit/iris/core/scripting/environment/PackEnvironment.java index c5dbccf22..4f0dfd6bb 100644 --- a/core/src/main/java/com/volmit/iris/core/scripting/environment/PackEnvironment.java +++ b/core/src/main/java/com/volmit/iris/core/scripting/environment/PackEnvironment.java @@ -2,6 +2,7 @@ package com.volmit.iris.core.scripting.environment; import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.scripting.kotlin.environment.IrisPackExecutionEnvironment; +import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.util.math.RNG; import lombok.NonNull; import org.jetbrains.annotations.Nullable; @@ -16,4 +17,6 @@ public interface PackEnvironment extends SimpleEnvironment { @Nullable Object createNoise(@NonNull String script, @NonNull RNG rng); + + EngineEnvironment with(@NonNull Engine engine); } \ No newline at end of file diff --git a/core/src/main/java/com/volmit/iris/core/scripting/environment/SimpleEnvironment.java b/core/src/main/java/com/volmit/iris/core/scripting/environment/SimpleEnvironment.java index 4eb7e0ce8..6d543cdca 100644 --- a/core/src/main/java/com/volmit/iris/core/scripting/environment/SimpleEnvironment.java +++ b/core/src/main/java/com/volmit/iris/core/scripting/environment/SimpleEnvironment.java @@ -27,8 +27,4 @@ public interface SimpleEnvironment { @Nullable Object evaluate(@NonNull String script, @NonNull Class type, @Nullable Map<@NonNull String, Object> vars); - - default void close() { - - } } \ No newline at end of file diff --git a/core/src/main/java/com/volmit/iris/engine/IrisEngine.java b/core/src/main/java/com/volmit/iris/engine/IrisEngine.java index b6e0fef08..9f570d642 100644 --- a/core/src/main/java/com/volmit/iris/engine/IrisEngine.java +++ b/core/src/main/java/com/volmit/iris/engine/IrisEngine.java @@ -125,7 +125,7 @@ public class IrisEngine implements Engine { mantle = new IrisEngineMantle(this); context = new IrisContext(this); cleaning = new AtomicBoolean(false); - execution = EngineEnvironment.create(this); + execution = getData().getEnvironment().with(this); if (studio) { getData().dump(); getData().clearLists(); @@ -163,10 +163,9 @@ public class IrisEngine implements Engine { private void prehotload() { worldManager.close(); complex.close(); - execution.close(); effects.close(); mode.close(); - execution = EngineEnvironment.create(this); + execution = getData().getEnvironment().with(this); J.a(() -> new IrisProject(getData().getDataFolder()).updateWorkspace()); } 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 index 2bebf8c9f..2114f29d4 100644 --- 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 @@ -9,15 +9,20 @@ 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.core.scripting.kotlin.environment.IrisSimpleExecutionEnvironment +import com.volmit.iris.core.scripting.kotlin.runner.ScriptRunner import com.volmit.iris.engine.framework.Engine import com.volmit.iris.util.mantle.MantleChunk import org.bukkit.Chunk import org.bukkit.Location import org.bukkit.entity.Entity +import java.io.File -data class IrisExecutionEnvironment( - private val engine: Engine -) : IrisPackExecutionEnvironment(engine.data), EngineEnvironment { +class IrisExecutionEnvironment internal constructor( + private val engine: Engine, + parent: ScriptRunner?, +) : IrisPackExecutionEnvironment(engine.data, parent), EngineEnvironment { + constructor(engine: Engine) : this(engine, null) override fun getEngine() = engine override fun execute(script: String) = 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 index 86832c963..412695f46 100644 --- 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 @@ -1,17 +1,22 @@ package com.volmit.iris.core.scripting.kotlin.environment import com.volmit.iris.core.loader.IrisData +import com.volmit.iris.core.scripting.environment.EngineEnvironment import com.volmit.iris.core.scripting.environment.PackEnvironment import com.volmit.iris.core.scripting.kotlin.base.DataScript import com.volmit.iris.core.scripting.kotlin.base.NoiseScript 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.valueOrThrow +import com.volmit.iris.engine.framework.Engine import com.volmit.iris.util.math.RNG import kotlin.reflect.KClass -open class IrisPackExecutionEnvironment( - private val data: IrisData -) : IrisSimpleExecutionEnvironment(data.dataFolder), PackEnvironment { +open class IrisPackExecutionEnvironment internal constructor( + private val data: IrisData, + parent: ScriptRunner? +) : IrisSimpleExecutionEnvironment(data.dataFolder, parent), PackEnvironment { + constructor(data: IrisData) : this(data, null) override fun getData() = data @@ -31,6 +36,9 @@ open class IrisPackExecutionEnvironment( override fun createNoise(script: String, rng: RNG) = evaluate(script, NoiseScript::class.java, data.parameters("rng" to rng)) + override fun with(engine: Engine) = + IrisExecutionEnvironment(engine, runner) + private fun IrisData.parameters(vararg values: Pair): Map { return mapOf( "data" to this, 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 index 4b984b9c0..1525dfeef 100644 --- 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 @@ -19,11 +19,14 @@ import kotlin.script.experimental.annotations.KotlinScript import kotlin.script.experimental.api.ResultWithDiagnostics import kotlin.text.split -open class IrisSimpleExecutionEnvironment( - baseDir: File = File(".").absoluteFile +open class IrisSimpleExecutionEnvironment internal constructor( + baseDir: File, + parent: ScriptRunner? ) : SimpleEnvironment { + @JvmOverloads + constructor(baseDir: File = File(".").absoluteFile) : this(baseDir, null) protected val compileCache = KCache, ResultWithDiagnostics