package net.glowstone.generator.decorators.nether; import net.glowstone.generator.decorators.BlockDecorator; import org.bukkit.Chunk; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.BlockState; import java.util.Random; public class GlowstoneDecorator extends BlockDecorator { private static final BlockFace[] SIDES = new BlockFace[] {BlockFace.EAST, BlockFace.WEST, BlockFace.DOWN, BlockFace.UP, BlockFace.SOUTH, BlockFace.NORTH}; private boolean variableAmount; public GlowstoneDecorator() { this(false); } public GlowstoneDecorator(boolean variableAmount) { this.variableAmount = variableAmount; } @Override public void decorate(World world, Random random, Chunk source) { int amount = variableAmount ? 1 + random.nextInt(1 + random.nextInt(10)) : 10; for (int i = 0; i < amount; i++) { int sourceX = (source.getX() << 4) + random.nextInt(16); int sourceZ = (source.getZ() << 4) + random.nextInt(16); int sourceY = 4 + random.nextInt(120); Block block = world.getBlockAt(sourceX, sourceY, sourceZ); if (block.isEmpty() && block.getRelative(BlockFace.UP).getType() == Material.NETHERRACK) { BlockState state = block.getState(); state.setType(Material.GLOWSTONE); state.update(true); for (int j = 0; j < 1500; j++) { int x = sourceX + random.nextInt(8) - random.nextInt(8); int z = sourceZ + random.nextInt(8) - random.nextInt(8); int y = sourceY - random.nextInt(12); block = world.getBlockAt(x, y, z); if (block.isEmpty()) { int glowstoneBlockCount = 0; for (BlockFace face : SIDES) { if (block.getRelative(face).getType() == Material.GLOWSTONE) { glowstoneBlockCount++; } } if (glowstoneBlockCount == 1) { state = block.getState(); state.setType(Material.GLOWSTONE); state.update(true); } } } } } } }