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