From cc850522e6e31e5ecce4daa90c498881980d69cd Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Tue, 13 Sep 2022 09:29:07 -0400 Subject: [PATCH 01/20] BRRRRRRRRRRRRRRRRRRR --- .../engine/data/chunk/LinkedTerrainChunk.java | 2 +- .../volmit/iris/engine/object/IrisWorld.java | 9 ++ .../engine/platform/BukkitChunkGenerator.java | 97 +++++++++++++++---- .../iris/engine/platform/DummyBiomeGrid.java | 29 ++++++ 4 files changed, 115 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/volmit/iris/engine/platform/DummyBiomeGrid.java diff --git a/src/main/java/com/volmit/iris/engine/data/chunk/LinkedTerrainChunk.java b/src/main/java/com/volmit/iris/engine/data/chunk/LinkedTerrainChunk.java index 38e9535b4..dc7775b19 100644 --- a/src/main/java/com/volmit/iris/engine/data/chunk/LinkedTerrainChunk.java +++ b/src/main/java/com/volmit/iris/engine/data/chunk/LinkedTerrainChunk.java @@ -38,7 +38,7 @@ public class LinkedTerrainChunk implements TerrainChunk { private final BiomeGrid storage; private ChunkData rawChunkData; @Setter - private boolean unsafe = false; + private boolean unsafe = true; public LinkedTerrainChunk(World world) { this(null, Bukkit.createChunkData(world)); diff --git a/src/main/java/com/volmit/iris/engine/object/IrisWorld.java b/src/main/java/com/volmit/iris/engine/object/IrisWorld.java index 0589521d8..2b5090d20 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisWorld.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisWorld.java @@ -32,6 +32,7 @@ import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; +import org.bukkit.generator.WorldInfo; import java.io.File; import java.util.Collection; @@ -109,6 +110,14 @@ public class IrisWorld { } } + public void bind(WorldInfo worldInfo) { + name(worldInfo.getName()) + .worldFolder(new File(worldInfo.getName())) + .minHeight(worldInfo.getMinHeight()) + .maxHeight(worldInfo.getMaxHeight()) + .environment(worldInfo.getEnvironment()); + } + public void bind(World world) { if(hasRealWorld()) { return; 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 eff5384cc..c4a7da32a 100644 --- a/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java +++ b/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java @@ -46,6 +46,7 @@ import lombok.EqualsAndHashCode; import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.Chunk; +import org.bukkit.HeightMap; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Biome; @@ -64,6 +65,8 @@ import java.util.List; import java.util.Random; import java.util.concurrent.Semaphore; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.ReentrantLock; import java.util.function.Consumer; @EqualsAndHashCode(callSuper = true) @@ -75,6 +78,7 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun private final File dataLocation; private final String dimensionKey; private final ReactiveFolder folder; + private final ReentrantLock lock = new ReentrantLock(); private final KList populators; private final ChronoLatch hotloadChecker; private final AtomicBoolean setup; @@ -197,34 +201,42 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun } } - private Engine getEngine(World world) { + private Engine getEngine(WorldInfo world) { if(setup.get()) { return getEngine(); } - synchronized(this) { - getWorld().setRawWorldSeed(world.getSeed()); - setupEngine(); - this.hotloader = studio ? new Looper() { - @Override - protected long loop() { - if(hotloadChecker.flip()) { - folder.check(); - } + lock.lock(); - return 250; - } - } : null; - - if(studio) { - hotloader.setPriority(Thread.MIN_PRIORITY); - hotloader.start(); - hotloader.setName(getTarget().getWorld().name() + " Hotloader"); - } - - setup.set(true); + if(setup.get()) + { + return getEngine(); } + + setup.set(true); + getWorld().setRawWorldSeed(world.getSeed()); + setupEngine(); + this.hotloader = studio ? new Looper() { + @Override + protected long loop() { + if(hotloadChecker.flip()) { + folder.check(); + } + + return 250; + } + } : null; + + if(studio) { + hotloader.setPriority(Thread.MIN_PRIORITY); + hotloader.start(); + hotloader.setName(getTarget().getWorld().name() + " Hotloader"); + } + + lock.unlock(); + + return engine; } @@ -273,8 +285,51 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun getEngine(world); } + private final AtomicInteger a = new AtomicInteger(0); + + @Override + public void generateNoise(@NotNull WorldInfo world, @NotNull Random random, int x, int z, @NotNull ChunkGenerator.ChunkData d) { + try { + getEngine(world); + computeStudioGenerator(); + TerrainChunk tc = TerrainChunk.create(d, new IrisBiomeStorage()); + this.world.bind(world); + if(studioGenerator != null) { + studioGenerator.generateChunk(getEngine(), tc, x, z); + } else { + ChunkDataHunkHolder blocks = new ChunkDataHunkHolder(tc); + BiomeGridHunkHolder biomes = new BiomeGridHunkHolder(tc, tc.getMinHeight(), tc.getMaxHeight()); + getEngine().generate(x << 4, z << 4, blocks, biomes, true); + blocks.apply(); + biomes.apply(); + } + + Iris.debug("Generated " + x + " " + z); + } catch(Throwable e) { + Iris.error("======================================"); + e.printStackTrace(); + Iris.reportErrorChunk(x, z, e, "CHUNK"); + Iris.error("======================================"); + + for(int i = 0; i < 16; i++) { + for(int j = 0; j < 16; j++) { + d.setBlock(i, 0, j, Material.RED_GLAZED_TERRACOTTA.createBlockData()); + } + } + } + } + + @Override + public int getBaseHeight(@NotNull WorldInfo worldInfo, @NotNull Random random, int x, int z, @NotNull HeightMap heightMap) { + return 4; + } + @Override public @NotNull ChunkData generateChunkData(@NotNull World world, @NotNull Random ignored, int x, int z, @NotNull BiomeGrid biome) { + if(true) { + super.generateChunkData(world, ignored, x, z, biome); + } + try { getEngine(world); computeStudioGenerator(); diff --git a/src/main/java/com/volmit/iris/engine/platform/DummyBiomeGrid.java b/src/main/java/com/volmit/iris/engine/platform/DummyBiomeGrid.java new file mode 100644 index 000000000..0d9db538f --- /dev/null +++ b/src/main/java/com/volmit/iris/engine/platform/DummyBiomeGrid.java @@ -0,0 +1,29 @@ +package com.volmit.iris.engine.platform; + +import org.bukkit.block.Biome; +import org.bukkit.generator.ChunkGenerator; +import org.jetbrains.annotations.NotNull; + +public class DummyBiomeGrid implements ChunkGenerator.BiomeGrid { + @NotNull + @Override + public Biome getBiome(int x, int z) { + return null; + } + + @NotNull + @Override + public Biome getBiome(int x, int y, int z) { + return null; + } + + @Override + public void setBiome(int x, int z, @NotNull Biome bio) { + + } + + @Override + public void setBiome(int x, int y, int z, @NotNull Biome bio) { + + } +} From 3aa3c1347773f8cc542801dc4eb607ccefa1ae27 Mon Sep 17 00:00:00 2001 From: DanMB Date: Tue, 13 Sep 2022 22:55:26 -0400 Subject: [PATCH 02/20] Test speed --- .../engine/platform/BukkitChunkGenerator.java | 46 +------------------ 1 file changed, 1 insertion(+), 45 deletions(-) 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 c4a7da32a..abc506d11 100644 --- a/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java +++ b/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java @@ -299,7 +299,7 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun } else { ChunkDataHunkHolder blocks = new ChunkDataHunkHolder(tc); BiomeGridHunkHolder biomes = new BiomeGridHunkHolder(tc, tc.getMinHeight(), tc.getMaxHeight()); - getEngine().generate(x << 4, z << 4, blocks, biomes, true); + getEngine().generate(x << 4, z << 4, blocks, biomes, false); blocks.apply(); biomes.apply(); } @@ -324,50 +324,6 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun return 4; } - @Override - public @NotNull ChunkData generateChunkData(@NotNull World world, @NotNull Random ignored, int x, int z, @NotNull BiomeGrid biome) { - if(true) { - super.generateChunkData(world, ignored, x, z, biome); - } - - try { - getEngine(world); - computeStudioGenerator(); - TerrainChunk tc = TerrainChunk.create(world, biome); - this.world.bind(world); - - if(studioGenerator != null) { - studioGenerator.generateChunk(getEngine(), tc, x, z); - } else { - ChunkDataHunkHolder blocks = new ChunkDataHunkHolder(tc); - BiomeGridHunkHolder biomes = new BiomeGridHunkHolder(tc, tc.getMinHeight(), tc.getMaxHeight()); - getEngine().generate(x << 4, z << 4, blocks, biomes, true); - blocks.apply(); - biomes.apply(); - } - - ChunkData c = tc.getRaw(); - Iris.debug("Generated " + x + " " + z); - - return c; - } catch(Throwable e) { - Iris.error("======================================"); - e.printStackTrace(); - Iris.reportErrorChunk(x, z, e, "CHUNK"); - Iris.error("======================================"); - - ChunkData d = Bukkit.createChunkData(world); - - for(int i = 0; i < 16; i++) { - for(int j = 0; j < 16; j++) { - d.setBlock(i, 0, j, Material.RED_GLAZED_TERRACOTTA.createBlockData()); - } - } - - return d; - } - } - private void computeStudioGenerator() { if(!getEngine().getDimension().getStudioMode().equals(lastMode)) { lastMode = getEngine().getDimension().getStudioMode(); From a66d60eaeaa596ede1b303d27ac155ae94941783 Mon Sep 17 00:00:00 2001 From: DanMB Date: Tue, 13 Sep 2022 23:06:52 -0400 Subject: [PATCH 03/20] woah --- .../engine/platform/BukkitChunkGenerator.java | 2 +- .../iris/engine/platform/DummyBiomeProvider.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) 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 abc506d11..33a800179 100644 --- a/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java +++ b/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java @@ -299,7 +299,7 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun } else { ChunkDataHunkHolder blocks = new ChunkDataHunkHolder(tc); BiomeGridHunkHolder biomes = new BiomeGridHunkHolder(tc, tc.getMinHeight(), tc.getMaxHeight()); - getEngine().generate(x << 4, z << 4, blocks, biomes, false); + getEngine().generate(x << 4, z << 4, blocks, biomes, true); blocks.apply(); biomes.apply(); } 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 c453d5a62..4b6d74812 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.Iris; import com.volmit.iris.util.collection.KList; import org.bukkit.block.Biome; import org.bukkit.generator.BiomeProvider; @@ -14,6 +15,20 @@ public class DummyBiomeProvider extends BiomeProvider { @NotNull @Override public Biome getBiome(@NotNull WorldInfo worldInfo, int x, int y, int z) { + if(x == 10000 && z == 10000) { + try + { + Iris.error("Im biome provider, who am i?"); + Iris.error(getClass().getCanonicalName()); + throw new RuntimeException("WHATS GOING ON"); + } + + catch(Throwable e) + { + e.printStackTrace(); + } + } + return Biome.PLAINS; } From 78e9f2143939b867bf0aecb72fe61c0beb493013 Mon Sep 17 00:00:00 2001 From: DanMB Date: Tue, 13 Sep 2022 23:32:11 -0400 Subject: [PATCH 04/20] f --- .../iris/core/nms/v19_2/NMSBinding19_2.java | 16 ++++++++++++---- .../iris/engine/platform/DummyBiomeProvider.java | 14 -------------- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java b/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java index 6663b563f..c595ca6ac 100644 --- a/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java +++ b/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java @@ -22,7 +22,9 @@ package com.volmit.iris.core.nms.v19_2; import com.volmit.iris.Iris; import com.volmit.iris.core.nms.INMSBinding; import com.volmit.iris.engine.data.cache.AtomicCache; +import com.volmit.iris.engine.object.IrisBiome; import com.volmit.iris.util.collection.KMap; +import com.volmit.iris.util.hunk.Hunk; import com.volmit.iris.util.nbt.io.NBTUtil; import com.volmit.iris.util.nbt.mca.NBTWorld; import com.volmit.iris.util.nbt.mca.palette.MCABiomeContainer; @@ -37,20 +39,20 @@ import com.volmit.iris.util.nbt.mca.palette.MCAWrappedPalettedContainer; import com.volmit.iris.util.nbt.tag.CompoundTag; import it.unimi.dsi.fastutil.objects.Object2IntMap; import net.minecraft.core.*; +import net.minecraft.core.Registry; import net.minecraft.nbt.NbtIo; import net.minecraft.resources.ResourceLocation; 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 org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; +import net.minecraft.world.level.chunk.LevelChunk; +import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; +import org.bukkit.craftbukkit.v1_19_R1.CraftChunk; import org.bukkit.craftbukkit.v1_19_R1.CraftServer; import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; import org.bukkit.craftbukkit.v1_19_R1.block.data.CraftBlockData; @@ -333,6 +335,12 @@ public class NMSBinding19_2 implements INMSBinding { return true; } + public void setBiomes(int cx, int cz, World world, Hunk biomes) { + LevelChunk c = ((CraftWorld)world).getHandle().getChunk(cx, cz); + biomes.iterateSync((x,y,z,b) -> c.setBiome(x, y, z, (Holder)b)); + c.setUnsaved(true); + } + @Override public void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk) { try { 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 4b6d74812..5a5f4c4b7 100644 --- a/src/main/java/com/volmit/iris/engine/platform/DummyBiomeProvider.java +++ b/src/main/java/com/volmit/iris/engine/platform/DummyBiomeProvider.java @@ -15,20 +15,6 @@ public class DummyBiomeProvider extends BiomeProvider { @NotNull @Override public Biome getBiome(@NotNull WorldInfo worldInfo, int x, int y, int z) { - if(x == 10000 && z == 10000) { - try - { - Iris.error("Im biome provider, who am i?"); - Iris.error(getClass().getCanonicalName()); - throw new RuntimeException("WHATS GOING ON"); - } - - catch(Throwable e) - { - e.printStackTrace(); - } - } - return Biome.PLAINS; } From 2ad9a525bd3420c54d8cc4c2abb61fbc005427bf Mon Sep 17 00:00:00 2001 From: DanMB Date: Wed, 14 Sep 2022 03:56:06 -0400 Subject: [PATCH 05/20] Biome holder injection post gen --- .../com/volmit/iris/core/nms/INMSBinding.java | 4 + .../iris/core/nms/v19_2/NMSBinding19_2.java | 20 +++++ .../iris/core/nms/v1X/NMSBinding1X.java | 7 ++ .../volmit/iris/engine/IrisWorldManager.java | 20 ++++- .../engine/actuator/IrisBiomeActuator.java | 63 +++------------ .../iris/util/matter/MatterBiomeInject.java | 31 +++++++ .../util/matter/slices/BiomeInjectMatter.java | 80 +++++++++++++++++++ 7 files changed, 170 insertions(+), 55 deletions(-) create mode 100644 src/main/java/com/volmit/iris/util/matter/MatterBiomeInject.java create mode 100644 src/main/java/com/volmit/iris/util/matter/slices/BiomeInjectMatter.java diff --git a/src/main/java/com/volmit/iris/core/nms/INMSBinding.java b/src/main/java/com/volmit/iris/core/nms/INMSBinding.java index 031766349..5cb491a2e 100644 --- a/src/main/java/com/volmit/iris/core/nms/INMSBinding.java +++ b/src/main/java/com/volmit/iris/core/nms/INMSBinding.java @@ -18,9 +18,11 @@ package com.volmit.iris.core.nms; +import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.nbt.mca.palette.MCABiomeContainer; import com.volmit.iris.util.nbt.mca.palette.MCAPaletteAccess; import com.volmit.iris.util.nbt.tag.CompoundTag; +import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.WorldCreator; @@ -83,4 +85,6 @@ public interface INMSBinding { } MCAPaletteAccess createPalette(); + + void injectBiomesFromMantle(Chunk e, Mantle mantle); } diff --git a/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java b/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java index c595ca6ac..9dab95d52 100644 --- a/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java +++ b/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java @@ -25,6 +25,8 @@ import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.object.IrisBiome; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.hunk.Hunk; +import com.volmit.iris.util.mantle.Mantle; +import com.volmit.iris.util.matter.MatterBiomeInject; import com.volmit.iris.util.nbt.io.NBTUtil; import com.volmit.iris.util.nbt.mca.NBTWorld; import com.volmit.iris.util.nbt.mca.palette.MCABiomeContainer; @@ -399,6 +401,24 @@ public class NMSBinding19_2 implements INMSBinding { i -> ((CraftBlockData) NBTWorld.getBlockData(i)).getState()); } + @Override + public void injectBiomesFromMantle(Chunk e, Mantle mantle) { + LevelChunk chunk = ((CraftChunk)e).getHandle(); + mantle.iterateChunk(e.getX(), e.getZ(), MatterBiomeInject.class, (x,y,z,b) -> { + if(b != null) { + if(b.isCustom()) { + chunk.setBiome(x, y, z, (Holder) getBiomeBaseFromId(b.getBiomeId())); + } + + else { + chunk.setBiome(x, y, z, (Holder) getBiomeBase(e.getWorld(), b.getBiome())); + } + } + }); + + chunk.setUnsaved(true); + } + private static Object getFor(Class type, Object source) { Object o = fieldFor(type, source); diff --git a/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java b/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java index 6db7933ca..59cf364fc 100644 --- a/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java +++ b/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java @@ -20,9 +20,11 @@ package com.volmit.iris.core.nms.v1X; import com.volmit.iris.Iris; import com.volmit.iris.core.nms.INMSBinding; +import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.nbt.mca.palette.MCABiomeContainer; import com.volmit.iris.util.nbt.mca.palette.MCAPaletteAccess; import com.volmit.iris.util.nbt.tag.CompoundTag; +import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.Biome; @@ -57,6 +59,11 @@ public class NMSBinding1X implements INMSBinding { return null; } + @Override + public void injectBiomesFromMantle(Chunk e, Mantle mantle) { + + } + @Override public void deserializeTile(CompoundTag s, Location newPosition) { diff --git a/src/main/java/com/volmit/iris/engine/IrisWorldManager.java b/src/main/java/com/volmit/iris/engine/IrisWorldManager.java index fe8920c60..c03b3c51a 100644 --- a/src/main/java/com/volmit/iris/engine/IrisWorldManager.java +++ b/src/main/java/com/volmit/iris/engine/IrisWorldManager.java @@ -21,6 +21,7 @@ package com.volmit.iris.engine; import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.loader.IrisData; +import com.volmit.iris.core.nms.INMS; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.EngineAssignedWorldManager; import com.volmit.iris.engine.object.*; @@ -31,14 +32,14 @@ import com.volmit.iris.util.format.Form; import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.mantle.MantleFlag; import com.volmit.iris.util.math.M; +import com.volmit.iris.util.math.Position2; import com.volmit.iris.util.math.RNG; +import com.volmit.iris.util.matter.MatterBiomeInject; import com.volmit.iris.util.matter.MatterMarker; import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.plugin.Chunks; import com.volmit.iris.util.plugin.VolmitSender; -import com.volmit.iris.util.scheduling.ChronoLatch; -import com.volmit.iris.util.scheduling.J; -import com.volmit.iris.util.scheduling.Looper; +import com.volmit.iris.util.scheduling.*; import com.volmit.iris.util.scheduling.jobs.QueueJob; import io.papermc.lib.PaperLib; import lombok.Data; @@ -81,6 +82,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager { private int actuallySpawned = 0; private int cooldown = 0; private List precount = new KList<>(); + private KSet injectBiomes = new KSet<>(); public IrisWorldManager() { super(null); @@ -463,6 +465,10 @@ public class IrisWorldManager extends EngineAssignedWorldManager { getEngine().getMantle().save(); } + public void requestBiomeInject(Position2 p) { + injectBiomes.add(p); + } + @Override public void onChunkLoad(Chunk e, boolean generated) { if(getEngine().isClosed()) { @@ -472,6 +478,14 @@ public class IrisWorldManager extends EngineAssignedWorldManager { energy += 0.3; fixEnergy(); getEngine().cleanupMantleChunk(e.getX(), e.getZ()); + + if(generated && !injectBiomes.isEmpty()) { + Position2 p = new Position2(e.getX(), e.getZ()); + + if(injectBiomes.remove(p)) { + INMS.get().injectBiomesFromMantle(e, getMantle()); + } + } } private void spawn(IrisPosition block, IrisSpawner spawner, boolean initial) { diff --git a/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java b/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java index 71d0ffb43..c3946d3a5 100644 --- a/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java +++ b/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java @@ -31,6 +31,8 @@ import com.volmit.iris.util.hunk.Hunk; import com.volmit.iris.util.hunk.view.BiomeGridHunkHolder; import com.volmit.iris.util.hunk.view.BiomeGridHunkView; import com.volmit.iris.util.math.RNG; +import com.volmit.iris.util.matter.MatterBiomeInject; +import com.volmit.iris.util.matter.slices.BiomeInjectMatter; import com.volmit.iris.util.parallel.BurstExecutor; import com.volmit.iris.util.scheduling.ChronoLatch; import com.volmit.iris.util.scheduling.PrecisionStopwatch; @@ -47,33 +49,6 @@ public class IrisBiomeActuator extends EngineAssignedActuator { rng = new RNG(engine.getSeedManager().getBiome()); } - @BlockCoordinates - private boolean injectBiome(Hunk h, int x, int y, int z, Object bb) { - try { - if(h instanceof BiomeGridHunkView hh) { - ChunkGenerator.BiomeGrid g = hh.getChunk(); - if(g instanceof TerrainChunk) { - ((TerrainChunk) g).getBiomeBaseInjector().setBiome(x, y, z, bb); - } else { - hh.forceBiomeBaseInto(x, y, z, bb); - } - return true; - } else if(h instanceof BiomeGridHunkHolder hh) { - ChunkGenerator.BiomeGrid g = hh.getChunk(); - if(g instanceof TerrainChunk) { - ((TerrainChunk) g).getBiomeBaseInjector().setBiome(x, y, z, bb); - } else { - hh.forceBiomeBaseInto(x, y, z, bb); - } - return true; - } - } catch(Throwable e) { - e.printStackTrace(); - } - - return false; - } - @BlockCoordinates @Override public void onActuate(int x, int z, Hunk h, boolean multicore, ChunkContext context) { @@ -84,35 +59,19 @@ public class IrisBiomeActuator extends EngineAssignedActuator { for(int zf = 0; zf < h.getDepth(); zf++) { ib = context.getBiome().get(xf, zf); int maxHeight = (int) (getComplex().getFluidHeight() + ib.getMaxWithObjectHeight(getData())); + MatterBiomeInject matter = null; + if(ib.isCustom()) { - try { - IrisBiomeCustom custom = ib.getCustomBiome(rng, x, 0, z); - Object biomeBase = INMS.get().getCustomBiomeBaseHolderFor(getDimension().getLoadKey() + ":" + custom.getId()); - - if(biomeBase == null || !injectBiome(h, x, 0, z, biomeBase)) { - throw new RuntimeException("Cant inject biome!"); - } - - for(int i = 0; i < maxHeight; i++) { - injectBiome(h, xf, i, zf, biomeBase); - } - } catch(Throwable e) { - Iris.reportError(e); - Biome v = ib.getSkyBiome(rng, x, 0, z); - for(int i = 0; i < maxHeight; i++) { - h.set(xf, i, zf, v); - } - } + IrisBiomeCustom custom = ib.getCustomBiome(rng, x, 0, z); + Object biomeBase = INMS.get().getCustomBiomeBaseHolderFor(getDimension().getLoadKey() + ":" + custom.getId()); + matter = BiomeInjectMatter.get(INMS.get().getTrueBiomeBaseId(biomeBase)); } else { Biome v = ib.getSkyBiome(rng, x, 0, z); + matter = BiomeInjectMatter.get(v); + } - if(v != null) { - for(int i = 0; i < maxHeight; i++) { - h.set(xf, i, zf, v); - } - } else if(cl.flip()) { - Iris.error("No biome provided for " + ib.getLoadKey()); - } + for(int i = 0; i < maxHeight; i++) { + getEngine().getMantle().getMantle().set(x, i, z, matter); } } } diff --git a/src/main/java/com/volmit/iris/util/matter/MatterBiomeInject.java b/src/main/java/com/volmit/iris/util/matter/MatterBiomeInject.java new file mode 100644 index 000000000..038dad4ba --- /dev/null +++ b/src/main/java/com/volmit/iris/util/matter/MatterBiomeInject.java @@ -0,0 +1,31 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2022 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.util.matter; + +import lombok.AllArgsConstructor; +import lombok.Data; +import org.bukkit.block.Biome; + +@Data +@AllArgsConstructor +public class MatterBiomeInject { + private final boolean custom; + private final Integer biomeId; + private final Biome biome; +} diff --git a/src/main/java/com/volmit/iris/util/matter/slices/BiomeInjectMatter.java b/src/main/java/com/volmit/iris/util/matter/slices/BiomeInjectMatter.java new file mode 100644 index 000000000..2db4194b3 --- /dev/null +++ b/src/main/java/com/volmit/iris/util/matter/slices/BiomeInjectMatter.java @@ -0,0 +1,80 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2022 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.util.matter.slices; + +import com.volmit.iris.util.data.palette.Palette; +import com.volmit.iris.util.matter.MatterBiomeInject; +import com.volmit.iris.util.matter.MatterCavern; +import com.volmit.iris.util.matter.Sliced; +import org.bukkit.block.Biome; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +@Sliced +public class BiomeInjectMatter extends RawMatter { + public BiomeInjectMatter() { + this(1, 1, 1); + } + + @Override + public Palette getGlobalPalette() { + return null; + } + + public BiomeInjectMatter(int width, int height, int depth) { + super(width, height, depth, MatterBiomeInject.class); + } + + public static MatterBiomeInject get(Biome biome) + { + return get(false, 0, biome); + } + + public static MatterBiomeInject get(int customBiome) { + return get(true, customBiome, null); + } + + public static MatterBiomeInject get(boolean custom, int customBiome, Biome biome) { + return new MatterBiomeInject(custom, customBiome, biome); + } + + @Override + public void writeNode(MatterBiomeInject b, DataOutputStream dos) throws IOException { + dos.writeBoolean(b.isCustom()); + + if(b.isCustom()) { + dos.writeShort(b.getBiomeId()); + } + + else { + dos.writeByte(b.getBiome().ordinal()); + } + } + + @Override + public MatterBiomeInject readNode(DataInputStream din) throws IOException { + boolean b = din.readBoolean(); + int id = b ? din.readShort() : 0; + Biome biome = !b ? Biome.values()[din.readByte()] : Biome.PLAINS; + + return new MatterBiomeInject(b, id, biome); + } +} From 60843b3bb9dd60ad763df676c4685814a9e2ff62 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Wed, 14 Sep 2022 13:30:39 -0400 Subject: [PATCH 06/20] f --- .../com/volmit/iris/core/nms/INMSBinding.java | 2 + .../iris/core/nms/v19_2/NMSBinding19_2.java | 13 +++-- .../iris/core/nms/v1X/NMSBinding1X.java | 5 ++ .../volmit/iris/engine/IrisWorldManager.java | 8 +--- .../engine/actuator/IrisBiomeActuator.java | 48 ++++++++++++------- 5 files changed, 49 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/nms/INMSBinding.java b/src/main/java/com/volmit/iris/core/nms/INMSBinding.java index 5cb491a2e..2420cc6eb 100644 --- a/src/main/java/com/volmit/iris/core/nms/INMSBinding.java +++ b/src/main/java/com/volmit/iris/core/nms/INMSBinding.java @@ -58,6 +58,8 @@ public interface INMSBinding { Object getCustomBiomeBaseFor(String mckey); Object getCustomBiomeBaseHolderFor(String mckey); + int getBiomeBaseIdForKey(String key); + String getKeyForBiomeBase(Object biomeBase); Object getBiomeBase(World world, Biome biome); diff --git a/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java b/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java index 9dab95d52..2243292e8 100644 --- a/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java +++ b/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java @@ -22,7 +22,6 @@ package com.volmit.iris.core.nms.v19_2; import com.volmit.iris.Iris; import com.volmit.iris.core.nms.INMSBinding; import com.volmit.iris.engine.data.cache.AtomicCache; -import com.volmit.iris.engine.object.IrisBiome; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.hunk.Hunk; import com.volmit.iris.util.mantle.Mantle; @@ -196,7 +195,7 @@ public class NMSBinding19_2 implements INMSBinding { @Override public int getTrueBiomeBaseId(Object biomeBase) { - return getCustomBiomeRegistry().getId((net.minecraft.world.level.biome.Biome) biomeBase); + return getCustomBiomeRegistry().getId(((Holder) biomeBase).value()); } @Override @@ -218,6 +217,10 @@ public class NMSBinding19_2 implements INMSBinding { return getCustomBiomeRegistry().getHolder(getTrueBiomeBaseId(getCustomBiomeRegistry().get(new ResourceLocation(mckey)))).get(); } + public int getBiomeBaseIdForKey(String key) { + return getCustomBiomeRegistry().getId(getCustomBiomeRegistry().get(new ResourceLocation(key))); + } + @Override public String getKeyForBiomeBase(Object biomeBase) { return getCustomBiomeRegistry().getKey((net.minecraft.world.level.biome.Biome) biomeBase).getPath(); // something, not something:something @@ -404,19 +407,23 @@ public class NMSBinding19_2 implements INMSBinding { @Override public void injectBiomesFromMantle(Chunk e, Mantle mantle) { LevelChunk chunk = ((CraftChunk)e).getHandle(); + AtomicInteger c = new AtomicInteger(); + AtomicInteger r = new AtomicInteger(); mantle.iterateChunk(e.getX(), e.getZ(), MatterBiomeInject.class, (x,y,z,b) -> { if(b != null) { if(b.isCustom()) { chunk.setBiome(x, y, z, (Holder) getBiomeBaseFromId(b.getBiomeId())); + c.getAndIncrement(); } else { chunk.setBiome(x, y, z, (Holder) getBiomeBase(e.getWorld(), b.getBiome())); + r.getAndIncrement(); } } }); - chunk.setUnsaved(true); + Iris.info("Injected " + c.get() + " custom biomes and " + r.get() + " vanilla biomes into chunk " + e.getX() + "," + e.getZ()); } private static Object getFor(Class type, Object source) { diff --git a/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java b/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java index 59cf364fc..15bf05294 100644 --- a/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java +++ b/src/main/java/com/volmit/iris/core/nms/v1X/NMSBinding1X.java @@ -124,6 +124,11 @@ public class NMSBinding1X implements INMSBinding { return null; } + @Override + public int getBiomeBaseIdForKey(String key) { + return 0; + } + @Override public String getKeyForBiomeBase(Object biomeBase) { return null; diff --git a/src/main/java/com/volmit/iris/engine/IrisWorldManager.java b/src/main/java/com/volmit/iris/engine/IrisWorldManager.java index c03b3c51a..3792052bd 100644 --- a/src/main/java/com/volmit/iris/engine/IrisWorldManager.java +++ b/src/main/java/com/volmit/iris/engine/IrisWorldManager.java @@ -479,12 +479,8 @@ public class IrisWorldManager extends EngineAssignedWorldManager { fixEnergy(); getEngine().cleanupMantleChunk(e.getX(), e.getZ()); - if(generated && !injectBiomes.isEmpty()) { - Position2 p = new Position2(e.getX(), e.getZ()); - - if(injectBiomes.remove(p)) { - INMS.get().injectBiomesFromMantle(e, getMantle()); - } + if(generated) { + INMS.get().injectBiomesFromMantle(e, getMantle()); } } diff --git a/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java b/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java index c3946d3a5..c2f54ac56 100644 --- a/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java +++ b/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java @@ -52,30 +52,42 @@ public class IrisBiomeActuator extends EngineAssignedActuator { @BlockCoordinates @Override public void onActuate(int x, int z, Hunk h, boolean multicore, ChunkContext context) { - PrecisionStopwatch p = PrecisionStopwatch.start(); + try + { + PrecisionStopwatch p = PrecisionStopwatch.start(); - for(int xf = 0; xf < h.getWidth(); xf++) { - IrisBiome ib; - for(int zf = 0; zf < h.getDepth(); zf++) { - ib = context.getBiome().get(xf, zf); - int maxHeight = (int) (getComplex().getFluidHeight() + ib.getMaxWithObjectHeight(getData())); - MatterBiomeInject matter = null; + int m = 0; + for(int xf = 0; xf < h.getWidth(); xf++) { + IrisBiome ib; + for(int zf = 0; zf < h.getDepth(); zf++) { + ib = context.getBiome().get(xf, zf); + int maxHeight = (int) (getComplex().getFluidHeight() + ib.getMaxWithObjectHeight(getData())); + MatterBiomeInject matter = null; - if(ib.isCustom()) { - IrisBiomeCustom custom = ib.getCustomBiome(rng, x, 0, z); - Object biomeBase = INMS.get().getCustomBiomeBaseHolderFor(getDimension().getLoadKey() + ":" + custom.getId()); - matter = BiomeInjectMatter.get(INMS.get().getTrueBiomeBaseId(biomeBase)); - } else { - Biome v = ib.getSkyBiome(rng, x, 0, z); - matter = BiomeInjectMatter.get(v); - } + if(ib.isCustom()) { + IrisBiomeCustom custom = ib.getCustomBiome(rng, x, 0, z); + matter = BiomeInjectMatter.get(INMS.get().getBiomeBaseIdForKey(getDimension().getLoadKey() + ":" + custom.getId())); + } else { + Biome v = ib.getSkyBiome(rng, x, 0, z); + matter = BiomeInjectMatter.get(v); + } + + for(int i = 0; i < maxHeight; i++) { + getEngine().getMantle().getMantle().set(x, i, z, matter); + m++; + } - for(int i = 0; i < maxHeight; i++) { - getEngine().getMantle().getMantle().set(x, i, z, matter); } } + + getEngine().getMetrics().getBiome().put(p.getMilliseconds()); + Iris.info("Biome Actuator: " + p.getMilliseconds() + "ms"); + Iris.info("Mantle: " + m + " blocks"); } - getEngine().getMetrics().getBiome().put(p.getMilliseconds()); + catch(Throwable e) + { + e.printStackTrace(); + } } } From 148261f8768ceeb0ff15c7047c4ab6dd466d97c1 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Thu, 15 Sep 2022 02:32:29 -0400 Subject: [PATCH 07/20] Dirrrrrrrrrrrrty --- .../core/nms/v19_2/CustomBiomeSource.java | 150 ++++++++++++++++++ .../iris/core/nms/v19_2/NMSBinding19_2.java | 25 +-- .../volmit/iris/engine/IrisWorldManager.java | 2 +- .../engine/actuator/IrisBiomeActuator.java | 25 +-- .../iris/engine/mode/ModeOverworld.java | 1 - .../engine/platform/BukkitChunkGenerator.java | 55 ++++++- 6 files changed, 212 insertions(+), 46 deletions(-) create mode 100644 src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java diff --git a/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java b/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java new file mode 100644 index 000000000..0c295e79b --- /dev/null +++ b/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java @@ -0,0 +1,150 @@ +package com.volmit.iris.core.nms.v19_2; + +import com.mojang.serialization.Codec; +import com.volmit.iris.Iris; +import com.volmit.iris.engine.data.cache.AtomicCache; +import com.volmit.iris.engine.framework.Engine; +import com.volmit.iris.engine.object.IrisBiome; +import com.volmit.iris.engine.object.IrisBiomeCustom; +import com.volmit.iris.util.collection.KMap; +import com.volmit.iris.util.math.RNG; +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.biome.Climate; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_19_R1.CraftServer; +import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_19_R1.block.CraftBlock; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +public class CustomBiomeSource extends BiomeSource { + private final long seed; + private final Engine engine; + private final Registry biomeCustomRegistry; + private final Registry biomeRegistry; + private final AtomicCache registryAccess = new AtomicCache<>(); + private final RNG rng; + private final KMap> customBiomes; + + public CustomBiomeSource(long seed, Engine engine, World world) { + super(getAllBiomes( + ((RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())) + .registry(Registry.BIOME_REGISTRY).orElse(null), + ((CraftWorld) world).getHandle().registryAccess().registry(Registry.BIOME_REGISTRY).orElse(null), + engine)); + this.engine = engine; + this.seed = seed; + this.biomeCustomRegistry = registry().registry(Registry.BIOME_REGISTRY).orElse(null); + this.biomeRegistry = ((CraftWorld) world).getHandle().registryAccess().registry(Registry.BIOME_REGISTRY).orElse(null); + this.rng = new RNG(engine.getSeedManager().getBiome()); + this.customBiomes = fillCustomBiomes(biomeCustomRegistry, engine); + } + + private KMap> fillCustomBiomes(Registry customRegistry, Engine engine) { + KMap> m = new KMap<>(); + + for(IrisBiome i : engine.getAllBiomes()) { + if(i.isCustom()) { + for(IrisBiomeCustom j : i.getCustomDerivitives()) { + m.put(j.getId(), customRegistry.getHolder(customRegistry.getResourceKey(customRegistry + .get(new ResourceLocation(engine.getDimension().getLoadKey() + ":" + j.getId()))).get()).get()); + } + } + } + + return m; + } + + private static List> getAllBiomes(Registry customRegistry, Registry registry, Engine engine) { + List> b = new ArrayList<>(); + + for(IrisBiome i : engine.getAllBiomes()) { + if(i.isCustom()) { + for(IrisBiomeCustom j : i.getCustomDerivitives()) { + b.add(customRegistry.getHolder(customRegistry.getResourceKey(customRegistry + .get(new ResourceLocation(engine.getDimension().getLoadKey() + ":" + j.getId()))).get()).get()); + } + } else { + b.add(CraftBlock.biomeToBiomeBase(registry, i.getVanillaDerivative())); + } + } + + return b; + } + + private RegistryAccess registry() { + return registryAccess.aquire(() -> (RegistryAccess) getFor(RegistryAccess.Frozen.class, ((CraftServer) Bukkit.getServer()).getHandle().getServer())); + } + + private static Object getFor(Class type, Object source) { + Object o = fieldFor(type, source); + + if(o != null) { + return o; + } + + return invokeFor(type, source); + } + + private static Object fieldFor(Class returns, Object in) { + return fieldForClass(returns, in.getClass(), in); + } + + + private static Object invokeFor(Class returns, Object in) { + for(Method i : in.getClass().getMethods()) { + if(i.getReturnType().equals(returns)) { + i.setAccessible(true); + try { + Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); + return i.invoke(in); + } catch(Throwable e) { + e.printStackTrace(); + } + } + } + + return null; + } + + @SuppressWarnings("unchecked") + private static T fieldForClass(Class returnType, Class sourceType, Object in) { + for(Field i : sourceType.getDeclaredFields()) { + if(i.getType().equals(returnType)) { + i.setAccessible(true); + try { + Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); + return (T) i.get(in); + } catch(IllegalAccessException e) { + e.printStackTrace(); + } + } + } + return null; + } + + @Override + protected Codec codec() { + throw new UnsupportedOperationException("Not supported"); + } + + @Override + public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { + IrisBiome ib = engine.getComplex().getTrueBiomeStream().get(x, z); + if(ib.isCustom()) { + return customBiomes.get(ib.getCustomBiome(rng, x, 0, z).getId()); + } else { + org.bukkit.block.Biome v = ib.getSkyBiome(rng, x, 0, z); + return CraftBlock.biomeToBiomeBase(biomeRegistry, v); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java b/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java index 2243292e8..3d46e42eb 100644 --- a/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java +++ b/src/main/java/com/volmit/iris/core/nms/v19_2/NMSBinding19_2.java @@ -164,23 +164,7 @@ public class NMSBinding19_2 implements INMSBinding { @Override public Object getBiomeBaseFromId(int id) { - try { - return byIdRef.aquire(() -> { - for(Method i : IdMap.class.getDeclaredMethods()) { - if(i.getParameterCount() == 1 && i.getParameterTypes()[0].equals(int.class)) { - Iris.info("[NMS] Found byId method in " + IdMap.class.getSimpleName() + "." + i.getName() + "(int) => " + Biome.class.getSimpleName()); - return i; - } - } - - Iris.error("Cannot find byId method!"); - return null; - }).invoke(getCustomBiomeRegistry(), id); - } catch(IllegalAccessException | InvocationTargetException e) { - e.printStackTrace(); - } - - return null; + return getCustomBiomeRegistry().getHolder(id); } @Override @@ -228,7 +212,8 @@ public class NMSBinding19_2 implements INMSBinding { @Override public Object getBiomeBase(World world, Biome biome) { - return getBiomeBase(((CraftWorld) world).getHandle().registryAccess().registry(Registry.BIOME_REGISTRY).orElse(null), biome); + return org.bukkit.craftbukkit.v1_19_R1.block.CraftBlock.biomeToBiomeBase(((CraftWorld) world).getHandle() + .registryAccess().registry(Registry.BIOME_REGISTRY).orElse(null), biome); } @Override @@ -412,7 +397,7 @@ public class NMSBinding19_2 implements INMSBinding { mantle.iterateChunk(e.getX(), e.getZ(), MatterBiomeInject.class, (x,y,z,b) -> { if(b != null) { if(b.isCustom()) { - chunk.setBiome(x, y, z, (Holder) getBiomeBaseFromId(b.getBiomeId())); + chunk.setBiome(x, y, z, getCustomBiomeRegistry().getHolder(b.getBiomeId()).get()); c.getAndIncrement(); } @@ -422,8 +407,6 @@ public class NMSBinding19_2 implements INMSBinding { } } }); - - Iris.info("Injected " + c.get() + " custom biomes and " + r.get() + " vanilla biomes into chunk " + e.getX() + "," + e.getZ()); } private static Object getFor(Class type, Object source) { diff --git a/src/main/java/com/volmit/iris/engine/IrisWorldManager.java b/src/main/java/com/volmit/iris/engine/IrisWorldManager.java index 3792052bd..3f39742e0 100644 --- a/src/main/java/com/volmit/iris/engine/IrisWorldManager.java +++ b/src/main/java/com/volmit/iris/engine/IrisWorldManager.java @@ -480,7 +480,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager { getEngine().cleanupMantleChunk(e.getX(), e.getZ()); if(generated) { - INMS.get().injectBiomesFromMantle(e, getMantle()); + //INMS.get().injectBiomesFromMantle(e, getMantle()); } } diff --git a/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java b/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java index c2f54ac56..7530f61c2 100644 --- a/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java +++ b/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java @@ -18,9 +18,7 @@ package com.volmit.iris.engine.actuator; -import com.volmit.iris.Iris; import com.volmit.iris.core.nms.INMS; -import com.volmit.iris.engine.data.chunk.TerrainChunk; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.EngineAssignedActuator; import com.volmit.iris.engine.object.IrisBiome; @@ -28,17 +26,12 @@ import com.volmit.iris.engine.object.IrisBiomeCustom; import com.volmit.iris.util.context.ChunkContext; import com.volmit.iris.util.documentation.BlockCoordinates; import com.volmit.iris.util.hunk.Hunk; -import com.volmit.iris.util.hunk.view.BiomeGridHunkHolder; -import com.volmit.iris.util.hunk.view.BiomeGridHunkView; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.matter.MatterBiomeInject; import com.volmit.iris.util.matter.slices.BiomeInjectMatter; -import com.volmit.iris.util.parallel.BurstExecutor; import com.volmit.iris.util.scheduling.ChronoLatch; import com.volmit.iris.util.scheduling.PrecisionStopwatch; -import io.papermc.lib.PaperLib; import org.bukkit.block.Biome; -import org.bukkit.generator.ChunkGenerator; public class IrisBiomeActuator extends EngineAssignedActuator { private final RNG rng; @@ -52,8 +45,7 @@ public class IrisBiomeActuator extends EngineAssignedActuator { @BlockCoordinates @Override public void onActuate(int x, int z, Hunk h, boolean multicore, ChunkContext context) { - try - { + try { PrecisionStopwatch p = PrecisionStopwatch.start(); int m = 0; @@ -61,7 +53,6 @@ public class IrisBiomeActuator extends EngineAssignedActuator { IrisBiome ib; for(int zf = 0; zf < h.getDepth(); zf++) { ib = context.getBiome().get(xf, zf); - int maxHeight = (int) (getComplex().getFluidHeight() + ib.getMaxWithObjectHeight(getData())); MatterBiomeInject matter = null; if(ib.isCustom()) { @@ -72,21 +63,13 @@ public class IrisBiomeActuator extends EngineAssignedActuator { matter = BiomeInjectMatter.get(v); } - for(int i = 0; i < maxHeight; i++) { - getEngine().getMantle().getMantle().set(x, i, z, matter); - m++; - } - + getEngine().getMantle().getMantle().set(x + xf, 0, z + zf, matter); + m++; } } getEngine().getMetrics().getBiome().put(p.getMilliseconds()); - Iris.info("Biome Actuator: " + p.getMilliseconds() + "ms"); - Iris.info("Mantle: " + m + " blocks"); - } - - catch(Throwable e) - { + } catch(Throwable e) { e.printStackTrace(); } } 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 bd19cf06a..ab4b0bbb4 100644 --- a/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java +++ b/src/main/java/com/volmit/iris/engine/mode/ModeOverworld.java @@ -52,7 +52,6 @@ public class ModeOverworld extends IrisEngineMode implements EngineMode { EngineStage sPerfection = (x, z, k, p, m, c) -> perfection.modify(x, z, k, m, c); registerStage(burst( - sBiome, sGenMatter, sTerrain )); 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 33a800179..7684de59a 100644 --- a/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java +++ b/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java @@ -20,6 +20,7 @@ package com.volmit.iris.engine.platform; import com.volmit.iris.Iris; import com.volmit.iris.core.loader.IrisData; +import com.volmit.iris.core.nms.v19_2.CustomBiomeSource; import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.engine.IrisEngine; import com.volmit.iris.engine.data.chunk.TerrainChunk; @@ -44,6 +45,10 @@ import com.volmit.iris.util.stream.utility.ProfiledStream; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Setter; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.WorldGenLevel; +import org.apache.commons.lang3.reflect.FieldUtils; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.HeightMap; @@ -51,16 +56,26 @@ import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; +import org.bukkit.craftbukkit.v1_19_R1.CraftServer; +import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_19_R1.generator.CustomChunkGenerator; +import org.bukkit.craftbukkit.v1_19_R1.generator.InternalChunkGenerator; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.world.WorldInitEvent; import org.bukkit.generator.BiomeProvider; import org.bukkit.generator.BlockPopulator; import org.bukkit.generator.ChunkGenerator; import org.bukkit.generator.WorldInfo; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import sun.misc.Unsafe; import java.io.File; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import java.util.List; import java.util.Random; import java.util.concurrent.Semaphore; @@ -71,7 +86,7 @@ import java.util.function.Consumer; @EqualsAndHashCode(callSuper = true) @Data -public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChunkGenerator { +public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChunkGenerator, Listener { private static final int LOAD_LOCKS = Runtime.getRuntime().availableProcessors() * 4; private final Semaphore loadLock; private final IrisWorld world; @@ -102,6 +117,43 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun this.dataLocation = dataLocation; this.dimensionKey = dimensionKey; this.folder = new ReactiveFolder(dataLocation, (_a, _b, _c) -> hotload()); + Bukkit.getServer().getPluginManager().registerEvents(this, Iris.instance); + } + + @EventHandler + public void onWorldInit(WorldInitEvent event) { + try { + ServerLevel serverLevel = ((CraftWorld)event.getWorld()).getHandle(); + Engine engine = getEngine(event.getWorld()); + Class clazz = serverLevel.getChunkSource().chunkMap.generator.getClass(); + Field biomeSource = getField(clazz, "c"); + biomeSource.setAccessible(true); + Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe"); + unsafeField.setAccessible(true); + Unsafe unsafe = (Unsafe) unsafeField.get(null); + CustomBiomeSource customBiomeSource = new CustomBiomeSource(event.getWorld().getSeed(), engine, event.getWorld()); + unsafe.putObject(biomeSource.get(serverLevel.getChunkSource().chunkMap.generator), unsafe.objectFieldOffset(biomeSource), customBiomeSource); + biomeSource.set(serverLevel.getChunkSource().chunkMap.generator, customBiomeSource); + Iris.info("Injected Iris Biome Source into " + event.getWorld().getName()); + } + + catch(Throwable e) { + e.printStackTrace(); + } + } + + private static Field getField(Class clazz, String fieldName) + throws NoSuchFieldException { + try { + return clazz.getDeclaredField(fieldName); + } catch (NoSuchFieldException e) { + Class superClass = clazz.getSuperclass(); + if (superClass == null) { + throw e; + } else { + return getField(superClass, fieldName); + } + } } private void setupEngine() { @@ -236,7 +288,6 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun lock.unlock(); - return engine; } From 2f5198d533a8bdcb49e11ab1c594b178e2467199 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Thu, 15 Sep 2022 02:35:34 -0400 Subject: [PATCH 08/20] Safe --- .../com/volmit/iris/engine/platform/BukkitChunkGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 7684de59a..026c4f46c 100644 --- a/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java +++ b/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java @@ -199,7 +199,7 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun Hunk blocks = Hunk.view(tc); Hunk biomes = Hunk.view(tc, tc.getMinHeight(), tc.getMaxHeight()); this.world.bind(world); - getEngine().generate(x << 4, z << 4, blocks, biomes, true); + getEngine().generate(x << 4, z << 4, blocks, biomes, false); Iris.debug("Regenerated " + x + " " + z); int t = 0; for(int i = getEngine().getHeight() >> 4; i >= 0; i--) { From 00f4d8b1eed93ee503c93dea265ec22aa39ca691 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Fri, 16 Sep 2022 03:16:04 -0400 Subject: [PATCH 09/20] Hmm? --- .../com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java b/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java index 0c295e79b..682a1c15c 100644 --- a/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java +++ b/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java @@ -12,6 +12,7 @@ import net.minecraft.core.Holder; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.biome.Climate; @@ -20,6 +21,9 @@ import org.bukkit.World; import org.bukkit.craftbukkit.v1_19_R1.CraftServer; import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; import org.bukkit.craftbukkit.v1_19_R1.block.CraftBlock; +import org.bukkit.craftbukkit.v1_19_R1.generator.CustomChunkGenerator; +import org.bukkit.craftbukkit.v1_19_R1.generator.InternalChunkGenerator; +import org.bukkit.generator.BiomeProvider; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -141,9 +145,9 @@ public class CustomBiomeSource extends BiomeSource { public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { IrisBiome ib = engine.getComplex().getTrueBiomeStream().get(x, z); if(ib.isCustom()) { - return customBiomes.get(ib.getCustomBiome(rng, x, 0, z).getId()); + return customBiomes.get(ib.getCustomBiome(rng, x>>2, 0, z>>2).getId()); } else { - org.bukkit.block.Biome v = ib.getSkyBiome(rng, x, 0, z); + org.bukkit.block.Biome v = ib.getSkyBiome(rng, x>>2, 0, z>>2); return CraftBlock.biomeToBiomeBase(biomeRegistry, v); } } From dda3f0b8e939d66ad5eb4d2c7dc8d37b76f74402 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Fri, 16 Sep 2022 03:16:57 -0400 Subject: [PATCH 10/20] Mhmmmmm --- .../com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java b/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java index 682a1c15c..9990c4886 100644 --- a/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java +++ b/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java @@ -145,9 +145,9 @@ public class CustomBiomeSource extends BiomeSource { public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { IrisBiome ib = engine.getComplex().getTrueBiomeStream().get(x, z); if(ib.isCustom()) { - return customBiomes.get(ib.getCustomBiome(rng, x>>2, 0, z>>2).getId()); + return customBiomes.get(ib.getCustomBiome(rng, x<<2, 0, z<<2).getId()); } else { - org.bukkit.block.Biome v = ib.getSkyBiome(rng, x>>2, 0, z>>2); + org.bukkit.block.Biome v = ib.getSkyBiome(rng, x<<2, 0, z<<2); return CraftBlock.biomeToBiomeBase(biomeRegistry, v); } } From 00d099383b280ca4f2ebcc69fcd6bdf3e50155e3 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Fri, 16 Sep 2022 03:22:56 -0400 Subject: [PATCH 11/20] Fix --- .../com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java b/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java index 9990c4886..bfb3f2ddc 100644 --- a/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java +++ b/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java @@ -143,11 +143,11 @@ public class CustomBiomeSource extends BiomeSource { @Override public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { - IrisBiome ib = engine.getComplex().getTrueBiomeStream().get(x, z); + IrisBiome ib = engine.getBiome(x << 2, y << 2, z << 2); if(ib.isCustom()) { - return customBiomes.get(ib.getCustomBiome(rng, x<<2, 0, z<<2).getId()); + return customBiomes.get(ib.getCustomBiome(rng, x << 2, 0, z << 2).getId()); } else { - org.bukkit.block.Biome v = ib.getSkyBiome(rng, x<<2, 0, z<<2); + org.bukkit.block.Biome v = ib.getSkyBiome(rng, x << 2, 0, z << 2); return CraftBlock.biomeToBiomeBase(biomeRegistry, v); } } From 243ef8c0be2e6d6fe194d2ea885bf9c38c9139de Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Fri, 16 Sep 2022 03:24:56 -0400 Subject: [PATCH 12/20] f --- .../engine/platform/BukkitChunkGenerator.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) 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 026c4f46c..0c5136f0c 100644 --- a/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java +++ b/src/main/java/com/volmit/iris/engine/platform/BukkitChunkGenerator.java @@ -123,18 +123,24 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun @EventHandler public void onWorldInit(WorldInitEvent event) { try { - ServerLevel serverLevel = ((CraftWorld)event.getWorld()).getHandle(); - Engine engine = getEngine(event.getWorld()); - Class clazz = serverLevel.getChunkSource().chunkMap.generator.getClass(); - Field biomeSource = getField(clazz, "c"); - biomeSource.setAccessible(true); - Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe"); - unsafeField.setAccessible(true); - Unsafe unsafe = (Unsafe) unsafeField.get(null); - CustomBiomeSource customBiomeSource = new CustomBiomeSource(event.getWorld().getSeed(), engine, event.getWorld()); - unsafe.putObject(biomeSource.get(serverLevel.getChunkSource().chunkMap.generator), unsafe.objectFieldOffset(biomeSource), customBiomeSource); - biomeSource.set(serverLevel.getChunkSource().chunkMap.generator, customBiomeSource); - Iris.info("Injected Iris Biome Source into " + event.getWorld().getName()); + if(world.name().equals(event.getWorld().getName()) && world.getRawWorldSeed() == event.getWorld().getSeed()) { + ServerLevel serverLevel = ((CraftWorld)event.getWorld()).getHandle(); + Engine engine = getEngine(event.getWorld()); + Class clazz = serverLevel.getChunkSource().chunkMap.generator.getClass(); + Field biomeSource = getField(clazz, "c"); + biomeSource.setAccessible(true); + Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe"); + unsafeField.setAccessible(true); + Unsafe unsafe = (Unsafe) unsafeField.get(null); + CustomBiomeSource customBiomeSource = new CustomBiomeSource(event.getWorld().getSeed(), engine, event.getWorld()); + unsafe.putObject(biomeSource.get(serverLevel.getChunkSource().chunkMap.generator), unsafe.objectFieldOffset(biomeSource), customBiomeSource); + biomeSource.set(serverLevel.getChunkSource().chunkMap.generator, customBiomeSource); + Iris.info("Injected Iris Biome Source into " + event.getWorld().getName()); + } + + else { + Iris.info("World " + event.getWorld().getName() + " is not an Iris world in this context"); + } } catch(Throwable e) { From a37ccddd38a397e66ee972d8affe8bbbce92f1dc Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Fri, 16 Sep 2022 03:26:23 -0400 Subject: [PATCH 13/20] f --- .../java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java b/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java index bfb3f2ddc..5bc9b063f 100644 --- a/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java +++ b/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java @@ -143,7 +143,7 @@ public class CustomBiomeSource extends BiomeSource { @Override public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { - IrisBiome ib = engine.getBiome(x << 2, y << 2, z << 2); + IrisBiome ib = engine.getBiome(x << 2, (y - engine.getMinHeight()) << 2, z << 2); if(ib.isCustom()) { return customBiomes.get(ib.getCustomBiome(rng, x << 2, 0, z << 2).getId()); } else { From f4ea1343b489c79aec14fc80680b01780f1eedb9 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Fri, 16 Sep 2022 03:27:32 -0400 Subject: [PATCH 14/20] m --- .../com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java b/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java index 5bc9b063f..cb1b67c35 100644 --- a/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java +++ b/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java @@ -143,11 +143,12 @@ public class CustomBiomeSource extends BiomeSource { @Override public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { - IrisBiome ib = engine.getBiome(x << 2, (y - engine.getMinHeight()) << 2, z << 2); + int m = (y - engine.getMinHeight()) << 2; + IrisBiome ib = engine.getBiome(x << 2, m, z << 2); if(ib.isCustom()) { - return customBiomes.get(ib.getCustomBiome(rng, x << 2, 0, z << 2).getId()); + return customBiomes.get(ib.getCustomBiome(rng, x << 2, m, z << 2).getId()); } else { - org.bukkit.block.Biome v = ib.getSkyBiome(rng, x << 2, 0, z << 2); + org.bukkit.block.Biome v = ib.getSkyBiome(rng, x << 2, m, z << 2); return CraftBlock.biomeToBiomeBase(biomeRegistry, v); } } From bdf181e34821e6a795e0d034410a200e1a3a77e6 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Fri, 16 Sep 2022 03:28:47 -0400 Subject: [PATCH 15/20] ff --- .../java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java b/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java index cb1b67c35..dcd4c999f 100644 --- a/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java +++ b/src/main/java/com/volmit/iris/core/nms/v19_2/CustomBiomeSource.java @@ -144,7 +144,7 @@ public class CustomBiomeSource extends BiomeSource { @Override public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { int m = (y - engine.getMinHeight()) << 2; - IrisBiome ib = engine.getBiome(x << 2, m, z << 2); + IrisBiome ib = engine.getComplex().getTrueBiomeStream().get(x << 2, z << 2); if(ib.isCustom()) { return customBiomes.get(ib.getCustomBiome(rng, x << 2, m, z << 2).getId()); } else { From c4a516a858b2617518d00275079f4ecbb43008ea Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Fri, 16 Sep 2022 03:37:36 -0400 Subject: [PATCH 16/20] f --- .../com/volmit/iris/core/pregenerator/IrisPregenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 00f7fd6a0..50ce8af2d 100644 --- a/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java +++ b/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java @@ -61,7 +61,7 @@ public class IrisPregenerator { public IrisPregenerator(PregenTask task, PregeneratorMethod generator, PregenListener listener) { this.listener = listenify(listener); cl = new ChronoLatch(5000); - limiter = new Semaphore(Runtime.getRuntime().availableProcessors()); + limiter = new Semaphore(Runtime.getRuntime().availableProcessors() * 4); generatedRegions = new KSet<>(); this.shutdown = new AtomicBoolean(false); this.paused = new AtomicBoolean(false); From 7e217b5fbac36ea6507907155fad7e8579389d97 Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Fri, 16 Sep 2022 03:40:31 -0400 Subject: [PATCH 17/20] More permits --- .../com/volmit/iris/core/pregenerator/IrisPregenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 50ce8af2d..fb0e45e0f 100644 --- a/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java +++ b/src/main/java/com/volmit/iris/core/pregenerator/IrisPregenerator.java @@ -61,7 +61,7 @@ public class IrisPregenerator { public IrisPregenerator(PregenTask task, PregeneratorMethod generator, PregenListener listener) { this.listener = listenify(listener); cl = new ChronoLatch(5000); - limiter = new Semaphore(Runtime.getRuntime().availableProcessors() * 4); + limiter = new Semaphore(1024); generatedRegions = new KSet<>(); this.shutdown = new AtomicBoolean(false); this.paused = new AtomicBoolean(false); From 380f191f6a670226eb68cf5e3abba5ebd7fd1c12 Mon Sep 17 00:00:00 2001 From: Brian Fopiano Date: Fri, 16 Sep 2022 00:48:27 -0700 Subject: [PATCH 18/20] V+ --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index cfced68df..d1c56c2c6 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ plugins { id "de.undercouch.download" version "5.0.1" } -version '2.2.19-1.19.2' // Needs to be version specific +version '2.3.0-1.19.2' // Needs to be version specific def nmsVersion = "1.19.2" //[NMS] def apiVersion = '1.19' def specialSourceVersion = '1.11.0' //[NMS] From bd66fa3bf561fb5bb4aa4c8b13e99d1108d2359e Mon Sep 17 00:00:00 2001 From: Brian Fopiano Date: Fri, 16 Sep 2022 00:50:38 -0700 Subject: [PATCH 19/20] Tag Bump --- src/main/java/com/volmit/iris/Iris.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index 5ac77569f..1cb3d09a9 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -87,7 +87,7 @@ import java.util.Objects; @SuppressWarnings("CanBeFinal") public class Iris extends VolmitPlugin implements Listener { - public static final String OVERWORLD_TAG = "2086"; + public static final String OVERWORLD_TAG = "2087"; private static final Queue syncJobs = new ShurikenQueue<>(); From f9c98b0a602f54566ae89827aff4ae0523eeb47d Mon Sep 17 00:00:00 2001 From: Brian Fopiano Date: Fri, 16 Sep 2022 01:52:17 -0700 Subject: [PATCH 20/20] Needs to be Sync now --- src/main/java/com/volmit/iris/Iris.java | 16 ++++++++-------- .../com/volmit/iris/core/service/StudioSVC.java | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index 1cb3d09a9..28e5f1470 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -23,7 +23,9 @@ import com.google.gson.JsonParseException; import com.google.gson.JsonParser; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.ServerConfigurator; -import com.volmit.iris.core.link.*; +import com.volmit.iris.core.link.IrisPapiExpansion; +import com.volmit.iris.core.link.MultiverseCoreLink; +import com.volmit.iris.core.link.MythicMobsLink; import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.nms.INMS; import com.volmit.iris.core.pregenerator.LazyPregenerator; @@ -41,7 +43,10 @@ import com.volmit.iris.util.exceptions.IrisException; import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; import com.volmit.iris.util.function.NastyRunnable; -import com.volmit.iris.util.io.*; +import com.volmit.iris.util.io.FileWatcher; +import com.volmit.iris.util.io.IO; +import com.volmit.iris.util.io.InstanceState; +import com.volmit.iris.util.io.JarScanner; import com.volmit.iris.util.math.M; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.parallel.MultiBurst; @@ -56,11 +61,7 @@ import com.volmit.iris.util.scheduling.ShurikenQueue; import io.papermc.lib.PaperLib; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.serializer.ComponentSerializer; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.WorldCreator; +import org.bukkit.*; import org.bukkit.block.data.BlockData; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -82,7 +83,6 @@ import java.lang.annotation.Annotation; import java.net.URL; import java.util.Date; import java.util.Map; -import java.util.Objects; @SuppressWarnings("CanBeFinal") public class Iris extends VolmitPlugin implements Listener { diff --git a/src/main/java/com/volmit/iris/core/service/StudioSVC.java b/src/main/java/com/volmit/iris/core/service/StudioSVC.java index e97ca5440..39165fb09 100644 --- a/src/main/java/com/volmit/iris/core/service/StudioSVC.java +++ b/src/main/java/com/volmit/iris/core/service/StudioSVC.java @@ -57,7 +57,7 @@ public class StudioSVC implements IrisService { @Override public void onEnable() { - J.a(() -> { + J.s(() -> { String pack = IrisSettings.get().getGenerator().getDefaultWorldType(); File f = IrisPack.packsPack(pack);