package net.glowstone.generator.populators; import net.glowstone.generator.TreeGenerator; import org.bukkit.Chunk; import org.bukkit.Material; import org.bukkit.TreeType; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.generator.BlockPopulator; import java.util.Random; /** * BlockPopulator that adds trees based on the biome. */ public class TreePopulator extends BlockPopulator { @Override public void populate(World world, Random random, Chunk source) { int centerX = (source.getX() << 4) + random.nextInt(16); int centerZ = (source.getZ() << 4) + random.nextInt(16); TreeType type = TreeType.TREE; int chance = 0; int multiplier = 1; if (random.nextBoolean()) { type = TreeType.BIRCH; } switch (world.getBlockAt(centerX, 0, centerZ).getBiome()) { case OCEAN: // workaround for lack of biome generation case FOREST: chance = 160; multiplier = 10; break; case PLAINS: chance = 40; break; case SAVANNA: chance = 20; type = TreeType.ACACIA; break; case SWAMPLAND: chance = 120; type = TreeType.SWAMP; break; case TAIGA: chance = 120; multiplier = 3; type = TreeType.REDWOOD; break; case SKY: chance = 1; break; case DESERT: case HELL: return; } final TreeGenerator generator = new TreeGenerator(); for (int i = 0; i < multiplier; i++) { centerX = (source.getX() << 4) + random.nextInt(16); centerZ = (source.getZ() << 4) + random.nextInt(16); if (random.nextInt(300) < chance) { int centerY = world.getHighestBlockYAt(centerX, centerZ) - 1; Block sourceBlock = world.getBlockAt(centerX, centerY, centerZ); if (sourceBlock.getType() == Material.GRASS) { generator.generate(random, sourceBlock.getLocation().add(0, 1, 0), type); } } } } }