mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-19 02:36:59 +00:00
New decorator implementations!
This commit is contained in:
parent
c8e2bcd6e4
commit
12e7c51c39
@ -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<BlockData> 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()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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<BlockData> 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()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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<BlockData> 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()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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<BlockData> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user