001 package net.minecraft.src;
002
003 import java.util.Random;
004
005 public class WorldGenSpikes extends WorldGenerator
006 {
007 /**
008 * The Block ID that the generator is allowed to replace while generating the terrain.
009 */
010 private int replaceID;
011
012 public WorldGenSpikes(int par1)
013 {
014 this.replaceID = par1;
015 }
016
017 public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
018 {
019 if (par1World.isAirBlock(par3, par4, par5) && par1World.getBlockId(par3, par4 - 1, par5) == this.replaceID)
020 {
021 int var6 = par2Random.nextInt(32) + 6;
022 int var7 = par2Random.nextInt(4) + 1;
023 int var8;
024 int var9;
025 int var10;
026 int var11;
027
028 for (var8 = par3 - var7; var8 <= par3 + var7; ++var8)
029 {
030 for (var9 = par5 - var7; var9 <= par5 + var7; ++var9)
031 {
032 var10 = var8 - par3;
033 var11 = var9 - par5;
034
035 if (var10 * var10 + var11 * var11 <= var7 * var7 + 1 && par1World.getBlockId(var8, par4 - 1, var9) != this.replaceID)
036 {
037 return false;
038 }
039 }
040 }
041
042 for (var8 = par4; var8 < par4 + var6 && var8 < 128; ++var8)
043 {
044 for (var9 = par3 - var7; var9 <= par3 + var7; ++var9)
045 {
046 for (var10 = par5 - var7; var10 <= par5 + var7; ++var10)
047 {
048 var11 = var9 - par3;
049 int var12 = var10 - par5;
050
051 if (var11 * var11 + var12 * var12 <= var7 * var7 + 1)
052 {
053 par1World.setBlockWithNotify(var9, var8, var10, Block.obsidian.blockID);
054 }
055 }
056 }
057 }
058
059 EntityEnderCrystal var13 = new EntityEnderCrystal(par1World);
060 var13.setLocationAndAngles((double)((float)par3 + 0.5F), (double)(par4 + var6), (double)((float)par5 + 0.5F), par2Random.nextFloat() * 360.0F, 0.0F);
061 par1World.spawnEntityInWorld(var13);
062 par1World.setBlockWithNotify(par3, par4 + var6, par5, Block.bedrock.blockID);
063 return true;
064 }
065 else
066 {
067 return false;
068 }
069 }
070 }