diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisBiomeFixer.java b/core/src/main/java/com/volmit/iris/core/tools/IrisBiomeFixer.java index f6814d30f..059a22131 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisBiomeFixer.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisBiomeFixer.java @@ -154,7 +154,7 @@ public class IrisBiomeFixer { } // Set biomes to the chunk using NMS - INMS.get().setBiomes(cx, cz, engine.getWorld().realWorld(), biomes); + //INMS.get().setBiomes(cx, cz, engine.getWorld().realWorld(), biomes); generated.incrementAndGet(); } diff --git a/core/src/main/java/com/volmit/iris/engine/actuator/IrisTerrainNormalActuator.java b/core/src/main/java/com/volmit/iris/engine/actuator/IrisTerrainNormalActuator.java index 3af2addf4..d385a5f99 100644 --- a/core/src/main/java/com/volmit/iris/engine/actuator/IrisTerrainNormalActuator.java +++ b/core/src/main/java/com/volmit/iris/engine/actuator/IrisTerrainNormalActuator.java @@ -18,6 +18,8 @@ package com.volmit.iris.engine.actuator; +import com.volmit.iris.core.nms.IMemoryWorld; +import com.volmit.iris.core.nms.INMS; import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.EngineAssignedActuator; import com.volmit.iris.engine.object.IrisBiome; @@ -27,11 +29,13 @@ 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.math.RNG; +import com.volmit.iris.util.misc.E; import com.volmit.iris.util.scheduling.PrecisionStopwatch; import lombok.Getter; import org.bukkit.Chunk; import org.bukkit.Material; import org.bukkit.World; +import org.bukkit.WorldCreator; import org.bukkit.block.Block; import org.bukkit.block.data.BlockData; import org.bukkit.generator.ChunkGenerator; @@ -43,6 +47,7 @@ public class IrisTerrainNormalActuator extends EngineAssignedActuator private static final BlockData LAVA = Material.LAVA.createBlockData(); private static final BlockData GLASS = Material.GLASS.createBlockData(); private static final BlockData CAVE_AIR = Material.CAVE_AIR.createBlockData(); + private IMemoryWorld memoryWorld; @Getter private final RNG rng; @Getter @@ -51,12 +56,22 @@ public class IrisTerrainNormalActuator extends EngineAssignedActuator public IrisTerrainNormalActuator(Engine engine) { super(engine, "Terrain"); rng = new RNG(engine.getSeedManager().getTerrain()); + if (memoryWorld != null) { + try { + this.memoryWorld = INMS.get().createMemoryWorld(new WorldCreator("terrain").generator(getEngine().getDimension().getMerger().getGenerator())); + } catch (Exception e) { + e.printStackTrace(); + } + } } @BlockCoordinates @Override public void onActuate(int x, int z, Hunk h, boolean multicore, ChunkContext context) { PrecisionStopwatch p = PrecisionStopwatch.start(); + if (memoryWorld != null) { + Hunk hm = toHunk(memoryWorld.getChunkData(x,z)); + } for (int xf = 0; xf < h.getWidth(); xf++) { terrainSliver(x, z, xf, h, context); @@ -176,6 +191,20 @@ public class IrisTerrainNormalActuator extends EngineAssignedActuator for (zf = 0; zf < h.getDepth(); zf++) { + } } + + private Hunk toHunk(ChunkGenerator.ChunkData data) { + Hunk h = Hunk.newArrayHunk(16, memoryWorld.getBukkit().getMaxHeight(), 16); + for (int x = 0; x < 16; x++) { + for (int z = 0; z < 16; z++) { + for (int y = 0; y < memoryWorld.getBukkit().getMaxHeight(); y++) { + BlockData block = data.getBlockData(x, y, z); + h.set(x, y, z, block); + } + } + } + return h; + } } diff --git a/core/src/main/java/com/volmit/iris/engine/framework/Engine.java b/core/src/main/java/com/volmit/iris/engine/framework/Engine.java index 22c0ed567..fec83b0a5 100644 --- a/core/src/main/java/com/volmit/iris/engine/framework/Engine.java +++ b/core/src/main/java/com/volmit/iris/engine/framework/Engine.java @@ -506,7 +506,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat items.addAll(i.getLoot(debug, rng, slot, world, x, y, z)); } - if (PaperLib.isPaper() && getWorld().hasRealWorld()) { + if (PaperLib.isPaper() && getWorld().hasRealWorld()) { PaperLib.getChunkAtAsync(getWorld().realWorld(), x >> 4, z >> 4).thenAccept((c) -> { Runnable r = () -> { for (ItemStack i : items) { diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java b/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java index 846429bd8..6f18e3b6a 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisDimension.java @@ -144,6 +144,8 @@ public class IrisDimension extends IrisRegistrant { @RegistryListResource(IrisJigsawStructure.class) @Desc("If defined, Iris will place the given jigsaw structure where minecraft should place the overworld stronghold.") private String stronghold; + @Desc("Iris merger") + private IrisMerger merger = new IrisMerger(); @Desc("If set to true, Iris will remove chunks to allow visualizing cross sections of chunks easily") private boolean debugChunkCrossSections = false; @Desc("Vertically split up the biome palettes with 3 air blocks in between to visualize them")