@Override public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5) { if (!par1World.isAirBlock(par3, par4, par5) || par1World.getBlockId(par3, par4 - 1, par5) != this.replaceID) { return false; } int i = par2Random.nextInt(32) + 6; int j = par2Random.nextInt(4) + 1; for (int k = par3 - j; k <= par3 + j; k++) { for (int i1 = par5 - j; i1 <= par5 + j; i1++) { int k1 = k - par3; int i2 = i1 - par5; if (k1 * k1 + i2 * i2 <= j * j + 1 && par1World.getBlockId(k, par4 - 1, i1) != this.replaceID) { return false; } } } for (int l = par4; l < par4 + i && l < 128; l++) { for (int j1 = par3 - j; j1 <= par3 + j; j1++) { for (int l1 = par5 - j; l1 <= par5 + j; l1++) { int j2 = j1 - par3; int k2 = l1 - par5; if (j2 * j2 + k2 * k2 <= j * j + 1) { par1World.setBlockWithNotify(j1, l, l1, Block.obsidian.blockID); } } } } EntityEnderCrystal entityendercrystal = new EntityEnderCrystal(par1World); entityendercrystal.setLocationAndAngles( par3 + 0.5F, par4 + i, par5 + 0.5F, par2Random.nextFloat() * 360F, 0.0F); par1World.spawnEntityInWorld(entityendercrystal); par1World.setBlockWithNotify(par3, par4 + i, par5, Block.bedrock.blockID); return true; }
/** Updates the state of the enderdragon's current endercrystal. */ private void updateDragonEnderCrystal() { if (this.healingEnderCrystal != null) { if (this.healingEnderCrystal.isDead) { if (!this.worldObj.isRemote) { this.attackEntityFromPart( this.dragonPartHead, DamageSource.setExplosionSource((Explosion) null), 10.0F); } this.healingEnderCrystal = null; } else if (this.ticksExisted % 10 == 0 && this.func_110143_aJ() < this.func_110138_aP()) { this.setEntityHealth(this.func_110143_aJ() + 1.0F); } } if (this.rand.nextInt(10) == 0) { float var1 = 32.0F; List var2 = this.worldObj.getEntitiesWithinAABB( EntityEnderCrystal.class, this.boundingBox.expand((double) var1, (double) var1, (double) var1)); EntityEnderCrystal var3 = null; double var4 = Double.MAX_VALUE; Iterator var6 = var2.iterator(); while (var6.hasNext()) { EntityEnderCrystal var7 = (EntityEnderCrystal) var6.next(); double var8 = var7.getDistanceSqToEntity(this); if (var8 < var4) { var4 = var8; var3 = var7; } } this.healingEnderCrystal = var3; } }