package net.minecraft.world.gen.feature;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.init.Blocks;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class WorldGenIceSpike extends WorldGenerator
{
private static final String __OBFID = "CL_00000417";
public boolean generate(World p_76484_1_, Random p_76484_2_, int p_76484_3_, int p_76484_4_, int p_76484_5_)
{
while (p_76484_1_.isAirBlock(p_76484_3_, p_76484_4_, p_76484_5_) && p_76484_4_ > 2)
{
--p_76484_4_;
}
if (p_76484_1_.getBlock(p_76484_3_, p_76484_4_, p_76484_5_) != Blocks.snow)
{
return false;
}
else
{
p_76484_4_ += p_76484_2_.nextInt(4);
int l = p_76484_2_.nextInt(4) + 7;
int i1 = l / 4 + p_76484_2_.nextInt(2);
if (i1 > 1 && p_76484_2_.nextInt(60) == 0)
{
p_76484_4_ += 10 + p_76484_2_.nextInt(30);
}
int j1;
int k1;
int l1;
for (j1 = 0; j1 < l; ++j1)
{
float f = (1.0F - (float)j1 / (float)l) * (float)i1;
k1 = MathHelper.ceiling_float_int(f);
for (l1 = -k1; l1 <= k1; ++l1)
{
float f1 = (float)MathHelper.abs_int(l1) - 0.25F;
for (int i2 = -k1; i2 <= k1; ++i2)
{
float f2 = (float)MathHelper.abs_int(i2) - 0.25F;
if ((l1 == 0 && i2 == 0 || f1 * f1 + f2 * f2 <= f * f) && (l1 != -k1 && l1 != k1 && i2 != -k1 && i2 != k1 || p_76484_2_.nextFloat() <= 0.75F))
{
Block block = p_76484_1_.getBlock(p_76484_3_ + l1, p_76484_4_ + j1, p_76484_5_ + i2);
if (block.getMaterial() == Material.air || block == Blocks.dirt || block == Blocks.snow || block == Blocks.ice)
{
this.func_150515_a(p_76484_1_, p_76484_3_ + l1, p_76484_4_ + j1, p_76484_5_ + i2, Blocks.packed_ice);
}
if (j1 != 0 && k1 > 1)
{
block = p_76484_1_.getBlock(p_76484_3_ + l1, p_76484_4_ - j1, p_76484_5_ + i2);
if (block.getMaterial() == Material.air || block == Blocks.dirt || block == Blocks.snow || block == Blocks.ice)
{
this.func_150515_a(p_76484_1_, p_76484_3_ + l1, p_76484_4_ - j1, p_76484_5_ + i2, Blocks.packed_ice);
}
}
}
}
}
}
j1 = i1 - 1;
if (j1 < 0)
{
j1 = 0;
}
else if (j1 > 1)
{
j1 = 1;
}
for (int j2 = -j1; j2 <= j1; ++j2)
{
k1 = -j1;
while (k1 <= j1)
{
l1 = p_76484_4_ - 1;
int k2 = 50;
if (Math.abs(j2) == 1 && Math.abs(k1) == 1)
{
k2 = p_76484_2_.nextInt(5);
}
while (true)
{
if (l1 > 50)
{
Block block1 = p_76484_1_.getBlock(p_76484_3_ + j2, l1, p_76484_5_ + k1);
if (block1.getMaterial() == Material.air || block1 == Blocks.dirt || block1 == Blocks.snow || block1 == Blocks.ice || block1 == Blocks.packed_ice)
{
this.func_150515_a(p_76484_1_, p_76484_3_ + j2, l1, p_76484_5_ + k1, Blocks.packed_ice);
--l1;
--k2;
if (k2 <= 0)
{
l1 -= p_76484_2_.nextInt(5) + 1;
k2 = p_76484_2_.nextInt(5);
}
continue;
}
}
++k1;
break;
}
}
}
return true;
}
}
}