From d6b7a4bdbaa4f5fc11f8f45a03e7acc5b130b5f5 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Sun, 22 Nov 2020 13:00:24 -0500 Subject: [PATCH] Fixes --- .../actuator/IrisTerrainActuator.java | 2 +- .../decorator/IrisSurfaceDecorator.java | 18 ++++ .../generator/modifier/IrisCaveModifier.java | 4 +- .../volmit/iris/manager/IrisBoardManager.java | 8 +- .../nms/v16_2/NMSChunkGenerator_16_2.java | 90 +++++++++-------- .../iris/nms/v16_3/NMSChunkGenerator16_3.java | 96 ++++++++++--------- .../com/volmit/iris/object/IrisBiome.java | 36 +++++-- .../iris/object/IrisBiomePaletteLayer.java | 4 + .../com/volmit/iris/object/IrisSlopeClip.java | 46 +++++++++ .../engine/EngineCompositeGenerator.java | 13 +++ .../iris/scaffold/engine/IrisAccess.java | 2 + 11 files changed, 219 insertions(+), 100 deletions(-) create mode 100644 src/main/java/com/volmit/iris/object/IrisSlopeClip.java diff --git a/src/main/java/com/volmit/iris/generator/actuator/IrisTerrainActuator.java b/src/main/java/com/volmit/iris/generator/actuator/IrisTerrainActuator.java index 6f81406cd..cda822f40 100644 --- a/src/main/java/com/volmit/iris/generator/actuator/IrisTerrainActuator.java +++ b/src/main/java/com/volmit/iris/generator/actuator/IrisTerrainActuator.java @@ -74,7 +74,7 @@ public class IrisTerrainActuator extends EngineAssignedActuator depth = he - i; if(blocks == null) { - blocks = biome.generateLayers(realX, realZ, rng, (int)he, (int)he, getData()); + blocks = biome.generateLayers(realX, realZ, rng, (int)he, (int)he, getData(), getComplex()); } if(blocks.hasIndex(depth)) diff --git a/src/main/java/com/volmit/iris/generator/decorator/IrisSurfaceDecorator.java b/src/main/java/com/volmit/iris/generator/decorator/IrisSurfaceDecorator.java index 2d6b92b1b..27a881c6c 100644 --- a/src/main/java/com/volmit/iris/generator/decorator/IrisSurfaceDecorator.java +++ b/src/main/java/com/volmit/iris/generator/decorator/IrisSurfaceDecorator.java @@ -7,6 +7,7 @@ import com.volmit.iris.object.IrisDecorator; import com.volmit.iris.scaffold.cache.Cache; import com.volmit.iris.scaffold.engine.Engine; import com.volmit.iris.scaffold.hunk.Hunk; +import org.bukkit.block.data.Bisected; import org.bukkit.block.data.BlockData; public class IrisSurfaceDecorator extends IrisEngineDecorator @@ -36,7 +37,24 @@ public class IrisSurfaceDecorator extends IrisEngineDecorator return; } + if(bd instanceof Bisected) + { + bd = bd.clone(); + ((Bisected)bd).setHalf(Bisected.Half.TOP); + try + { + data.set(x, height+2, z, bd); + } + + catch(Throwable e) + { + + } + ((Bisected)bd).setHalf(Bisected.Half.BOTTOM); + } + data.set(x, height+1, z, bd); + } else { diff --git a/src/main/java/com/volmit/iris/generator/modifier/IrisCaveModifier.java b/src/main/java/com/volmit/iris/generator/modifier/IrisCaveModifier.java index 986827441..49b1f04e2 100644 --- a/src/main/java/com/volmit/iris/generator/modifier/IrisCaveModifier.java +++ b/src/main/java/com/volmit/iris/generator/modifier/IrisCaveModifier.java @@ -56,10 +56,10 @@ public class IrisCaveModifier extends EngineAssignedModifier continue; } - KList floor = cave.generateLayers(x + i, z + j, rng, cl.getFloor(), cl.getFloor(), getData()); + KList floor = cave.generateLayers(x + i, z + j, rng, cl.getFloor(), cl.getFloor(), getData(), getComplex()); KList ceiling = cave.generateLayers(x + i + 656, z + j - 656, rng, he - cl.getCeiling(), - he - cl.getCeiling(), getData()); + he - cl.getCeiling(), getData(), getComplex()); for(int g = 0; g < floor.size(); g++) { diff --git a/src/main/java/com/volmit/iris/manager/IrisBoardManager.java b/src/main/java/com/volmit/iris/manager/IrisBoardManager.java index 0a5226a76..7aceb2053 100644 --- a/src/main/java/com/volmit/iris/manager/IrisBoardManager.java +++ b/src/main/java/com/volmit/iris/manager/IrisBoardManager.java @@ -108,11 +108,11 @@ public class IrisBoardManager implements BoardProvider, Listener tp.put(0); // TODO: CHUNK SPEED + + v.add("&7&m------------------"); - v.add(C.GREEN + "PLX Regions" + C.GRAY + ": " + Form.f(parallaxRegions)); - v.add(C.GREEN + "PLX Chunks" + C.GRAY + ": " + Form.f(parallaxChunks)); - v.add(C.GREEN + "CHE Objects" + C.GRAY + ": " + Form.f(loadedObjects)); - v.add(C.GREEN + "Memory Use" + C.GRAY + ": " + Form.memSize(memoryGuess, 0)); + v.add(C.GREEN + "Speed" + C.GRAY + ": " + Form.f(g.getGeneratedPerSecond(), 0) + "/s " + Form.duration(1000D / g.getGeneratedPerSecond(), 0)); + v.add(C.GREEN + "Memory Use" + C.GRAY + ": ~" + Form.memSize(memoryGuess, 0)); if(engine != null) { diff --git a/src/main/java/com/volmit/iris/nms/v16_2/NMSChunkGenerator_16_2.java b/src/main/java/com/volmit/iris/nms/v16_2/NMSChunkGenerator_16_2.java index 8b0ba1153..09d3089d4 100644 --- a/src/main/java/com/volmit/iris/nms/v16_2/NMSChunkGenerator_16_2.java +++ b/src/main/java/com/volmit/iris/nms/v16_2/NMSChunkGenerator_16_2.java @@ -154,54 +154,59 @@ public final class NMSChunkGenerator_16_2 extends ChunkGenerator { int k = i << 4; int l = j << 4; - Iterator iterator = StructureGenerator.t.iterator(); - while(iterator.hasNext()) + if(gen.shouldGenerateStructures()) { - StructureGenerator structuregenerator = (StructureGenerator) iterator.next(); + Iterator iterator = StructureGenerator.t.iterator(); - structuremanager.a(SectionPosition.a(chunkcoordintpair, 0), structuregenerator).forEach((structurestart) -> + while(iterator.hasNext()) { - Iterator iterator1 = structurestart.d().iterator(); + StructureGenerator structuregenerator = (StructureGenerator) iterator.next(); - while(iterator1.hasNext()) + structuremanager.a(SectionPosition.a(chunkcoordintpair, 0), structuregenerator).forEach((structurestart) -> { - StructurePiece structurepiece = (StructurePiece) iterator1.next(); + Iterator iterator1 = structurestart.d().iterator(); - if(structurepiece.a(chunkcoordintpair, 12)) + while(iterator1.hasNext()) { - if(structurepiece instanceof WorldGenFeaturePillagerOutpostPoolPiece) + StructurePiece structurepiece = (StructurePiece) iterator1.next(); + + if(structurepiece.a(chunkcoordintpair, 12)) { - WorldGenFeaturePillagerOutpostPoolPiece worldgenfeaturepillageroutpostpoolpiece = (WorldGenFeaturePillagerOutpostPoolPiece) structurepiece; - WorldGenFeatureDefinedStructurePoolTemplate.Matching worldgenfeaturedefinedstructurepooltemplate_matching = worldgenfeaturepillageroutpostpoolpiece.b().e(); - - if(worldgenfeaturedefinedstructurepooltemplate_matching == WorldGenFeatureDefinedStructurePoolTemplate.Matching.RIGID) + if(structurepiece instanceof WorldGenFeaturePillagerOutpostPoolPiece) { - objectlist.add(worldgenfeaturepillageroutpostpoolpiece); - } + WorldGenFeaturePillagerOutpostPoolPiece worldgenfeaturepillageroutpostpoolpiece = (WorldGenFeaturePillagerOutpostPoolPiece) structurepiece; + WorldGenFeatureDefinedStructurePoolTemplate.Matching worldgenfeaturedefinedstructurepooltemplate_matching = worldgenfeaturepillageroutpostpoolpiece.b().e(); - Iterator iterator2 = worldgenfeaturepillageroutpostpoolpiece.e().iterator(); - - while(iterator2.hasNext()) - { - WorldGenFeatureDefinedStructureJigsawJunction worldgenfeaturedefinedstructurejigsawjunction = (WorldGenFeatureDefinedStructureJigsawJunction) iterator2.next(); - int i1 = worldgenfeaturedefinedstructurejigsawjunction.a(); - int j1 = worldgenfeaturedefinedstructurejigsawjunction.c(); - - if(i1 > k - 12 && j1 > l - 12 && i1 < k + 15 + 12 && j1 < l + 15 + 12) + if(worldgenfeaturedefinedstructurepooltemplate_matching == WorldGenFeatureDefinedStructurePoolTemplate.Matching.RIGID) { - objectlist1.add(worldgenfeaturedefinedstructurejigsawjunction); + objectlist.add(worldgenfeaturepillageroutpostpoolpiece); + } + + Iterator iterator2 = worldgenfeaturepillageroutpostpoolpiece.e().iterator(); + + while(iterator2.hasNext()) + { + WorldGenFeatureDefinedStructureJigsawJunction worldgenfeaturedefinedstructurejigsawjunction = (WorldGenFeatureDefinedStructureJigsawJunction) iterator2.next(); + int i1 = worldgenfeaturedefinedstructurejigsawjunction.a(); + int j1 = worldgenfeaturedefinedstructurejigsawjunction.c(); + + if(i1 > k - 12 && j1 > l - 12 && i1 < k + 15 + 12 && j1 < l + 15 + 12) + { + objectlist1.add(worldgenfeaturedefinedstructurejigsawjunction); + } } } - } - else - { - objectlist.add(structurepiece); + else + { + objectlist.add(structurepiece); + } } } - } - }); + }); + } } + ProtoChunk protochunk = (ProtoChunk) ichunkaccess; HeightMap heightmap = protochunk.a(HeightMap.Type.OCEAN_FLOOR_WG); HeightMap heightmap1 = protochunk.a(HeightMap.Type.WORLD_SURFACE_WG); @@ -391,21 +396,26 @@ public final class NMSChunkGenerator_16_2 extends ChunkGenerator { public void addDecorations(RegionLimitedWorldAccess regionlimitedworldaccess, StructureManager structuremanager) { + + int i = regionlimitedworldaccess.a(); int j = regionlimitedworldaccess.b(); int k = i * 16; int l = j * 16; - BlockPosition blockposition = new BlockPosition(k, 0, l); - BiomeBase biomebase = getStructureBiome(k, l); - SeededRandom seededrandom = new SeededRandom(); - long i1 = seededrandom.a(regionlimitedworldaccess.getSeed(), k, l); - try - { - a(biomebase, structuremanager, this, regionlimitedworldaccess, i1, seededrandom, blockposition); - } - catch(Exception exception) + if(gen.shouldGenerateStructures()) { + BlockPosition blockposition = new BlockPosition(k, 0, l); + BiomeBase biomebase = getStructureBiome(k, l); + SeededRandom seededrandom = new SeededRandom(); + long i1 = seededrandom.a(regionlimitedworldaccess.getSeed(), k, l); + try + { + a(biomebase, structuremanager, this, regionlimitedworldaccess, i1, seededrandom, blockposition); + } + catch(Exception exception) + { + } } Runnable r = posts.remove(Cache.key(i, j)); diff --git a/src/main/java/com/volmit/iris/nms/v16_3/NMSChunkGenerator16_3.java b/src/main/java/com/volmit/iris/nms/v16_3/NMSChunkGenerator16_3.java index 574836b8d..67f5a525c 100644 --- a/src/main/java/com/volmit/iris/nms/v16_3/NMSChunkGenerator16_3.java +++ b/src/main/java/com/volmit/iris/nms/v16_3/NMSChunkGenerator16_3.java @@ -154,54 +154,59 @@ public final class NMSChunkGenerator16_3 extends ChunkGenerator { int k = i << 4; int l = j << 4; - Iterator iterator = StructureGenerator.t.iterator(); - while(iterator.hasNext()) + if(gen.shouldGenerateStructures()) { - StructureGenerator structuregenerator = (StructureGenerator) iterator.next(); + Iterator iterator = StructureGenerator.t.iterator(); - structuremanager.a(SectionPosition.a(chunkcoordintpair, 0), structuregenerator).forEach((structurestart) -> + while(iterator.hasNext()) { - Iterator iterator1 = structurestart.d().iterator(); + StructureGenerator structuregenerator = (StructureGenerator) iterator.next(); - while(iterator1.hasNext()) + structuremanager.a(SectionPosition.a(chunkcoordintpair, 0), structuregenerator).forEach((structurestart) -> { - StructurePiece structurepiece = (StructurePiece) iterator1.next(); + Iterator iterator1 = structurestart.d().iterator(); - if(structurepiece.a(chunkcoordintpair, 12)) + while(iterator1.hasNext()) { - if(structurepiece instanceof WorldGenFeaturePillagerOutpostPoolPiece) + StructurePiece structurepiece = (StructurePiece) iterator1.next(); + + if(structurepiece.a(chunkcoordintpair, 12)) { - WorldGenFeaturePillagerOutpostPoolPiece worldgenfeaturepillageroutpostpoolpiece = (WorldGenFeaturePillagerOutpostPoolPiece) structurepiece; - WorldGenFeatureDefinedStructurePoolTemplate.Matching worldgenfeaturedefinedstructurepooltemplate_matching = worldgenfeaturepillageroutpostpoolpiece.b().e(); - - if(worldgenfeaturedefinedstructurepooltemplate_matching == WorldGenFeatureDefinedStructurePoolTemplate.Matching.RIGID) + if(structurepiece instanceof WorldGenFeaturePillagerOutpostPoolPiece) { - objectlist.add(worldgenfeaturepillageroutpostpoolpiece); - } + WorldGenFeaturePillagerOutpostPoolPiece worldgenfeaturepillageroutpostpoolpiece = (WorldGenFeaturePillagerOutpostPoolPiece) structurepiece; + WorldGenFeatureDefinedStructurePoolTemplate.Matching worldgenfeaturedefinedstructurepooltemplate_matching = worldgenfeaturepillageroutpostpoolpiece.b().e(); - Iterator iterator2 = worldgenfeaturepillageroutpostpoolpiece.e().iterator(); - - while(iterator2.hasNext()) - { - WorldGenFeatureDefinedStructureJigsawJunction worldgenfeaturedefinedstructurejigsawjunction = (WorldGenFeatureDefinedStructureJigsawJunction) iterator2.next(); - int i1 = worldgenfeaturedefinedstructurejigsawjunction.a(); - int j1 = worldgenfeaturedefinedstructurejigsawjunction.c(); - - if(i1 > k - 12 && j1 > l - 12 && i1 < k + 15 + 12 && j1 < l + 15 + 12) + if(worldgenfeaturedefinedstructurepooltemplate_matching == WorldGenFeatureDefinedStructurePoolTemplate.Matching.RIGID) { - objectlist1.add(worldgenfeaturedefinedstructurejigsawjunction); + objectlist.add(worldgenfeaturepillageroutpostpoolpiece); + } + + Iterator iterator2 = worldgenfeaturepillageroutpostpoolpiece.e().iterator(); + + while(iterator2.hasNext()) + { + WorldGenFeatureDefinedStructureJigsawJunction worldgenfeaturedefinedstructurejigsawjunction = (WorldGenFeatureDefinedStructureJigsawJunction) iterator2.next(); + int i1 = worldgenfeaturedefinedstructurejigsawjunction.a(); + int j1 = worldgenfeaturedefinedstructurejigsawjunction.c(); + + if(i1 > k - 12 && j1 > l - 12 && i1 < k + 15 + 12 && j1 < l + 15 + 12) + { + objectlist1.add(worldgenfeaturedefinedstructurejigsawjunction); + } } } - } - else - { - objectlist.add(structurepiece); + else + { + objectlist.add(structurepiece); + } } } - } - }); + }); + } } + ProtoChunk protochunk = (ProtoChunk) ichunkaccess; HeightMap heightmap = protochunk.a(HeightMap.Type.OCEAN_FLOOR_WG); HeightMap heightmap1 = protochunk.a(HeightMap.Type.WORLD_SURFACE_WG); @@ -395,17 +400,21 @@ public final class NMSChunkGenerator16_3 extends ChunkGenerator { int j = regionlimitedworldaccess.b(); int k = i * 16; int l = j * 16; - BlockPosition blockposition = new BlockPosition(k, 0, l); - BiomeBase biomebase = getStructureBiome(k, l); - SeededRandom seededrandom = new SeededRandom(); - long i1 = seededrandom.a(regionlimitedworldaccess.getSeed(), k, l); - try - { - a(biomebase, structuremanager, this, regionlimitedworldaccess, i1, seededrandom, blockposition); - } - catch(Exception exception) - { + if(gen.shouldGenerateStructures()) + { + BlockPosition blockposition = new BlockPosition(k, 0, l); + BiomeBase biomebase = getStructureBiome(k, l); + SeededRandom seededrandom = new SeededRandom(); + long i1 = seededrandom.a(regionlimitedworldaccess.getSeed(), k, l); + try + { + a(biomebase, structuremanager, this, regionlimitedworldaccess, i1, seededrandom, blockposition); + } + catch(Exception exception) + { + + } } Runnable r = posts.remove(Cache.key(i, j)); @@ -422,11 +431,6 @@ public final class NMSChunkGenerator16_3 extends ChunkGenerator { } } - public boolean isStructures() - { - return gen.shouldGenerateStructures(); - } - private BiomeBase getStructureBiome(int k, int l) { return (BiomeBase) INMS.get().getBiomeBase(ws.get().getWorld(), gen.getComposite().getDefaultEngine().getSurfaceBiome(k, l).getVanillaDerivative()); } diff --git a/src/main/java/com/volmit/iris/object/IrisBiome.java b/src/main/java/com/volmit/iris/object/IrisBiome.java index 20255baac..3667bbdac 100644 --- a/src/main/java/com/volmit/iris/object/IrisBiome.java +++ b/src/main/java/com/volmit/iris/object/IrisBiome.java @@ -1,5 +1,6 @@ package com.volmit.iris.object; +import com.volmit.iris.generator.IrisComplex; import com.volmit.iris.scaffold.cache.AtomicCache; import com.volmit.iris.generator.noise.CNG; import com.volmit.iris.manager.IrisDataManager; @@ -320,11 +321,11 @@ public class IrisBiome extends IrisRegistrant implements IRare return childrenCell.aquire(() -> getChildStyle().create(random.nextParallelRNG(sig * 2137)).bake().scale(scale).bake()); } - public KList generateLayers(double wx, double wz, RNG random, int maxDepth, int height, IrisDataManager rdata) + public KList generateLayers(double wx, double wz, RNG random, int maxDepth, int height, IrisDataManager rdata, IrisComplex complex) { if(isLockLayers()) { - return generateLockedLayers(wx, wz, random, maxDepth, height, rdata); + return generateLockedLayers(wx, wz, random, maxDepth, height, rdata, complex); } KList data = new KList<>(); @@ -337,9 +338,19 @@ public class IrisBiome extends IrisRegistrant implements IRare for(int i = 0; i < layers.size(); i++) { CNG hgen = getLayerHeightGenerators(random, rdata).get(i); - int d = hgen.fit(layers.get(i).getMinHeight(), layers.get(i).getMaxHeight(), wx / layers.get(i).getZoom(), wz / layers.get(i).getZoom()); + double d = hgen.fit(layers.get(i).getMinHeight(), layers.get(i).getMaxHeight(), wx / layers.get(i).getZoom(), wz / layers.get(i).getZoom()); - if(d < 0) + IrisSlopeClip sc = getLayers().get(i).getSlopeCondition(); + + if(!sc.isDefault()) + { + if(!sc.isValid(complex.getSlopeStream().get(wx, wz))) + { + d = 0; + } + } + + if(d <= 0) { continue; } @@ -371,7 +382,7 @@ public class IrisBiome extends IrisRegistrant implements IRare return data; } - public KList generateLockedLayers(double wx, double wz, RNG random, int maxDepthf, int height, IrisDataManager rdata) + public KList generateLockedLayers(double wx, double wz, RNG random, int maxDepthf, int height, IrisDataManager rdata, IrisComplex complex) { KList data = new KList<>(); KList real = new KList<>(); @@ -384,9 +395,20 @@ public class IrisBiome extends IrisRegistrant implements IRare for(int i = 0; i < layers.size(); i++) { CNG hgen = getLayerHeightGenerators(random, rdata).get(i); - int d = hgen.fit(layers.get(i).getMinHeight(), layers.get(i).getMaxHeight(), wx / layers.get(i).getZoom(), wz / layers.get(i).getZoom()); + double d = hgen.fit(layers.get(i).getMinHeight(), layers.get(i).getMaxHeight(), wx / layers.get(i).getZoom(), wz / layers.get(i).getZoom()); - if(d < 0) + + IrisSlopeClip sc = getLayers().get(i).getSlopeCondition(); + + if(!sc.isDefault()) + { + if(!sc.isValid(complex.getSlopeStream().get(wx, wz))) + { + d = 0; + } + } + + if(d <= 0) { continue; } diff --git a/src/main/java/com/volmit/iris/object/IrisBiomePaletteLayer.java b/src/main/java/com/volmit/iris/object/IrisBiomePaletteLayer.java index e5df11f91..1160fbafa 100644 --- a/src/main/java/com/volmit/iris/object/IrisBiomePaletteLayer.java +++ b/src/main/java/com/volmit/iris/object/IrisBiomePaletteLayer.java @@ -44,6 +44,10 @@ public class IrisBiomePaletteLayer @Desc("The max thickness of this layer") private int maxHeight = 1; + @DontObfuscate + @Desc("If set, this layer will change size depending on the slope. If in bounds, the layer will get larger (taller) the closer to the center of this slope clip it is. If outside of the slipe's bounds, this layer will not show.") + private IrisSlopeClip slopeCondition = new IrisSlopeClip(); + @MinNumber(0.0001) @DontObfuscate @Desc("The terrain zoom mostly for zooming in on a wispy palette") diff --git a/src/main/java/com/volmit/iris/object/IrisSlopeClip.java b/src/main/java/com/volmit/iris/object/IrisSlopeClip.java new file mode 100644 index 000000000..2a54d9d33 --- /dev/null +++ b/src/main/java/com/volmit/iris/object/IrisSlopeClip.java @@ -0,0 +1,46 @@ +package com.volmit.iris.object; + +import com.volmit.iris.util.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@Desc("Translate objects") +@Data +public class IrisSlopeClip +{ + @MinNumber(0) + @MaxNumber(255) + @DontObfuscate + @Desc("The minimum slope for placement") + private double minimumSlope = 0; + + @MinNumber(0) + @MaxNumber(255) + @DontObfuscate + @Desc("The maximum slope for placement") + private double maximumSlope = 10; + + public boolean isDefault() { + return minimumSlope <= 0 && maximumSlope >= 10; + } + + public boolean isValid(double slope) + { + if(isDefault()) + { + return true; + } + + if(minimumSlope > slope || maximumSlope < slope) + { + return false; + } + + return true; + } +} diff --git a/src/main/java/com/volmit/iris/scaffold/engine/EngineCompositeGenerator.java b/src/main/java/com/volmit/iris/scaffold/engine/EngineCompositeGenerator.java index 2091e3381..dc6c731f5 100644 --- a/src/main/java/com/volmit/iris/scaffold/engine/EngineCompositeGenerator.java +++ b/src/main/java/com/volmit/iris/scaffold/engine/EngineCompositeGenerator.java @@ -9,6 +9,7 @@ import com.volmit.iris.scaffold.IrisWorlds; import com.volmit.iris.scaffold.cache.Cache; import com.volmit.iris.scaffold.hunk.Hunk; import com.volmit.iris.util.*; +import lombok.Getter; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -30,7 +31,11 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce private final String dimensionHint; private final boolean production; private final KList populators; + private long mst = 0; private int generated = 0; + private int lgenerated = 0; + @Getter + private double generatedPerSecond = 0; private int art; private ReactiveFolder hotloader = null; @@ -40,6 +45,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce public EngineCompositeGenerator(String hint, boolean production) { super(); + mst = M.ms(); this.production = production; this.dimensionHint = hint; initialized = new AtomicBoolean(false); @@ -86,6 +92,13 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce { } + + if(M.ms() - mst > 1000) + { + generatedPerSecond = (double)(generated - lgenerated) / ((double)(M.ms() - mst) / 1000D); + mst = M.ms(); + lgenerated = generated; + } } private synchronized IrisDimension getDimension(World world) { diff --git a/src/main/java/com/volmit/iris/scaffold/engine/IrisAccess.java b/src/main/java/com/volmit/iris/scaffold/engine/IrisAccess.java index 70fdbd649..b46fe0e1f 100644 --- a/src/main/java/com/volmit/iris/scaffold/engine/IrisAccess.java +++ b/src/main/java/com/volmit/iris/scaffold/engine/IrisAccess.java @@ -16,6 +16,8 @@ public interface IrisAccess extends Hotloadable, DataProvider { public int getGenerated(); + public double getGeneratedPerSecond(); + public void printMetrics(CommandSender sender); public IrisBiome getBiome(int x, int y, int z);