From d1870ee0a86b5c15b885b1152d1a058b081f848d Mon Sep 17 00:00:00 2001 From: Brian Fopiano Date: Thu, 4 Aug 2022 08:43:03 -0700 Subject: [PATCH 1/7] V+ --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index bfdb89d32..27d88e6de 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ plugins { id "de.undercouch.download" version "5.0.1" } -version '2.2.6-1.19.1' // Needs to be version specific +version '2.2.7-1.19.1' // Needs to be version specific def nmsVersion = "1.19.1" def apiVersion = '1.19' def spigotJarVersion = '1.19.1-R0.1-SNAPSHOT' From 2f8922ea87d43fc5be229596dd55b47ec18f1bbb Mon Sep 17 00:00:00 2001 From: Brian Fopiano Date: Sun, 7 Aug 2022 14:14:39 -0700 Subject: [PATCH 2/7] Updating Version and NMS --- build.gradle | 4 ++-- src/main/java/com/volmit/iris/core/nms/INMS.java | 4 ++-- .../NMSBinding19_1.java => v19_2/NMSBinding19_2.java} | 9 ++------- 3 files changed, 6 insertions(+), 11 deletions(-) rename src/main/java/com/volmit/iris/core/nms/{v19_1/NMSBinding19_1.java => v19_2/NMSBinding19_2.java} (98%) diff --git a/build.gradle b/build.gradle index 27d88e6de..c2bdcfd98 100644 --- a/build.gradle +++ b/build.gradle @@ -24,8 +24,8 @@ plugins { id "de.undercouch.download" version "5.0.1" } -version '2.2.7-1.19.1' // Needs to be version specific -def nmsVersion = "1.19.1" +version '2.2.8-1.19.2' // Needs to be version specific +def nmsVersion = "1.19.2" def apiVersion = '1.19' def spigotJarVersion = '1.19.1-R0.1-SNAPSHOT' def name = getRootProject().getName() // Defined in settings.gradle diff --git a/src/main/java/com/volmit/iris/core/nms/INMS.java b/src/main/java/com/volmit/iris/core/nms/INMS.java index 89d7ab4ab..a1b95d08f 100644 --- a/src/main/java/com/volmit/iris/core/nms/INMS.java +++ b/src/main/java/com/volmit/iris/core/nms/INMS.java @@ -20,7 +20,7 @@ package com.volmit.iris.core.nms; import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; -import com.volmit.iris.core.nms.v19_1.NMSBinding19_1; +import com.volmit.iris.core.nms.v19_2.NMSBinding19_2; import com.volmit.iris.core.nms.v1X.NMSBinding1X; import com.volmit.iris.util.collection.KMap; import org.bukkit.Bukkit; @@ -28,7 +28,7 @@ import org.bukkit.Bukkit; public class INMS { //@builder private static final KMap> bindings = new KMap>() - .qput("v1_19_R1", NMSBinding19_1.class); + .qput("v1_19_R1", NMSBinding19_2.class); //@done private static final INMSBinding binding = bind(); diff --git a/src/main/java/com/volmit/iris/core/nms/v19_1/NMSBinding19_1.java b/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java similarity index 98% rename from src/main/java/com/volmit/iris/core/nms/v19_1/NMSBinding19_1.java rename to src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java index 1157b2645..6663b563f 100644 --- a/src/main/java/com/volmit/iris/core/nms/v19_1/NMSBinding19_1.java +++ b/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package com.volmit.iris.core.nms.v19_1; +package com.volmit.iris.core.nms.v19_2; import com.volmit.iris.Iris; @@ -39,15 +39,10 @@ import it.unimi.dsi.fastutil.objects.Object2IntMap; import net.minecraft.core.*; import net.minecraft.nbt.NbtIo; import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.BitStorage; -import net.minecraft.util.Mth; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.LevelChunkSection; -import net.minecraft.world.level.chunk.Palette; -import net.minecraft.world.level.chunk.PalettedContainer; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -74,7 +69,7 @@ import java.util.Iterator; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; -public class NMSBinding19_1 implements INMSBinding { +public class NMSBinding19_2 implements INMSBinding { private final KMap baseBiomeCache = new KMap<>(); private final BlockData AIR = Material.AIR.createBlockData(); From af9f01787139e6295111ed8e2663b0d8b87a3960 Mon Sep 17 00:00:00 2001 From: DanMB Date: Sun, 7 Aug 2022 16:09:36 -0700 Subject: [PATCH 3/7] Hold your horses pregenerator --- .../core/pregenerator/IrisPregenerator.java | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java b/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java index d143cea84..00f7fd6a0 100644 --- a/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java +++ b/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java @@ -29,6 +29,7 @@ import com.volmit.iris.util.scheduling.ChronoLatch; import com.volmit.iris.util.scheduling.J; import com.volmit.iris.util.scheduling.Looper; +import java.util.concurrent.Semaphore; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; @@ -55,10 +56,12 @@ public class IrisPregenerator { private final KSet retry; private final KSet net; private final ChronoLatch cl; + private final Semaphore limiter; public IrisPregenerator(PregenTask task, PregeneratorMethod generator, PregenListener listener) { this.listener = listenify(listener); cl = new ChronoLatch(5000); + limiter = new Semaphore(Runtime.getRuntime().availableProcessors()); generatedRegions = new KSet<>(); this.shutdown = new AtomicBoolean(false); this.paused = new AtomicBoolean(false); @@ -163,12 +166,26 @@ public class IrisPregenerator { boolean hit = false; if(generator.supportsRegions(x, z, listener) && regions) { hit = true; - listener.onRegionGenerating(x, z); - generator.generateRegion(x, z, listener); + try { + limiter.acquire(); + listener.onRegionGenerating(x, z); + generator.generateRegion(x, z, listener); + limiter.release(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } } else if(!regions) { hit = true; listener.onRegionGenerating(x, z); - PregenTask.iterateRegion(x, z, (xx, zz) -> generator.generateChunk(xx, zz, listener)); + PregenTask.iterateRegion(x, z, (xx, zz) -> { + try { + limiter.acquire(); + generator.generateChunk(xx, zz, listener); + limiter.release(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + }); } if(hit) { From 82bd94620ed1f82f7deadf1b664521ce7839a647 Mon Sep 17 00:00:00 2001 From: DanMB Date: Sun, 7 Aug 2022 16:10:49 -0700 Subject: [PATCH 4/7] Lock biomes first before generating to help cache --- src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java b/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java index d00ec09ff..9fd8301ca 100644 --- a/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java +++ b/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java @@ -42,10 +42,10 @@ public class ModeOverworld extends IrisEngineMode implements EngineMode { var deposit = new IrisDepositModifier(getEngine()); var perfection = new IrisPerfectionModifier(getEngine()); + registerStage((x, z, k, p, m) -> biome.actuate(x, z, p, m)); registerStage(burst( (x, z, k, p, m) -> generateMatter(x >> 4, z >> 4, m), - (x, z, k, p, m) -> terrain.actuate(x, z, k, m), - (x, z, k, p, m) -> biome.actuate(x, z, p, m) + (x, z, k, p, m) -> terrain.actuate(x, z, k, m) )); registerStage((x, z, k, p, m) -> cave.modify(x >> 4, z >> 4, k, m)); registerStage((x, z, k, p, m) -> deposit.modify(x, z, k, m)); From 93421a1dc967cf5b0b91b0c153e04a5de477e13f Mon Sep 17 00:00:00 2001 From: DanMB Date: Thu, 11 Aug 2022 18:18:00 -0700 Subject: [PATCH 5/7] An attempt --- .../engine/platform/BukkitChunkGenerator.java | 4 +++- .../engine/platform/DummyBiomeProvider.java | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/volmit/iris/engine/platform/DummyBiomeProvider.java diff --git a/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java b/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java index d12028f25..9d644fcf0 100644 --- a/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java +++ b/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java @@ -81,12 +81,14 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun private Engine engine; private Looper hotloader; private StudioMode lastMode; + private DummyBiomeProvider dummyBiomeProvider; @Setter private StudioGenerator studioGenerator; public BukkitChunkGenerator(IrisWorld world, boolean studio, File dataLocation, String dimensionKey) { setup = new AtomicBoolean(false); studioGenerator = null; + dummyBiomeProvider = new DummyBiomeProvider(); populators = new KList<>(); loadLock = new Semaphore(LOAD_LOCKS); this.world = world; @@ -368,6 +370,6 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun @Nullable @Override public BiomeProvider getDefaultBiomeProvider(@NotNull WorldInfo worldInfo) { - return null; + return dummyBiomeProvider; } } diff --git a/src/main/java/com/volmit/iris/engine/platform/DummyBiomeProvider.java b/src/main/java/com/volmit/iris/engine/platform/DummyBiomeProvider.java new file mode 100644 index 000000000..206fad782 --- /dev/null +++ b/src/main/java/com/volmit/iris/engine/platform/DummyBiomeProvider.java @@ -0,0 +1,24 @@ +package com.volmit.iris.engine.platform; + +import org.bukkit.block.Biome; +import org.bukkit.generator.BiomeProvider; +import org.bukkit.generator.WorldInfo; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class DummyBiomeProvider extends BiomeProvider { + private final List ALL = List.of(Biome.values()); + + @NotNull + @Override + public Biome getBiome(@NotNull WorldInfo worldInfo, int x, int y, int z) { + return Biome.PLAINS; + } + + @NotNull + @Override + public List getBiomes(@NotNull WorldInfo worldInfo) { + return ALL; + } +} From 4d6c092615968eac0b5a4fb09fc12daed2630395 Mon Sep 17 00:00:00 2001 From: Brian Fopiano Date: Thu, 11 Aug 2022 18:34:38 -0700 Subject: [PATCH 6/7] Performance... --- .../com/volmit/iris/engine/platform/DummyBiomeProvider.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/engine/platform/DummyBiomeProvider.java b/src/main/java/com/volmit/iris/engine/platform/DummyBiomeProvider.java index 206fad782..c453d5a62 100644 --- a/src/main/java/com/volmit/iris/engine/platform/DummyBiomeProvider.java +++ b/src/main/java/com/volmit/iris/engine/platform/DummyBiomeProvider.java @@ -1,5 +1,6 @@ package com.volmit.iris.engine.platform; +import com.volmit.iris.util.collection.KList; import org.bukkit.block.Biome; import org.bukkit.generator.BiomeProvider; import org.bukkit.generator.WorldInfo; @@ -8,7 +9,7 @@ import org.jetbrains.annotations.NotNull; import java.util.List; public class DummyBiomeProvider extends BiomeProvider { - private final List ALL = List.of(Biome.values()); + private final List ALL = new KList<>(Biome.values()).qdel(Biome.CUSTOM); @NotNull @Override From 3a4aac1ee4ddb9e74fb8332769b6a64d04c58514 Mon Sep 17 00:00:00 2001 From: DanMB Date: Fri, 12 Aug 2022 08:05:48 -0700 Subject: [PATCH 7/7] Get all --- .../iris/util/stream/ProceduralStream.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java b/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java index 6f6ba5d0c..c4ac879b4 100644 --- a/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java +++ b/src/main/java/com/volmit/iris/util/stream/ProceduralStream.java @@ -20,6 +20,7 @@ package com.volmit.iris.util.stream; import com.volmit.iris.Iris; import com.volmit.iris.core.loader.IrisData; +import com.volmit.iris.engine.data.cache.Cache; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.object.IRare; import com.volmit.iris.engine.object.IrisStyledRange; @@ -531,6 +532,21 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated { ProceduralStream getSource(); + default void fillChunk(int x, int z, T[] c) { + if(c.length != 256) { + throw new RuntimeException("Not 256 Length for chunk get"); + } + + int xs = x << 4; + int zs = z << 4; + + for(int i = 0; i < 16; i++) { + for(int j = 0; j < 16; j++) { + c[Cache.to1D(i+xs, j+zs, 0, 16, 16)] = get(i+xs, j+zs); + } + } + } + T get(double x, double z); T get(double x, double y, double z);