package net.minecraft.server; import java.util.Random; public abstract class WorldGenMegaTreeAbstract extends WorldGenTreeAbstract { protected final int a; protected final IBlockData b; protected final IBlockData c; protected int d; public WorldGenMegaTreeAbstract(boolean flag, int i, int j, IBlockData iblockdata, IBlockData iblockdata1) { super(flag); this.a = i; this.d = j; this.b = iblockdata; this.c = iblockdata1; } protected int a(Random random) { int i = random.nextInt(3) + this.a; if (this.d > 1) { i += random.nextInt(this.d); } return i; } private boolean c(World world, BlockPosition blockposition, int i) { boolean flag = true; if (blockposition.getY() >= 1 && blockposition.getY() + i + 1 <= 256) { for (int j = 0; j <= 1 + i; ++j) { byte b0 = 2; if (j == 0) { b0 = 1; } else if (j >= 1 + i - 2) { b0 = 2; } for (int k = -b0; k <= b0 && flag; ++k) { for (int l = -b0; l <= b0 && flag; ++l) { if (blockposition.getY() + j < 0 || blockposition.getY() + j >= 256 || (!this.a(world.getType(blockposition.a(k, j, l)).getBlock()) && world.getType(blockposition.a(k, j, l)).getBlock() != Blocks.SAPLING)) { // CraftBukkit - ignore our own saplings flag = false; } } } } return flag; } else { return false; } } private boolean a(BlockPosition blockposition, World world) { BlockPosition blockposition1 = blockposition.down(); Block block = world.getType(blockposition1).getBlock(); if ((block == Blocks.GRASS || block == Blocks.DIRT) && blockposition.getY() >= 2) { this.a(world, blockposition1); this.a(world, blockposition1.east()); this.a(world, blockposition1.south()); this.a(world, blockposition1.south().east()); return true; } else { return false; } } protected boolean a(World world, Random random, BlockPosition blockposition, int i) { return this.c(world, blockposition, i) && this.a(blockposition, world); } protected void a(World world, BlockPosition blockposition, int i) { int j = i * i; for (int k = -i; k <= i + 1; ++k) { for (int l = -i; l <= i + 1; ++l) { int i1 = k - 1; int j1 = l - 1; if (k * k + l * l <= j || i1 * i1 + j1 * j1 <= j || k * k + j1 * j1 <= j || i1 * i1 + l * l <= j) { BlockPosition blockposition1 = blockposition.a(k, 0, l); Material material = world.getType(blockposition1).getMaterial(); if (material == Material.AIR || material == Material.LEAVES) { this.a(world, blockposition1, this.c); } } } } } protected void b(World world, BlockPosition blockposition, int i) { int j = i * i; for (int k = -i; k <= i; ++k) { for (int l = -i; l <= i; ++l) { if (k * k + l * l <= j) { BlockPosition blockposition1 = blockposition.a(k, 0, l); Material material = world.getType(blockposition1).getMaterial(); if (material == Material.AIR || material == Material.LEAVES) { this.a(world, blockposition1, this.c); } } } } } }