From 1aa64c9a02a93b23d3da226782f99c9f9fb7de87 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Wed, 3 Sep 2025 17:02:39 +0200 Subject: [PATCH] add hook for custom engine modes --- .../com/volmit/iris/engine/IrisEngine.java | 2 +- .../iris/engine/object/IrisDimensionMode.java | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) 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 1b9cec579..d35dd3311 100644 --- a/core/src/main/java/com/volmit/iris/engine/IrisEngine.java +++ b/core/src/main/java/com/volmit/iris/engine/IrisEngine.java @@ -200,7 +200,7 @@ public class IrisEngine implements Engine { mode.close(); } - mode = getDimension().getMode().getType().create(this); + mode = getDimension().getMode().create(this); } @Override diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisDimensionMode.java b/core/src/main/java/com/volmit/iris/engine/object/IrisDimensionMode.java index ccf3c49b1..07b0e252b 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisDimensionMode.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisDimensionMode.java @@ -18,7 +18,10 @@ package com.volmit.iris.engine.object; +import com.volmit.iris.engine.framework.Engine; +import com.volmit.iris.engine.framework.EngineMode; import com.volmit.iris.engine.object.annotations.Desc; +import com.volmit.iris.engine.object.annotations.RegistryListResource; import com.volmit.iris.engine.object.annotations.Snippet; import lombok.AllArgsConstructor; import lombok.Data; @@ -35,4 +38,19 @@ public class IrisDimensionMode { @Desc("The dimension type") private IrisDimensionModeType type = IrisDimensionModeType.OVERWORLD; + @RegistryListResource(IrisScript.class) + @Desc("The script to create the dimension mode instead of using provided types") + private String script; + + public EngineMode create(Engine engine) { + if (script == null) { + return type.create(engine); + } + Object result = engine.getExecution().evaluate(script); + if (result instanceof EngineMode) { + return (EngineMode) result; + } + + throw new IllegalStateException("The script '" + script + "' did not return an engine mode!"); + } }