From c01a7def5d831ca77421063a2afeac8b7c62e342 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Tue, 8 Jul 2025 15:37:14 +0200 Subject: [PATCH] add iris data setup hook --- .../main/java/com/volmit/iris/core/loader/IrisData.java | 8 ++++++++ .../java/com/volmit/iris/core/loader/ResourceLoader.java | 6 +++++- .../volmit/iris/core/scripting/ExecutionEnvironment.java | 2 +- core/src/main/java/com/volmit/iris/engine/IrisEngine.java | 2 +- .../java/com/volmit/iris/engine/object/IrisDimension.java | 6 +++++- 5 files changed, 20 insertions(+), 4 deletions(-) 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 34d67ec83..10dc795a6 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 @@ -24,6 +24,7 @@ import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; import com.volmit.iris.Iris; +import com.volmit.iris.core.scripting.ExecutionEnvironment; import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.object.*; @@ -54,6 +55,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { private static final KMap dataLoaders = new KMap<>(); private final File dataFolder; private final int id; + private final ExecutionEnvironment.Pack environment; private boolean closed = false; private ResourceLoader biomeLoader; private ResourceLoader lootLoader; @@ -87,6 +89,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { this.engine = null; this.dataFolder = dataFolder; this.id = RNG.r.imax(); + this.environment = ExecutionEnvironment.createPack(this); hotloaded(); } @@ -319,6 +322,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { } public synchronized void hotloaded() { + environment.close(); possibleSnippets = new KMap<>(); builder = new GsonBuilder() .addDeserializationExclusionStrategy(this) @@ -359,6 +363,10 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory { } gson = builder.create(); + dimensionLoader.streamAll() + .map(IrisDimension::getDataScripts) + .flatMap(KList::stream) + .forEach(environment::execute); } public void dump() { diff --git a/core/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java b/core/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java index a9b468e57..0f804e4e2 100644 --- a/core/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java +++ b/core/src/main/java/com/volmit/iris/core/loader/ResourceLoader.java @@ -44,8 +44,8 @@ import lombok.EqualsAndHashCode; import lombok.ToString; import java.io.*; +import java.util.Arrays; import java.util.Locale; -import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; @@ -216,6 +216,10 @@ public class ResourceLoader implements MeteredCache { return j; } + public Stream streamAll() { + return streamAll(Arrays.stream(getPossibleKeys())); + } + public Stream streamAll(Stream s) { return s.map(this::load); } 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 2b6ab34b6..b484242bf 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 @@ -23,7 +23,7 @@ import java.util.*; @UtilityClass public class ExecutionEnvironment { - private static final String VERSION = System.getProperty("iris.scriptVersion", "e08b6f893e"); + 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() 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 9839a7ff6..3289c64d8 100644 --- a/core/src/main/java/com/volmit/iris/engine/IrisEngine.java +++ b/core/src/main/java/com/volmit/iris/engine/IrisEngine.java @@ -173,7 +173,7 @@ public class IrisEngine implements Engine { effects = new IrisEngineEffects(this); hash32 = new CompletableFuture<>(); setupMode(); - getDimension().getSetupScripts().forEach(execution::execute); + getDimension().getEngineScripts().forEach(execution::execute); J.a(this::computeBiomeMaxes); J.a(() -> { File[] roots = getData().getLoaders() diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java b/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java index c82a175ea..791a602e1 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java @@ -247,7 +247,11 @@ public class IrisDimension extends IrisRegistrant { @Desc("A list of scripts executed on engine setup") @RegistryListResource(IrisScript.class) @ArrayType(type = String.class, min = 1) - private KList setupScripts = new KList<>(); + private KList engineScripts = new KList<>(); + @Desc("A list of scripts executed on data setup") + @RegistryListResource(IrisScript.class) + @ArrayType(type = String.class, min = 1) + private KList dataScripts = new KList<>(); public int getMaxHeight() { return (int) getDimensionHeight().getMax();