@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;
  }
示例#2
0
  /** 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;
    }
  }