From d52d70a014a0ff1936be351d63672b8c2aca3d3d Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Wed, 25 Aug 2021 08:35:47 -0400 Subject: [PATCH] Woo fixes --- src/main/java/com/volmit/iris/Iris.java | 126 +----------------- .../com/volmit/iris/engine/IrisEngine.java | 18 ++- .../actuator/IrisTerrainNormalActuator.java | 2 +- .../engine/modifier/IrisCaveModifier.java | 4 +- .../iris/engine/object/biome/IrisBiome.java | 20 ++- .../object/dimensional/IrisDimension.java | 16 +++ 6 files changed, 46 insertions(+), 140 deletions(-) diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index a013ee464..a93648bd0 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -49,6 +49,7 @@ 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.nbt.mca.*; +import com.volmit.iris.util.nbt.mca.palette.BiomeContainer; import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.plugin.*; import com.volmit.iris.util.reflect.ShadeFix; @@ -77,6 +78,7 @@ import org.checkerframework.checker.units.qual.K; import java.io.*; import java.lang.annotation.Annotation; import java.net.URL; +import java.util.Arrays; import java.util.Date; import java.util.Map; import java.util.Set; @@ -126,129 +128,6 @@ public class Iris extends VolmitPlugin implements Listener { }).start(); } - private void testmca() { - try - { - int forceBits = 5; - int possibilities = (int) (Math.pow(2, forceBits) - 1); - KList bp = new KList<>(); - Set bf = new KSet<>(); - - while(bp.size() < possibilities) - { - BlockData b = null; - - while(b == null) - { - try - { - b = Material.values()[RNG.r.i(Material.values().length-1)].createBlockData(); - } - - catch(Throwable e) - { - - } - } - - bp.addIfMissing(b); - } - - MCAFile file = new MCAFile(0, 0); - for(int cx = 0; cx < 32; cx++) - { - for(int cz = 0; cz < 32; cz++) - { - Chunk c = Chunk.newChunk(); - - for(int i = 0; i < 16; i++) - { - for(int j = 0; j < 16; j++) - { - for(int k = 0; k < 16; k++) - { - BlockData b = bp.getRandom(); - c.setBlockStateAt(i,j,k, NBTWorld.getCompound(b), false); - } - } - } - - file.setChunk(cx, cz, c); - } - } - - try { - File f = new File("r.0.0.mca"); - Iris.info("Write " + MCAUtil.write(file, f) + " chunks"); - file = MCAUtil.read(f); - - for(int i = 0; i < 1024; i++) { - Chunk c = file.getChunks().get(i); - - if (c == null) { - Iris.error("Missing Chunk: " + i); - continue; - } - - Section s = c.getSection(0); - - if (s == null) - { - Iris.error("Missing section 0 in chunk: " + i); - continue; - } - - for(int a = 0; a < 16; a++) - { - for(int b = 0; b < 16; b++) - { - for(int ca = 0; ca < 16; ca++) - { - BlockData data = NBTWorld.getBlockData(s.getBlockStateAt(a, b, ca)); - bf.add(data); - } - } - } - } - - Iris.info("Read .. OK?"); - - Iris.info("Possibilities: " + bp.size()); - Iris.info("Read Possibss: " + bf.size()); - int match = 0; - for(BlockData i : bp) - { - if(bf.contains(i)) - { - match++; - } - - else - { - Iris.warn("Couldn't find preset " + i.getAsString(true) + " in any section"); - } - } - - for(BlockData i : bf) - { - if(!bp.contains(i)) - { - Iris.warn("Forign block data " + i.getAsString(true) + "! (ignore leaves, they are modded by us)"); - } - } - Iris.info("Matched: " + match); - } catch (IOException e) { - e.printStackTrace(); - } - } - - catch(Throwable ee) - { - ee.printStackTrace(); - } - } - - @SuppressWarnings("unchecked") private void enable() { audiences = BukkitAudiences.create(this); sender = new VolmitSender(Bukkit.getConsoleSender()); @@ -261,7 +140,6 @@ public class Iris extends VolmitPlugin implements Listener { configWatcher = new FileWatcher(getDataFile("settings.json")); services.values().forEach(IrisService::onEnable); services.values().forEach(this::registerListener); - J.s(this::testmca, 20); } public void postShutdown(Runnable r) { diff --git a/src/main/java/com/volmit/iris/engine/IrisEngine.java b/src/main/java/com/volmit/iris/engine/IrisEngine.java index 590648584..ef989ccf5 100644 --- a/src/main/java/com/volmit/iris/engine/IrisEngine.java +++ b/src/main/java/com/volmit/iris/engine/IrisEngine.java @@ -397,19 +397,21 @@ public class IrisEngine implements Engine { context.touch(); getEngineData().getStatistics().generatedChunk(); try { - PrecisionStopwatch p = PrecisionStopwatch.start(); Hunk blocks = vblocks.listen((xx, y, zz, t) -> catchBlockUpdates(x + xx, y + getMinHeight(), z + zz, t)); - if (multicore) { + if(getDimension().isDebugChunkCrossSections() && ((x >> 4) % getDimension().getDebugCrossSectionsMod() == 0 || (z >> 4) % getDimension().getDebugCrossSectionsMod() == 0)) + { for (int i = 0; i < 16; i++) { for (int j = 0; j < 16; j++) { - blocks.set(i, 0, j, Material.RED_GLAZED_TERRACOTTA.createBlockData()); + blocks.set(i, 0, j, Material.CRYING_OBSIDIAN.createBlockData()); } } - } else { - getMantle().generateMatter(x >> 4, z >> 4, multicore); + } + else + { + getMantle().generateMatter(x >> 4, z >> 4, true); burst().burst(multicore, () -> getTerrainActuator().actuate(x, z, vblocks, multicore), () -> getBiomeActuator().actuate(x, z, vbiomes, multicore) @@ -419,16 +421,12 @@ public class IrisEngine implements Engine { () -> getDecorantActuator().actuate(x, z, blocks, multicore), () -> getRavineModifier().modify(x, z, vblocks, multicore) ); - getPostModifier().modify(x, z, vblocks, multicore); - burst().burst(multicore, - () -> getMantle().insertMatter(x >> 4, z >> 4, BlockData.class, blocks, multicore), + () -> getMantle().insertMatter(x >> 4, z >> 4, BlockData.class, blocks, true), () -> getDepositModifier().modify(x, z, vblocks, multicore) ); } - - getMetrics().getTotal().put(p.getMilliseconds()); generated.incrementAndGet(); recycle(); diff --git a/src/main/java/com/volmit/iris/engine/actuator/IrisTerrainNormalActuator.java b/src/main/java/com/volmit/iris/engine/actuator/IrisTerrainNormalActuator.java index 64341d239..09dce9310 100644 --- a/src/main/java/com/volmit/iris/engine/actuator/IrisTerrainNormalActuator.java +++ b/src/main/java/com/volmit/iris/engine/actuator/IrisTerrainNormalActuator.java @@ -136,7 +136,7 @@ public class IrisTerrainNormalActuator extends EngineAssignedActuator if (i <= he) { depth = he - i; if (blocks == null) { - blocks = biome.generateLayers(realX, realZ, rng, + blocks = biome.generateLayers(getDimension(), realX, realZ, rng, he, he, getData(), diff --git a/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java b/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java index a4d6517f2..bbee9f959 100644 --- a/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java +++ b/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java @@ -81,8 +81,8 @@ public class IrisCaveModifier extends EngineAssignedModifier { continue; } - KList floor = cave.generateLayers(x + finalI, z + j, rng, cl.getFloor(), cl.getFloor(), getData(), getComplex()); - KList ceiling = cave.generateLayers(x + finalI + 656, z + j - 656, rng, + KList floor = cave.generateLayers(getDimension(), x + finalI, z + j, rng, cl.getFloor(), cl.getFloor(), getData(), getComplex()); + KList ceiling = cave.generateLayers(getDimension(), x + finalI + 656, z + j - 656, rng, he - cl.getCeiling(), he - cl.getCeiling(), getData(), getComplex()); diff --git a/src/main/java/com/volmit/iris/engine/object/biome/IrisBiome.java b/src/main/java/com/volmit/iris/engine/object/biome/IrisBiome.java index 2696a5571..bbe3060be 100644 --- a/src/main/java/com/volmit/iris/engine/object/biome/IrisBiome.java +++ b/src/main/java/com/volmit/iris/engine/object/biome/IrisBiome.java @@ -30,6 +30,7 @@ import com.volmit.iris.engine.object.block.IrisBlockDrops; import com.volmit.iris.engine.object.common.IRare; import com.volmit.iris.engine.object.decoration.IrisDecorator; import com.volmit.iris.engine.object.deposits.IrisDepositGenerator; +import com.volmit.iris.engine.object.dimensional.IrisDimension; import com.volmit.iris.engine.object.feature.IrisFeaturePotential; import com.volmit.iris.engine.object.jigsaw.IrisJigsawStructurePlacement; import com.volmit.iris.engine.object.loot.IrisLootReference; @@ -43,6 +44,7 @@ import com.volmit.iris.engine.object.spawners.IrisSpawner; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KMap; import com.volmit.iris.util.collection.KSet; +import com.volmit.iris.util.context.IrisContext; import com.volmit.iris.util.data.B; import com.volmit.iris.util.data.DataProvider; import com.volmit.iris.util.data.VanillaBiomeMap; @@ -56,6 +58,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import org.bukkit.Material; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -65,7 +68,6 @@ import java.awt.*; @Accessors(chain = true) @NoArgsConstructor @AllArgsConstructor - @Desc("Represents a biome in iris. Biomes are placed inside of regions and hold objects.\nA biome consists of layers (block palletes), decorations, objects & generators.") @Data @EqualsAndHashCode(callSuper = false) @@ -88,7 +90,6 @@ public class IrisBiome extends IrisRegistrant implements IRare { @ArrayType(min = 1, type = IrisFeaturePotential.class) private KList features = new KList<>(); - @ArrayType(min = 1, type = IrisEffect.class) @Desc("Effects are ambient effects such as potion effects, random sounds, or even particles around each player. All of these effects are played via packets so two players won't see/hear each others effects.\nDue to performance reasons, effects will play around the player even if where the effect was played is no longer in the biome the player is in.") private KList effects = new KList<>(); @@ -194,6 +195,7 @@ public class IrisBiome extends IrisRegistrant implements IRare { private transient InferredType inferredType; + private static final BlockData BARRIER = Material.BARRIER.createBlockData(); private final transient AtomicCache> genCache = new AtomicCache<>(); private final transient AtomicCache> genCacheMax = new AtomicCache<>(); private final transient AtomicCache> genCacheMin = new AtomicCache<>(); @@ -326,7 +328,7 @@ public class IrisBiome extends IrisRegistrant implements IRare { return childrenCell.aquire(() -> getChildStyle().create(random.nextParallelRNG(sig * 2137), getLoader()).bake().scale(scale).bake()); } - public KList generateLayers(double wx, double wz, RNG random, int maxDepth, int height, IrisData rdata, IrisComplex complex) { + public KList generateLayers(IrisDimension dim, double wx, double wz, RNG random, int maxDepth, int height, IrisData rdata, IrisComplex complex) { if (isLockLayers()) { return generateLockedLayers(wx, wz, random, maxDepth, height, rdata, complex); } @@ -369,6 +371,18 @@ public class IrisBiome extends IrisRegistrant implements IRare { if (data.size() >= maxDepth) { break; } + + if(dim.isExplodeBiomePalettes()) + { + for(int j = 0; j < dim.getExplodeBiomePaletteSize(); j++) + { + data.add(BARRIER); + + if (data.size() >= maxDepth) { + break; + } + } + } } return data; diff --git a/src/main/java/com/volmit/iris/engine/object/dimensional/IrisDimension.java b/src/main/java/com/volmit/iris/engine/object/dimensional/IrisDimension.java index 2413e3bd7..c11b89f92 100644 --- a/src/main/java/com/volmit/iris/engine/object/dimensional/IrisDimension.java +++ b/src/main/java/com/volmit/iris/engine/object/dimensional/IrisDimension.java @@ -86,6 +86,22 @@ public class IrisDimension extends IrisRegistrant { @Desc("If defined, Iris will place the given jigsaw structure where minecraft should place the overworld stronghold.") private String stronghold; + @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") + private boolean explodeBiomePalettes = false; + + @MinNumber(1) + @MaxNumber(16) + @Desc("Customize the palette height explosion") + private int explodeBiomePaletteSize = 3; + + @MinNumber(2) + @MaxNumber(16) + @Desc("Every X/Z % debugCrossSectionsMod == 0 cuts the chunk") + private int debugCrossSectionsMod = 3; + @Desc("The average distance between strongholds") private int strongholdJumpDistance = 1280;