package net.glowstone.generator.decorators.overworld; import net.glowstone.generator.decorators.BlockDecorator; import net.glowstone.generator.objects.BlockPatch; import org.bukkit.Chunk; import org.bukkit.Material; import org.bukkit.World; import java.util.Random; public class UnderwaterDecorator extends BlockDecorator { private final Material type; private int hRadius; private int vRadius; private Material[] overridables; public UnderwaterDecorator(Material type) { this.type = type; } public final UnderwaterDecorator setRadiuses(int hRadius, int vRadius) { this.hRadius = hRadius; this.vRadius = vRadius; return this; } public final UnderwaterDecorator setOverridableBlocks(Material... overridables) { this.overridables = overridables; return this; } @Override public void decorate(World world, Random random, Chunk source) { int sourceX = (source.getX() << 4) + random.nextInt(16); int sourceZ = (source.getZ() << 4) + random.nextInt(16); int sourceY = world.getHighestBlockYAt(sourceX, sourceZ) - 1; while (world.getBlockAt(sourceX, sourceY - 1, sourceZ).getType() == Material.STATIONARY_WATER || world.getBlockAt(sourceX, sourceY - 1, sourceZ).getType() == Material.WATER && sourceY > 1) { sourceY--; } final Material material = world.getBlockAt(sourceX, sourceY, sourceZ).getType(); if (material == Material.STATIONARY_WATER || material == Material.WATER) { new BlockPatch(type, hRadius, vRadius, overridables).generate(world, random, sourceX, sourceY, sourceZ); } } }