From 5d7126f772d32bd8a62e91a86fbf085775c3ccc5 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Tue, 7 Apr 2020 00:52:09 -0400 Subject: [PATCH] Fix --- src/main/java/ninja/bytecode/iris/Iris.java | 1 + .../java/ninja/bytecode/iris/IrisContext.java | 27 ++++++++++++++ .../ninja/bytecode/iris/IrisGenerator.java | 35 +++++++++++++++++-- .../java/ninja/bytecode/iris/IrisMetrics.java | 15 ++++++++ 4 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ninja/bytecode/iris/IrisContext.java create mode 100644 src/main/java/ninja/bytecode/iris/IrisMetrics.java diff --git a/src/main/java/ninja/bytecode/iris/Iris.java b/src/main/java/ninja/bytecode/iris/Iris.java index 08ed6bd3c..ad62dc1fc 100644 --- a/src/main/java/ninja/bytecode/iris/Iris.java +++ b/src/main/java/ninja/bytecode/iris/Iris.java @@ -16,6 +16,7 @@ import org.bukkit.generator.ChunkGenerator; import org.bukkit.plugin.java.JavaPlugin; import ninja.bytecode.iris.util.IO; +import ninja.bytecode.iris.util.KMap; public class Iris extends JavaPlugin { diff --git a/src/main/java/ninja/bytecode/iris/IrisContext.java b/src/main/java/ninja/bytecode/iris/IrisContext.java new file mode 100644 index 000000000..7a092c641 --- /dev/null +++ b/src/main/java/ninja/bytecode/iris/IrisContext.java @@ -0,0 +1,27 @@ +package ninja.bytecode.iris; + +import org.bukkit.World; + +import ninja.bytecode.iris.util.BiomeResult; +import ninja.bytecode.iris.util.KMap; + +public interface IrisContext +{ + static KMap contexts = new KMap<>(); + + public static void pushContext(IrisContext context) + { + contexts.put(context.getWorld(), context); + } + + public static IrisContext of(World world) + { + return contexts.get(world); + } + + public BiomeResult getBiome(int x, int z); + + public IrisMetrics getMetrics(); + + public World getWorld(); +} diff --git a/src/main/java/ninja/bytecode/iris/IrisGenerator.java b/src/main/java/ninja/bytecode/iris/IrisGenerator.java index 6d9ef8a2f..6085fcf10 100644 --- a/src/main/java/ninja/bytecode/iris/IrisGenerator.java +++ b/src/main/java/ninja/bytecode/iris/IrisGenerator.java @@ -18,11 +18,12 @@ import ninja.bytecode.iris.object.IrisDimension; import ninja.bytecode.iris.object.IrisRegion; import ninja.bytecode.iris.util.BiomeResult; import ninja.bytecode.iris.util.CNG; +import ninja.bytecode.iris.util.ChronoLatch; import ninja.bytecode.iris.util.IrisInterpolation; import ninja.bytecode.iris.util.KList; import ninja.bytecode.iris.util.RNG; -public class IrisGenerator extends ChunkGenerator +public class IrisGenerator extends ChunkGenerator implements IrisContext { // TODO REMOVE OR FIND A BETTER PLACE private BlockData STONE = Material.STONE.createBlockData(); @@ -30,12 +31,16 @@ public class IrisGenerator extends ChunkGenerator private String dimensionName; private GenLayerBiome glBiome; private CNG terrainNoise; + private IrisMetrics metrics; + private World world; + private ChronoLatch pushLatch; private boolean initialized = false; public IrisGenerator(String dimensionName) { this.dimensionName = dimensionName; + pushLatch = new ChronoLatch(3000); } public IrisDimension getDimension() @@ -50,6 +55,8 @@ public class IrisGenerator extends ChunkGenerator return; } + this.world = world; + metrics = new IrisMetrics(1024); initialized = true; glBiome = new GenLayerBiome(this, rng.nextParallelRNG(1)); terrainNoise = CNG.signature(rng.nextParallelRNG(2)); @@ -64,7 +71,12 @@ public class IrisGenerator extends ChunkGenerator @Override public ChunkData generateChunkData(World world, Random no, int x, int z, BiomeGrid biomeGrid) { - Iris.hotloader.check(); + if(pushLatch.flip()) + { + Iris.hotloader.check(); + IrisContext.pushContext(this); + } + int i, j, k, height, depth; double wx, wz, rx, rz, noise, ox, oz; boolean underwater; @@ -79,7 +91,6 @@ public class IrisGenerator extends ChunkGenerator for(i = 0; i < 16; i++) { - for(j = 0; j < 16; j++) { rx = (x * 16) + i; @@ -163,9 +174,27 @@ public class IrisGenerator extends ChunkGenerator return super.getFixedSpawnLocation(world, random); } + @Override + public BiomeResult getBiome(int x, int z) + { + return null; + } + @Override public boolean isParallelCapable() { return true; } + + @Override + public IrisMetrics getMetrics() + { + return metrics; + } + + @Override + public World getWorld() + { + return world; + } } diff --git a/src/main/java/ninja/bytecode/iris/IrisMetrics.java b/src/main/java/ninja/bytecode/iris/IrisMetrics.java new file mode 100644 index 000000000..ff14d75df --- /dev/null +++ b/src/main/java/ninja/bytecode/iris/IrisMetrics.java @@ -0,0 +1,15 @@ +package ninja.bytecode.iris; + +import lombok.Data; +import ninja.bytecode.iris.util.RollingSequence; + +@Data +public class IrisMetrics +{ + private final RollingSequence total; + + public IrisMetrics(int memory) + { + total = new RollingSequence(memory); + } +}