From 72faf76269eb193171074a86d2eebadd12becfd4 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Tue, 16 Jun 2026 12:12:14 +0200 Subject: [PATCH 1/6] update to craftengine 26.5 --- .../iris/core/link/data/CraftEngineDataProvider.java | 8 ++++---- gradle/libs.versions.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/link/data/CraftEngineDataProvider.java b/core/src/main/java/com/volmit/iris/core/link/data/CraftEngineDataProvider.java index b9650a33e..339fc8e54 100644 --- a/core/src/main/java/com/volmit/iris/core/link/data/CraftEngineDataProvider.java +++ b/core/src/main/java/com/volmit/iris/core/link/data/CraftEngineDataProvider.java @@ -14,9 +14,9 @@ import net.momirealms.craftengine.bukkit.api.CraftEngineFurniture; import net.momirealms.craftengine.bukkit.api.CraftEngineItems; import net.momirealms.craftengine.core.block.ImmutableBlockState; -import net.momirealms.craftengine.core.block.properties.BooleanProperty; -import net.momirealms.craftengine.core.block.properties.IntegerProperty; -import net.momirealms.craftengine.core.block.properties.Property; +import net.momirealms.craftengine.core.block.property.BooleanProperty; +import net.momirealms.craftengine.core.block.property.IntegerProperty; +import net.momirealms.craftengine.core.block.property.Property; import net.momirealms.craftengine.core.util.Key; import org.bukkit.Location; import org.bukkit.block.Block; @@ -71,7 +71,7 @@ public void init() { public @NotNull ItemStack getItemStack(@NotNull Identifier itemId, @NotNull KMap customNbt) throws MissingResourceException { var item = CraftEngineItems.byId(Key.of(itemId.namespace(), itemId.key())); if (item == null) throw new MissingResourceException("Failed to find ItemData!", itemId.namespace(), itemId.key()); - return item.buildItemStack(); + return item.buildBukkitItem(); } @Override diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d73cb0d20..fff1080fd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -55,7 +55,7 @@ mythic = "5.9.5" mythic-chrucible = "2.1.0" kgenerators = "7.3" # https://repo.codemc.io/repository/maven-public/me/kryniowesegryderiusz/kgenerators-core/maven-metadata.xml multiverseCore = "5.1.0" -craftengine = "0.0.67" # https://github.com/Xiao-MoMi/craft-engine/releases +craftengine = "26.5" # https://github.com/Xiao-MoMi/craft-engine/releases [libraries] # Core Libraries From 1e0628f768d13de3a6fd576a4f13184172112fb8 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Sat, 4 Jul 2026 14:41:55 +0200 Subject: [PATCH 2/6] fix runServer tasks --- gradle/libs.versions.toml | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fff1080fd..761a67392 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ shadow = "9.0.0-rc1" # https://plugins.gradle.org/plugin/com.gradleup.shadow slimjar = "2.1.5" # https://plugins.gradle.org/plugin/de.crazydev22.slimjar download = "5.6.0" # https://plugins.gradle.org/plugin/de.undercouch.download -runPaper = "2.3.1" # https://plugins.gradle.org/plugin/xyz.jpenilla.run-paper +runPaper = "3.0.2" # https://plugins.gradle.org/plugin/xyz.jpenilla.run-paper sentryPlugin = "5.8.0" # https://github.com/getsentry/sentry-android-gradle-plugin grgit = "5.3.2" # https://github.com/ajoberstar/grgit diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ff23a68d7..d4081da47 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From ee7f54429a3027f52c64ce512f0fd2a85de67f1d Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Sat, 4 Jul 2026 14:43:07 +0200 Subject: [PATCH 3/6] fix not finding matching provider in processUpdate phase --- .../volmit/iris/core/service/ExternalDataSVC.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java b/core/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java index 528e41869..2187ab697 100644 --- a/core/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java +++ b/core/src/main/java/com/volmit/iris/core/service/ExternalDataSVC.java @@ -135,7 +135,8 @@ public Optional getItemStack(Identifier key, KMap cus } public void processUpdate(Engine engine, Block block, Identifier blockId) { - Optional provider = activeProviders.stream().filter(p -> p.isValidProvider(blockId, DataType.BLOCK)).findFirst(); + Identifier mod = stripState(blockId); + Optional provider = activeProviders.stream().filter(p -> p.isValidProvider(mod, DataType.BLOCK)).findFirst(); if (provider.isEmpty()) { Iris.warn("No matching Provider found for modded material \"%s\"!", blockId); return; @@ -183,6 +184,16 @@ public static Pair> parseState(Identifier key) return new Pair<>(new Identifier(key.namespace(), key.key().split("\\Q[\\E")[0]), stateMap); } + private static Identifier stripState(Identifier key) { + if (!key.key().contains("[") || !key.key().contains("]")) + return key; + + return new Identifier( + key.namespace(), + key.key().split("\\Q[\\E")[0] + ); + } + public static Identifier buildState(Identifier key, KMap state) { if (state.isEmpty()) { return key; From ed67dd6058abd5f4468053a35ae241738b03b08c Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Sat, 4 Jul 2026 14:43:51 +0200 Subject: [PATCH 4/6] fix not resolving block id properly for craftengine --- .../volmit/iris/core/link/data/CraftEngineDataProvider.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/volmit/iris/core/link/data/CraftEngineDataProvider.java b/core/src/main/java/com/volmit/iris/core/link/data/CraftEngineDataProvider.java index 339fc8e54..ea4e264f7 100644 --- a/core/src/main/java/com/volmit/iris/core/link/data/CraftEngineDataProvider.java +++ b/core/src/main/java/com/volmit/iris/core/link/data/CraftEngineDataProvider.java @@ -85,9 +85,10 @@ public void init() { @Override public void processUpdate(@NotNull Engine engine, @NotNull Block block, @NotNull Identifier blockId) { var pair = ExternalDataSVC.parseState(blockId); - var key = Key.of(blockId.namespace(), blockId.key()); var state = pair.getB(); + blockId = pair.getA(); + var key = Key.of(blockId.namespace(), blockId.key()); var customBlock = CraftEngineBlocks.byId(key); if (customBlock != null) { ImmutableBlockState blockState = customBlock.defaultState(); From 4ddfd9549f434ce0db2eb99e9fc109198f0047c3 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Mon, 6 Jul 2026 15:43:11 +0200 Subject: [PATCH 5/6] store custom blocks in mantle directly until chunk gen --- .../java/com/volmit/iris/engine/mantle/MantleWriter.java | 9 +++++---- .../java/com/volmit/iris/util/data/IrisCustomData.java | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java b/core/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java index 391bd8eb7..11afa4d7e 100644 --- a/core/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java +++ b/core/src/main/java/com/volmit/iris/engine/mantle/MantleWriter.java @@ -35,6 +35,7 @@ import com.volmit.iris.util.function.Function3; import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.mantle.MantleChunk; +import com.volmit.iris.util.mantle.flag.MantleFlag; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.matter.Matter; import com.volmit.iris.util.matter.MatterCavern; @@ -209,10 +210,10 @@ public int getHighest(int x, int z, IrisData data, boolean ignoreFluid) { @Override public void set(int x, int y, int z, BlockData d) { - if (d instanceof IrisCustomData data) { - setData(x, y, z, data.getBase()); - setData(x, y, z, data.getCustom()); - } else setData(x, y, z, d); + setData(x, y, z, d); + if (d instanceof IrisCustomData) { + acquireChunk(x >> 4, z >> 4).flag(MantleFlag.CUSTOM_ACTIVE, true); + } } @Override diff --git a/core/src/main/java/com/volmit/iris/util/data/IrisCustomData.java b/core/src/main/java/com/volmit/iris/util/data/IrisCustomData.java index 062cb50a1..55184b9a2 100644 --- a/core/src/main/java/com/volmit/iris/util/data/IrisCustomData.java +++ b/core/src/main/java/com/volmit/iris/util/data/IrisCustomData.java @@ -29,6 +29,7 @@ static IrisCustomData of(@NotNull BlockData base, @NotNull Identifier custom) { yield false; yield base.matches(store.getBase()) && custom.equals(store.getCustom()); } + case "getAsString" -> custom.toString(); case "equals" -> { if (!(args[0] instanceof IrisCustomData store)) yield false; From 31615dc052a26506177d132ccf82c22097cfc15e Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Mon, 6 Jul 2026 15:56:29 +0200 Subject: [PATCH 6/6] improve craftengine data provider for normal blocks --- .../link/data/CraftEngineDataProvider.java | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/link/data/CraftEngineDataProvider.java b/core/src/main/java/com/volmit/iris/core/link/data/CraftEngineDataProvider.java index ea4e264f7..e11ae9035 100644 --- a/core/src/main/java/com/volmit/iris/core/link/data/CraftEngineDataProvider.java +++ b/core/src/main/java/com/volmit/iris/core/link/data/CraftEngineDataProvider.java @@ -1,5 +1,6 @@ package com.volmit.iris.core.link.data; +import com.volmit.iris.Iris; import com.volmit.iris.core.link.ExternalDataProvider; import com.volmit.iris.core.link.Identifier; import com.volmit.iris.core.nms.container.BlockProperty; @@ -77,7 +78,29 @@ public void init() { @Override public @NotNull BlockData getBlockData(@NotNull Identifier blockId, @NotNull KMap state) throws MissingResourceException { var key = Key.of(blockId.namespace(), blockId.key()); - if (CraftEngineBlocks.byId(key) == null && CraftEngineFurniture.byId(key) == null) + var customBlock = CraftEngineBlocks.byId(key); + if (customBlock != null) { + ImmutableBlockState blockState = customBlock.defaultState(); + + for (var entry : state.entrySet()) { + var property = customBlock.getProperty(entry.getKey()); + if (property == null) { + Iris.warn("Invalid property %s for block %s", entry.getKey(), key); + continue; + } + var tag = property.optional(entry.getValue()); + if (tag.isEmpty()) { + Iris.warn("Invalid property %s=%s for block %s", entry.getKey(), entry.getValue(), key); + continue; + } + + blockState = ImmutableBlockState.with(blockState, property, tag.get()); + } + + return CraftEngineBlocks.getBukkitBlockData(blockState); + } + + if (CraftEngineFurniture.byId(key) == null) throw new MissingResourceException("Failed to find BlockData!", blockId.namespace(), blockId.key()); return IrisCustomData.of(B.getAir(), ExternalDataSVC.buildState(blockId, state)); } @@ -89,23 +112,10 @@ public void processUpdate(@NotNull Engine engine, @NotNull Block block, @NotNull blockId = pair.getA(); var key = Key.of(blockId.namespace(), blockId.key()); - var customBlock = CraftEngineBlocks.byId(key); - if (customBlock != null) { - ImmutableBlockState blockState = customBlock.defaultState(); - - for (var entry : state.entrySet()) { - var property = customBlock.getProperty(entry.getKey()); - if (property == null) continue; - var tag = property.optional(entry.getValue()).orElse(null); - if (tag == null) continue; - blockState = ImmutableBlockState.with(blockState, property, tag); - } - CraftEngineBlocks.place(block.getLocation(), blockState, false); + var furniture = CraftEngineFurniture.byId(key); + if (furniture == null) return; - } - var furniture = CraftEngineFurniture.byId(key); - if (furniture == null) return; var location = parseYawAndPitch(engine, block, state); String variant = state.getOrDefault("variant", furniture.anyVariantName()); CraftEngineFurniture.place(location, furniture, variant, false);