add iris data setup hook

This commit is contained in:
Julian Krings 2025-07-08 15:37:14 +02:00
parent 50db1d11a7
commit c01a7def5d
No known key found for this signature in database
GPG Key ID: 208C6E08C3B718D2
5 changed files with 20 additions and 4 deletions

View File

@ -24,6 +24,7 @@ import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter; import com.google.gson.stream.JsonWriter;
import com.volmit.iris.Iris; 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.data.cache.AtomicCache;
import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.object.*; import com.volmit.iris.engine.object.*;
@ -54,6 +55,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
private static final KMap<File, IrisData> dataLoaders = new KMap<>(); private static final KMap<File, IrisData> dataLoaders = new KMap<>();
private final File dataFolder; private final File dataFolder;
private final int id; private final int id;
private final ExecutionEnvironment.Pack environment;
private boolean closed = false; private boolean closed = false;
private ResourceLoader<IrisBiome> biomeLoader; private ResourceLoader<IrisBiome> biomeLoader;
private ResourceLoader<IrisLootTable> lootLoader; private ResourceLoader<IrisLootTable> lootLoader;
@ -87,6 +89,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
this.engine = null; this.engine = null;
this.dataFolder = dataFolder; this.dataFolder = dataFolder;
this.id = RNG.r.imax(); this.id = RNG.r.imax();
this.environment = ExecutionEnvironment.createPack(this);
hotloaded(); hotloaded();
} }
@ -319,6 +322,7 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
} }
public synchronized void hotloaded() { public synchronized void hotloaded() {
environment.close();
possibleSnippets = new KMap<>(); possibleSnippets = new KMap<>();
builder = new GsonBuilder() builder = new GsonBuilder()
.addDeserializationExclusionStrategy(this) .addDeserializationExclusionStrategy(this)
@ -359,6 +363,10 @@ public class IrisData implements ExclusionStrategy, TypeAdapterFactory {
} }
gson = builder.create(); gson = builder.create();
dimensionLoader.streamAll()
.map(IrisDimension::getDataScripts)
.flatMap(KList::stream)
.forEach(environment::execute);
} }
public void dump() { public void dump() {

View File

@ -44,8 +44,8 @@ import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import java.io.*; import java.io.*;
import java.util.Arrays;
import java.util.Locale; import java.util.Locale;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -216,6 +216,10 @@ public class ResourceLoader<T extends IrisRegistrant> implements MeteredCache {
return j; return j;
} }
public Stream<T> streamAll() {
return streamAll(Arrays.stream(getPossibleKeys()));
}
public Stream<T> streamAll(Stream<String> s) { public Stream<T> streamAll(Stream<String> s) {
return s.map(this::load); return s.map(this::load);
} }

View File

@ -23,7 +23,7 @@ import java.util.*;
@UtilityClass @UtilityClass
public class ExecutionEnvironment { 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 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()) private static final Provider PROVIDER = ServiceLoader.load(Provider.class, buildLoader())
.findFirst() .findFirst()

View File

@ -173,7 +173,7 @@ public class IrisEngine implements Engine {
effects = new IrisEngineEffects(this); effects = new IrisEngineEffects(this);
hash32 = new CompletableFuture<>(); hash32 = new CompletableFuture<>();
setupMode(); setupMode();
getDimension().getSetupScripts().forEach(execution::execute); getDimension().getEngineScripts().forEach(execution::execute);
J.a(this::computeBiomeMaxes); J.a(this::computeBiomeMaxes);
J.a(() -> { J.a(() -> {
File[] roots = getData().getLoaders() File[] roots = getData().getLoaders()

View File

@ -247,7 +247,11 @@ public class IrisDimension extends IrisRegistrant {
@Desc("A list of scripts executed on engine setup") @Desc("A list of scripts executed on engine setup")
@RegistryListResource(IrisScript.class) @RegistryListResource(IrisScript.class)
@ArrayType(type = String.class, min = 1) @ArrayType(type = String.class, min = 1)
private KList<String> setupScripts = new KList<>(); private KList<String> engineScripts = new KList<>();
@Desc("A list of scripts executed on data setup")
@RegistryListResource(IrisScript.class)
@ArrayType(type = String.class, min = 1)
private KList<String> dataScripts = new KList<>();
public int getMaxHeight() { public int getMaxHeight() {
return (int) getDimensionHeight().getMax(); return (int) getDimensionHeight().getMax();