From da2dd42e289e28de8cc0984ee335003baf2d5edb Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Mon, 16 Jun 2025 16:59:24 +0200 Subject: [PATCH 1/7] invert suppressed error reporting for dev enviroments --- build.gradle.kts | 2 +- core/src/main/java/com/volmit/iris/Iris.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 3094d704e..8fc40d64c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -104,7 +104,7 @@ nmsBindings.forEach { key, value -> systemProperty("disable.watchdog", "") systemProperty("net.kyori.ansi.colorLevel", color) systemProperty("com.mojang.eula.agree", true) - systemProperty("iris.errorReporting", errorReporting) + systemProperty("iris.suppressReporting", !errorReporting) } } diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index 65b78aa43..4fde24ec9 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -956,7 +956,7 @@ public class Iris extends VolmitPlugin implements Listener { private static void setupSentry() { var settings = IrisSettings.get().getSentry(); - if (settings.disableAutoReporting || Sentry.isEnabled() || !Boolean.getBoolean("iris.errorReporting")) return; + if (settings.disableAutoReporting || Sentry.isEnabled() || Boolean.getBoolean("iris.suppressReporting")) return; Iris.info("Enabling Sentry for anonymous error reporting. You can disable this in the settings."); Iris.info("Your server ID is: " + ServerID.ID); Sentry.init(options -> { From d048c073ac2de1c29285b3e322cbd892fea05a23 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Mon, 16 Jun 2025 22:53:11 +0200 Subject: [PATCH 2/7] disable trim for fallback pack download --- core/src/main/java/com/volmit/iris/Iris.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index 4fde24ec9..37ce7e686 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -782,7 +782,7 @@ public class Iris extends VolmitPlugin implements Listener { if (dim == null) { Iris.warn("Unable to find dimension type " + id + " Looking for online packs..."); - service(StudioSVC.class).downloadSearch(new VolmitSender(Bukkit.getConsoleSender()), id, true); + service(StudioSVC.class).downloadSearch(new VolmitSender(Bukkit.getConsoleSender()), id, false); dim = IrisData.loadAnyDimension(id); if (dim == null) { From c9c8a9e4128e486f4efb3413c45f1ce1d8271fb7 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Mon, 16 Jun 2025 22:53:56 +0200 Subject: [PATCH 3/7] fix null pointers in pack trim method --- .../main/java/com/volmit/iris/core/project/IrisProject.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/project/IrisProject.java b/core/src/main/java/com/volmit/iris/core/project/IrisProject.java index d094c82ff..c0f327b6f 100644 --- a/core/src/main/java/com/volmit/iris/core/project/IrisProject.java +++ b/core/src/main/java/com/volmit/iris/core/project/IrisProject.java @@ -377,17 +377,17 @@ public class IrisProject { KSet loot = new KSet<>(); KSet blocks = new KSet<>(); - for (String i : dm.getDimensionLoader().getPossibleKeys()) { + for (String i : dm.getBlockLoader().getPossibleKeys()) { blocks.add(dm.getBlockLoader().load(i)); } dimension.getRegions().forEach((i) -> regions.add(dm.getRegionLoader().load(i))); dimension.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i))); - regions.forEach((i) -> biomes.addAll(i.getAllBiomes(null))); + regions.forEach((i) -> biomes.addAll(i.getAllBiomes(() -> dm))); regions.forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i)))); regions.forEach((r) -> r.getEntitySpawners().forEach((sp) -> spawners.add(dm.getSpawnerLoader().load(sp)))); dimension.getEntitySpawners().forEach((sp) -> spawners.add(dm.getSpawnerLoader().load(sp))); - biomes.forEach((i) -> i.getGenerators().forEach((j) -> generators.add(j.getCachedGenerator(null)))); + biomes.forEach((i) -> i.getGenerators().forEach((j) -> generators.add(j.getCachedGenerator(() -> dm)))); biomes.forEach((r) -> r.getLoot().getTables().forEach((i) -> loot.add(dm.getLootLoader().load(i)))); biomes.forEach((r) -> r.getEntitySpawners().forEach((sp) -> spawners.add(dm.getSpawnerLoader().load(sp)))); spawners.forEach((i) -> i.getSpawns().forEach((j) -> entities.add(dm.getEntityLoader().load(j.getEntity())))); From ad720f4aa22d5a1de2da685438041fdbd946bdfc Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Sat, 21 Jun 2025 11:51:49 +0200 Subject: [PATCH 4/7] fix worm using xStyle for y and z --- .../src/main/java/com/volmit/iris/engine/object/IrisWorm.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisWorm.java b/core/src/main/java/com/volmit/iris/engine/object/IrisWorm.java index d2f7e499c..e2c414533 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisWorm.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisWorm.java @@ -72,8 +72,8 @@ public class IrisWorm { KList pos = new KList<>(); KSet check = allowLoops ? null : new KSet<>(); CNG gx = xStyle.getGenerator().createNoCache(new RNG(rng.lmax()), data); - CNG gy = xStyle.getGenerator().createNoCache(new RNG(rng.lmax()), data); - CNG gz = xStyle.getGenerator().createNoCache(new RNG(rng.lmax()), data); + CNG gy = yStyle.getGenerator().createNoCache(new RNG(rng.lmax()), data); + CNG gz = zStyle.getGenerator().createNoCache(new RNG(rng.lmax()), data); while (itr-- > 0) { IrisPosition current = new IrisPosition(Math.round(cx), Math.round(cy), Math.round(cz)); From 7f6d65a13e6c43b084a0665fdfcc00020d4326a3 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Wed, 4 Jun 2025 23:03:54 +0200 Subject: [PATCH 5/7] fix worm ignoring the breakSurface option --- .../main/java/com/volmit/iris/engine/object/IrisCave.java | 8 +++----- .../com/volmit/iris/engine/object/IrisCavePlacer.java | 2 +- .../java/com/volmit/iris/engine/object/IrisRavine.java | 3 +-- .../main/java/com/volmit/iris/engine/object/IrisWorm.java | 7 +++++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisCave.java b/core/src/main/java/com/volmit/iris/engine/object/IrisCave.java index e0e818403..22a45ccc4 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisCave.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisCave.java @@ -66,14 +66,12 @@ public class IrisCave extends IrisRegistrant { } public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) { - generate(writer, rng, engine, x, y, z, 0, -1); + generate(writer, rng, engine, x, y, z, 0, -1, true); } - public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z, int recursion, int waterHint) { - + public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z, int recursion, int waterHint, boolean breakSurface) { double girth = getWorm().getGirth().get(rng, x, z, engine.getData()); - KList points = getWorm().generate(rng, engine.getData(), writer, verticalRange, x, y, z, (at) -> { - }); + KList points = getWorm().generate(rng, engine.getData(), writer, verticalRange, x, y, z, breakSurface, girth + 9); int highestWater = Math.max(waterHint, -1); if (highestWater == -1) { diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisCavePlacer.java b/core/src/main/java/com/volmit/iris/engine/object/IrisCavePlacer.java index 1a95493a1..eb97b14fd 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisCavePlacer.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisCavePlacer.java @@ -96,7 +96,7 @@ public class IrisCavePlacer implements IRare { } try { - cave.generate(mantle, rng, engine, x + rng.nextInt(15), y, z + rng.nextInt(15), recursion, waterHint); + cave.generate(mantle, rng, engine, x + rng.nextInt(15), y, z + rng.nextInt(15), recursion, waterHint, breakSurface); } catch (Throwable e) { e.printStackTrace(); fail.set(true); diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisRavine.java b/core/src/main/java/com/volmit/iris/engine/object/IrisRavine.java index e2d9a79e4..3edd37c29 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisRavine.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisRavine.java @@ -97,8 +97,7 @@ public class IrisRavine extends IrisRegistrant { } public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z, int recursion, int waterHint) { - KList pos = getWorm().generate(rng, engine.getData(), writer, null, x, y, z, (at) -> { - }); + KList pos = getWorm().generate(rng, engine.getData(), writer, null, x, y, z, true, 0); CNG dg = depthStyle.getGenerator().createNoCache(rng, engine.getData()); CNG bw = baseWidthStyle.getGenerator().createNoCache(rng, engine.getData()); int highestWater = Math.max(waterHint, -1); diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisWorm.java b/core/src/main/java/com/volmit/iris/engine/object/IrisWorm.java index e2c414533..b50f9d3be 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisWorm.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisWorm.java @@ -62,7 +62,7 @@ public class IrisWorm { private IrisStyledRange girth = new IrisStyledRange().setMin(3).setMax(5) .setStyle(new IrisGeneratorStyle(NoiseStyle.PERLIN)); - public KList generate(RNG rng, IrisData data, MantleWriter writer, IrisRange verticalRange, int x, int y, int z, Consumer fork) { + public KList generate(RNG rng, IrisData data, MantleWriter writer, IrisRange verticalRange, int x, int y, int z, boolean breakSurface, double distance) { int itr = maxIterations; double jx, jy, jz; double cx = x; @@ -77,7 +77,6 @@ public class IrisWorm { while (itr-- > 0) { IrisPosition current = new IrisPosition(Math.round(cx), Math.round(cy), Math.round(cz)); - fork.accept(current); pos.add(current); if (check != null) { @@ -92,6 +91,10 @@ public class IrisWorm { cz += jz; IrisPosition next = new IrisPosition(Math.round(cx), Math.round(cy), Math.round(cz)); + if (!breakSurface && writer.getEngineMantle().getHighest(next.getX(), next.getZ(), true) <= next.getY() + distance) { + break; + } + if (verticalRange != null && !verticalRange.contains(next.getY())) { break; } From 9d44ac0b47e7bbb8dfffef0c61a67051f7b1aab7 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Sat, 21 Jun 2025 12:04:07 +0200 Subject: [PATCH 6/7] fix caves being non-deterministic --- .../com/volmit/iris/engine/object/IrisCavePlacer.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisCavePlacer.java b/core/src/main/java/com/volmit/iris/engine/object/IrisCavePlacer.java index eb97b14fd..c56a53d69 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisCavePlacer.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisCavePlacer.java @@ -86,13 +86,9 @@ public class IrisCavePlacer implements IRare { } if (y == -1) { - if(!breakSurface) { - int eH = engine.getHeight(x, z); - if (caveStartHeight.getMax() > eH) { - caveStartHeight.setMax(eH); - } - } - y = (int) caveStartHeight.get(rng, x, z, data); + int h = (int) caveStartHeight.get(rng, x, z, data); + int ma = breakSurface ? h : (int) (engine.getComplex().getHeightStream().get(x, z) - 9); + y = Math.min(h, ma); } try { From e5cb4d82a34796b3666d95c321e956abf977e6af Mon Sep 17 00:00:00 2001 From: Julian Krings <47589149+CrazyDev05@users.noreply.github.com> Date: Sat, 21 Jun 2025 12:05:56 +0200 Subject: [PATCH 7/7] Add KGenerators support (#1209) --- core/build.gradle.kts | 3 + .../core/link/KGeneratorsDataProvider.java | 88 +++++++++++++++++++ .../iris/core/service/ExternalDataSVC.java | 4 + 3 files changed, 95 insertions(+) create mode 100644 core/src/main/java/com/volmit/iris/core/link/KGeneratorsDataProvider.java diff --git a/core/build.gradle.kts b/core/build.gradle.kts index cebfbc6c5..50ff813f0 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -60,6 +60,9 @@ dependencies { compileOnly("com.github.Ssomar-Developement:SCore:4.23.10.8") compileOnly("net.Indyuce:MMOItems-API:6.9.5-SNAPSHOT") compileOnly("com.willfp:EcoItems:5.44.0") + compileOnly("me.kryniowesegryderiusz:kgenerators-core:7.3") { + isTransitive = false + } //implementation files("libs/CustomItems.jar") diff --git a/core/src/main/java/com/volmit/iris/core/link/KGeneratorsDataProvider.java b/core/src/main/java/com/volmit/iris/core/link/KGeneratorsDataProvider.java new file mode 100644 index 000000000..618fe4ccc --- /dev/null +++ b/core/src/main/java/com/volmit/iris/core/link/KGeneratorsDataProvider.java @@ -0,0 +1,88 @@ +package com.volmit.iris.core.link; + +import com.volmit.iris.core.service.ExternalDataSVC; +import com.volmit.iris.engine.framework.Engine; +import com.volmit.iris.util.collection.KMap; +import com.volmit.iris.util.data.B; +import com.volmit.iris.util.data.IrisCustomData; +import me.kryniowesegryderiusz.kgenerators.Main; +import me.kryniowesegryderiusz.kgenerators.api.KGeneratorsAPI; +import me.kryniowesegryderiusz.kgenerators.generators.locations.objects.GeneratorLocation; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.data.BlockData; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.util.MissingResourceException; + +public class KGeneratorsDataProvider extends ExternalDataProvider { + public KGeneratorsDataProvider() { + super("KGenerators"); + } + + @Override + public void init() { + + } + + @Override + public @NotNull BlockData getBlockData(@NotNull Identifier blockId, @NotNull KMap state) throws MissingResourceException { + if (Main.getGenerators().get(blockId.key()) == null) throw new MissingResourceException("Failed to find BlockData!", blockId.namespace(), blockId.key()); + return new IrisCustomData(Material.STRUCTURE_VOID.createBlockData(), ExternalDataSVC.buildState(blockId, state)); + } + + @Override + public @NotNull ItemStack getItemStack(@NotNull Identifier itemId, @NotNull KMap customNbt) throws MissingResourceException { + var gen = Main.getGenerators().get(itemId.key()); + if (gen == null) throw new MissingResourceException("Failed to find ItemData!", itemId.namespace(), itemId.key()); + return gen.getGeneratorItem(); + } + + @Override + public void processUpdate(@NotNull Engine engine, @NotNull Block block, @NotNull Identifier blockId) { + if (block.getType() != Material.STRUCTURE_VOID) return; + var existing = KGeneratorsAPI.getLoadedGeneratorLocation(block.getLocation()); + if (existing != null) return; + block.setBlockData(B.getAir(), false); + var gen = Main.getGenerators().get(blockId.key()); + if (gen == null) return; + var loc = new GeneratorLocation(-1, gen, block.getLocation(), Main.getPlacedGenerators().getChunkInfo(block.getChunk()), null, null); + Main.getDatabases().getDb().saveGenerator(loc); + Main.getPlacedGenerators().addLoaded(loc); + Main.getSchedules().schedule(loc, true); + } + + @Override + public @NotNull Identifier[] getBlockTypes() { + return Main.getGenerators().getAll().stream() + .map(gen -> new Identifier("kgenerators", gen.getId())) + .filter(i -> { + try { + return getBlockData(i) != null; + } catch (MissingResourceException e) { + return false; + } + }) + .toArray(Identifier[]::new); + } + + @Override + public @NotNull Identifier[] getItemTypes() { + return Main.getGenerators().getAll().stream() + .map(gen -> new Identifier("kgenerators", gen.getId())) + .filter(i -> { + try { + return getItemStack(i) != null; + } catch (MissingResourceException e) { + return false; + } + }) + .toArray(Identifier[]::new); + } + + @Override + public boolean isValidProvider(@NotNull Identifier id, boolean isItem) { + return "kgenerators".equalsIgnoreCase(id.namespace()); + } +} 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 c71224a99..4d9596278 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 @@ -75,6 +75,10 @@ public class ExternalDataSVC implements IrisService { if (Bukkit.getPluginManager().getPlugin("EcoItems") != null) { Iris.info("EcoItems found, loading EcoItemsDataProvider..."); } + providers.add(new KGeneratorsDataProvider()); + if (Bukkit.getPluginManager().getPlugin("KGenerators") != null) { + Iris.info("KGenerators found, loading KGeneratorsDataProvider..."); + } for (ExternalDataProvider p : providers) { if (p.isReady()) {