diff --git a/src/main/java/com/volmit/iris/v2/generator/decorator/IrisCeilingDecorator.java b/src/main/java/com/volmit/iris/v2/generator/decorator/IrisCeilingDecorator.java new file mode 100644 index 000000000..166cf77c4 --- /dev/null +++ b/src/main/java/com/volmit/iris/v2/generator/decorator/IrisCeilingDecorator.java @@ -0,0 +1,39 @@ +package com.volmit.iris.v2.generator.decorator; + +import com.volmit.iris.object.DecorationPart; +import com.volmit.iris.object.IrisBiome; +import com.volmit.iris.object.IrisDecorator; +import com.volmit.iris.v2.scaffold.cache.Cache; +import com.volmit.iris.v2.scaffold.engine.Engine; +import com.volmit.iris.v2.scaffold.hunk.Hunk; +import org.bukkit.block.data.BlockData; + +public class IrisCeilingDecorator extends IrisEngineDecorator +{ + public IrisCeilingDecorator(Engine engine) { + super(engine, "Ceiling", DecorationPart.CEILING); + } + + @Override + public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk data, IrisBiome biome, int height, int max) { + IrisDecorator decorator = getDecorator(biome, realX, realZ); + + if(decorator != null) + { + if(!decorator.isStacking()) + { + data.set(x, height-1, z, decorator.getBlockData100(biome, getRng(), realX, realZ, getData())); + } + + else + { + int stack = Math.min(getRng().nextParallelRNG(Cache.key(realX, realZ)).i(decorator.getStackMin(), decorator.getStackMax()), max); + + for(int i = 0; i < stack; i++) + { + data.set(x, height-1-i, z, i == stack-1 ? decorator.getBlockDataForTop(biome, getRng(), realX+i, realZ-i, getData()) : decorator.getBlockData100(biome, getRng(), realX+i, realZ-i, getData())); + } + } + } + } +} diff --git a/src/main/java/com/volmit/iris/v2/generator/decorator/IrisSeaSurfaceDecorator.java b/src/main/java/com/volmit/iris/v2/generator/decorator/IrisSeaSurfaceDecorator.java new file mode 100644 index 000000000..e13fe80d9 --- /dev/null +++ b/src/main/java/com/volmit/iris/v2/generator/decorator/IrisSeaSurfaceDecorator.java @@ -0,0 +1,43 @@ +package com.volmit.iris.v2.generator.decorator; + +import com.volmit.iris.object.DecorationPart; +import com.volmit.iris.object.IrisBiome; +import com.volmit.iris.object.IrisDecorator; +import com.volmit.iris.v2.scaffold.cache.Cache; +import com.volmit.iris.v2.scaffold.engine.Engine; +import com.volmit.iris.v2.scaffold.hunk.Hunk; +import org.bukkit.block.data.BlockData; + +public class IrisSeaSurfaceDecorator extends IrisEngineDecorator +{ + public IrisSeaSurfaceDecorator(Engine engine) { + super(engine, "Sea Surface", DecorationPart.SEA_SURFACE); + } + + @Override + public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk data, IrisBiome biome, int height, int max) { + if(height < getDimension().getFluidHeight()) { + { + IrisDecorator decorator = getDecorator(biome, realX, realZ); + + if(decorator != null) + { + if(!decorator.isStacking()) + { + data.set(x, getDimension().getFluidHeight()+1, z, decorator.getBlockData100(biome, getRng(), realX, realZ, getData())); + } + + else + { + int stack = Math.min(getRng().nextParallelRNG(Cache.key(realX, realZ)).i(decorator.getStackMin(), decorator.getStackMax()), max); + + for(int i = 0; i < stack; i++) + { + data.set(x, getDimension().getFluidHeight()+1+i, z, i == stack-1 ? decorator.getBlockDataForTop(biome, getRng(), realX+i, realZ-i, getData()) : decorator.getBlockData100(biome, getRng(), realX+i, realZ-i, getData())); + } + } + } + } + } + } +} diff --git a/src/main/java/com/volmit/iris/v2/generator/decorator/IrisShoreLineDecorator.java b/src/main/java/com/volmit/iris/v2/generator/decorator/IrisShoreLineDecorator.java new file mode 100644 index 000000000..03d93aaa1 --- /dev/null +++ b/src/main/java/com/volmit/iris/v2/generator/decorator/IrisShoreLineDecorator.java @@ -0,0 +1,49 @@ +package com.volmit.iris.v2.generator.decorator; + +import com.volmit.iris.object.DecorationPart; +import com.volmit.iris.object.IrisBiome; +import com.volmit.iris.object.IrisDecorator; +import com.volmit.iris.v2.scaffold.cache.Cache; +import com.volmit.iris.v2.scaffold.engine.Engine; +import com.volmit.iris.v2.scaffold.hunk.Hunk; +import org.bukkit.block.data.BlockData; + +public class IrisShoreLineDecorator extends IrisEngineDecorator +{ + public IrisShoreLineDecorator(Engine engine) { + super(engine, "Shore Line", DecorationPart.SHORE_LINE); + } + + @Override + public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk data, IrisBiome biome, int height, int max) { + + if(height == getDimension().getFluidHeight()) { + if (Math.round(getComplex().getHeightStream().get(realX1, realZ)) < getComplex().getFluidHeight() || + Math.round(getComplex().getHeightStream().get(realX_1, realZ)) < getComplex().getFluidHeight() || + Math.round(getComplex().getHeightStream().get(realX, realZ1)) < getComplex().getFluidHeight() || + Math.round(getComplex().getHeightStream().get(realX, realZ_1)) < getComplex().getFluidHeight() + ) + { + IrisDecorator decorator = getDecorator(biome, realX, realZ); + + if(decorator != null) + { + if(!decorator.isStacking()) + { + data.set(x, height+1, z, decorator.getBlockData100(biome, getRng(), realX, realZ, getData())); + } + + else + { + int stack = Math.min(getRng().nextParallelRNG(Cache.key(realX, realZ)).i(decorator.getStackMin(), decorator.getStackMax()), max); + + for(int i = 0; i < stack; i++) + { + data.set(x, height+1+i, z, i == stack-1 ? decorator.getBlockDataForTop(biome, getRng(), realX+i, realZ-i, getData()) : decorator.getBlockData100(biome, getRng(), realX+i, realZ-i, getData())); + } + } + } + } + } + } +} diff --git a/src/main/java/com/volmit/iris/v2/generator/decorator/IrisSurfaceDecorator.java b/src/main/java/com/volmit/iris/v2/generator/decorator/IrisSurfaceDecorator.java new file mode 100644 index 000000000..5078a0be3 --- /dev/null +++ b/src/main/java/com/volmit/iris/v2/generator/decorator/IrisSurfaceDecorator.java @@ -0,0 +1,74 @@ +package com.volmit.iris.v2.generator.decorator; + +import com.volmit.iris.object.DecorationPart; +import com.volmit.iris.object.InferredType; +import com.volmit.iris.object.IrisBiome; +import com.volmit.iris.object.IrisDecorator; +import com.volmit.iris.v2.scaffold.cache.Cache; +import com.volmit.iris.v2.scaffold.engine.Engine; +import com.volmit.iris.v2.scaffold.hunk.Hunk; +import org.bukkit.block.data.BlockData; + +public class IrisSurfaceDecorator extends IrisEngineDecorator +{ + public IrisSurfaceDecorator(Engine engine) { + super(engine, "Surface", DecorationPart.NONE); + } + + @Override + public void decorate(int x, int z, int realX, int realX1, int realX_1, int realZ, int realZ1, int realZ_1, Hunk data, IrisBiome biome, int height, int max) { + if(biome.getInferredType().equals(InferredType.SHORE) && height < getDimension().getFluidHeight()) + { + return; + } + + BlockData bd; + IrisDecorator decorator = getDecorator(biome, realX, realZ); + + if(decorator != null) + { + if(!decorator.isStacking()) + { + bd = decorator.getBlockData100(biome, getRng(), realX, realZ, getData()); + + if(!canGoOn(bd, data.get(x, height, z))) + { + return; + } + + data.set(x, height+1, z, bd); + } + + else { + if (height < getDimension().getFluidHeight()) + { + max = getDimension().getFluidHeight() - height; + } + + int stack = Math.min(getRng().nextParallelRNG(Cache.key(realX, realZ)).i(decorator.getStackMin(), decorator.getStackMax()), max); + + for(int i = 0; i < stack; i++) + { + bd = i == stack-1 ? decorator.getBlockDataForTop(biome, getRng(), realX+i, realZ-i, getData()) : decorator.getBlockData100(biome, getRng(), realX+i, realZ-i, getData()); + + if(bd == null && i == stack-1) + { + bd = decorator.getBlockData100(biome, getRng(), realX+i, realZ-i, getData()); + } + + if(bd == null) + { + return; + } + + if(i == 0 && !canGoOn(bd, data.get(x, height, z))) + { + return; + } + + data.set(x, height+1+i, z, bd); + } + } + } + } +}