示例#1
0
  private static boolean func_72292_n(
      World p_72292_0_, int p_72292_1_, int p_72292_2_, int p_72292_3_) {
    for (Iterator iterator =
            p_72292_0_
                .func_72872_a(
                    net.minecraft.src.EntityOcelot.class,
                    AxisAlignedBB.func_72332_a()
                        .func_72299_a(
                            p_72292_1_,
                            p_72292_2_ + 1,
                            p_72292_3_,
                            p_72292_1_ + 1,
                            p_72292_2_ + 2,
                            p_72292_3_ + 1))
                .iterator();
        iterator.hasNext(); ) {
      EntityOcelot entityocelot = (EntityOcelot) iterator.next();
      EntityOcelot entityocelot1 = (EntityOcelot) entityocelot;
      if (entityocelot1.func_70906_o()) {
        return true;
      }
    }

    return false;
  }
 protected void alertWolves(EntityLiving entityliving, boolean flag) {
   if ((entityliving instanceof EntityCreeper) || (entityliving instanceof EntityGhast)) {
     return;
   }
   if (entityliving instanceof EntityWolf) {
     EntityWolf entitywolf = (EntityWolf) entityliving;
     if (entitywolf.isTamed() && username.equals(entitywolf.getOwner())) {
       return;
     }
   }
   if ((entityliving instanceof EntityPlayer) && !isPVPEnabled()) {
     return;
   }
   List list =
       worldObj.getEntitiesWithinAABB(
           net.minecraft.src.EntityWolf.class,
           AxisAlignedBB.getBoundingBoxFromPool(
                   posX, posY, posZ, posX + 1.0D, posY + 1.0D, posZ + 1.0D)
               .expand(16D, 4D, 16D));
   Iterator iterator = list.iterator();
   do {
     if (!iterator.hasNext()) {
       break;
     }
     Entity entity = (Entity) iterator.next();
     EntityWolf entitywolf1 = (EntityWolf) entity;
     if (entitywolf1.isTamed()
         && entitywolf1.getEntityToAttack() == null
         && username.equals(entitywolf1.getOwner())
         && (!flag || !entitywolf1.isSitting())) {
       entitywolf1.setIsSitting(false);
       entitywolf1.setEntityToAttack(entityliving);
     }
   } while (true);
 }
 public void func_1197_a(int i, int j, int k) {
   if (i == field_1761_c && j == field_1760_d && k == field_1759_e) {
     return;
   } else {
     func_1195_b();
     field_1761_c = i;
     field_1760_d = j;
     field_1759_e = k;
     field_1746_q = i + field_1758_f / 2;
     field_1743_r = j + field_1757_g / 2;
     field_1741_s = k + field_1756_h / 2;
     field_1752_l = i & 0x3ff;
     field_1751_m = j;
     field_1750_n = k & 0x3ff;
     field_1755_i = i - field_1752_l;
     field_1754_j = j - field_1751_m;
     field_1753_k = k - field_1750_n;
     float f = 6F;
     field_1736_v =
         AxisAlignedBB.func_1168_a(
             (float) i - f,
             (float) j - f,
             (float) k - f,
             (float) (i + field_1758_f) + f,
             (float) (j + field_1757_g) + f,
             (float) (k + field_1756_h) + f);
     GL11.glNewList(field_1744_C + 2, 4864);
     RenderItem.func_142_a(
         AxisAlignedBB.func_1161_b(
             (float) field_1752_l - f,
             (float) field_1751_m - f,
             (float) field_1750_n - f,
             (float) (field_1752_l + field_1758_f) + f,
             (float) (field_1751_m + field_1757_g) + f,
             (float) (field_1750_n + field_1756_h) + f));
     GL11.glEndList();
     func_1194_f();
     return;
   }
 }
  @Override
  public AxisAlignedBB getSelectedBoundingBoxFromPool(
      World par1World, int par2, int par3, int par4) {
    int i = par1World.getBlockMetadata(par2, par3, par4);
    float f = 0.375F;

    setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, f, 1.0F);
    if (i == 0) {
      setBlockBounds(0.0F, 1.0F - f, 0.0F, 1.0F, 1.0F, 1.0F);
    }

    if (i == 1) {
      setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, f, 1.0F);
    }

    if (i == 2) {
      setBlockBounds(0.0F, 0.0F, 1.0F - f, 1.0F, 1.0F, 1.0F);
    }

    if (i == 3) {
      setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, f);
    }

    if (i == 4) {
      setBlockBounds(1.0F - f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
    }

    if (i == 5) {
      setBlockBounds(0.0F, 0.0F, 0.0F, f, 1.0F, 1.0F);
    }
    AxisAlignedBB box =
        AxisAlignedBB.getAABBPool()
            .getAABB(
                par2 + this.minX,
                par3 + this.minY,
                par4 + this.minZ,
                par2 + this.maxX,
                par3 + this.maxY,
                par4 + this.maxZ);
    setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.375F);
    return box;
  }
  public void func_70071_h_() {
    if (!field_70170_p.field_72995_K
        && (field_70235_a != null && field_70235_a.field_70128_L
            || !field_70170_p.func_72899_e(
                (int) field_70165_t, (int) field_70163_u, (int) field_70161_v))) {
      func_70106_y();
      return;
    }
    super.func_70071_h_();
    func_70015_d(1);
    if (field_70238_i) {
      int i = field_70170_p.func_72798_a(field_70231_e, field_70228_f, field_70229_g);
      if (i == field_70237_h) {
        field_70236_j++;
        if (field_70236_j == 600) {
          func_70106_y();
        }
        return;
      }
      field_70238_i = false;
      field_70159_w *= field_70146_Z.nextFloat() * 0.2F;
      field_70181_x *= field_70146_Z.nextFloat() * 0.2F;
      field_70179_y *= field_70146_Z.nextFloat() * 0.2F;
      field_70236_j = 0;
      field_70234_an = 0;
    } else {
      field_70234_an++;
    }
    Vec3 vec3 = Vec3.func_72437_a().func_72345_a(field_70165_t, field_70163_u, field_70161_v);
    Vec3 vec3_1 =
        Vec3.func_72437_a()
            .func_72345_a(
                field_70165_t + field_70159_w,
                field_70163_u + field_70181_x,
                field_70161_v + field_70179_y);
    MovingObjectPosition movingobjectposition = field_70170_p.func_72933_a(vec3, vec3_1);
    vec3 = Vec3.func_72437_a().func_72345_a(field_70165_t, field_70163_u, field_70161_v);
    vec3_1 =
        Vec3.func_72437_a()
            .func_72345_a(
                field_70165_t + field_70159_w,
                field_70163_u + field_70181_x,
                field_70161_v + field_70179_y);
    if (movingobjectposition != null) {
      vec3_1 =
          Vec3.func_72437_a()
              .func_72345_a(
                  movingobjectposition.field_72307_f.field_72450_a,
                  movingobjectposition.field_72307_f.field_72448_b,
                  movingobjectposition.field_72307_f.field_72449_c);
    }
    Entity entity = null;
    List list =
        field_70170_p.func_72839_b(
            this,
            field_70121_D
                .func_72321_a(field_70159_w, field_70181_x, field_70179_y)
                .func_72314_b(1.0D, 1.0D, 1.0D));
    double d = 0.0D;
    Iterator iterator = list.iterator();
    do {
      if (!iterator.hasNext()) {
        break;
      }
      Entity entity1 = (Entity) iterator.next();
      if (entity1.func_70067_L()
          && (!entity1.func_70028_i(field_70235_a) || field_70234_an >= 25)) {
        float f2 = 0.3F;
        AxisAlignedBB axisalignedbb = entity1.field_70121_D.func_72314_b(f2, f2, f2);
        MovingObjectPosition movingobjectposition1 = axisalignedbb.func_72327_a(vec3, vec3_1);
        if (movingobjectposition1 != null) {
          double d1 = vec3.func_72438_d(movingobjectposition1.field_72307_f);
          if (d1 < d || d == 0.0D) {
            entity = entity1;
            d = d1;
          }
        }
      }
    } while (true);
    if (entity != null) {
      movingobjectposition = new MovingObjectPosition(entity);
    }
    if (movingobjectposition != null) {
      func_70227_a(movingobjectposition);
    }
    field_70165_t += field_70159_w;
    field_70163_u += field_70181_x;
    field_70161_v += field_70179_y;
    float f =
        MathHelper.func_76133_a(field_70159_w * field_70159_w + field_70179_y * field_70179_y);
    field_70177_z =
        (float) ((Math.atan2(field_70159_w, field_70179_y) * 180D) / 3.1415927410125732D);
    for (field_70125_A = (float) ((Math.atan2(field_70181_x, f) * 180D) / 3.1415927410125732D);
        field_70125_A - field_70127_C < -180F;
        field_70127_C -= 360F) {}
    for (; field_70125_A - field_70127_C >= 180F; field_70127_C += 360F) {}
    for (; field_70177_z - field_70126_B < -180F; field_70126_B -= 360F) {}
    for (; field_70177_z - field_70126_B >= 180F; field_70126_B += 360F) {}
    field_70125_A = field_70127_C + (field_70125_A - field_70127_C) * 0.2F;
    field_70177_z = field_70126_B + (field_70177_z - field_70126_B) * 0.2F;
    float f1 = 0.95F;
    if (func_70090_H()) {
      for (int j = 0; j < 4; j++) {
        float f3 = 0.25F;
        field_70170_p.func_72869_a(
            "bubble",
            field_70165_t - field_70159_w * (double) f3,
            field_70163_u - field_70181_x * (double) f3,
            field_70161_v - field_70179_y * (double) f3,
            field_70159_w,
            field_70181_x,
            field_70179_y);
      }

      f1 = 0.8F;
    }
    field_70159_w += field_70232_b;
    field_70181_x += field_70233_c;
    field_70179_y += field_70230_d;
    field_70159_w *= f1;
    field_70181_x *= f1;
    field_70179_y *= f1;
    field_70170_p.func_72869_a(
        "smoke", field_70165_t, field_70163_u + 0.5D, field_70161_v, 0.0D, 0.0D, 0.0D);
    func_70107_b(field_70165_t, field_70163_u, field_70161_v);
  }
  /**
   * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses
   * this to count ticks and creates a new spawn inside its implementation.
   */
  public void updateEntity() {
    if (!anyPlayerInRange()) {
      return;
    }

    if (worldObj.isRemote) {
      double d = (float) xCoord + worldObj.rand.nextFloat();
      double d1 = (float) yCoord + worldObj.rand.nextFloat();
      double d3 = (float) zCoord + worldObj.rand.nextFloat();
      worldObj.spawnParticle("smoke", d, d1, d3, 0.0D, 0.0D, 0.0D);
      worldObj.spawnParticle("flame", d, d1, d3, 0.0D, 0.0D, 0.0D);
      yaw2 = yaw % 360D;
      yaw += 4.5454545021057129D;
    } else {
      if (delay == -1) {
        updateDelay();
      }

      if (delay > 0) {
        delay--;
        return;
      }

      for (int i = 0; i < field_70395_h; i++) {
        Entity entity = EntityList.createEntityByName(mobID, worldObj);

        if (entity == null) {
          return;
        }

        int j =
            worldObj
                .getEntitiesWithinAABB(
                    entity.getClass(),
                    AxisAlignedBB.getAABBPool()
                        .addOrModifyAABBInPool(
                            xCoord, yCoord, zCoord, xCoord + 1, yCoord + 1, zCoord + 1)
                        .expand(8D, 4D, 8D))
                .size();

        if (j >= 6) {
          updateDelay();
          return;
        }

        if (entity == null) {
          continue;
        }

        double d2 =
            (double) xCoord + (worldObj.rand.nextDouble() - worldObj.rand.nextDouble()) * 4D;
        double d4 = (yCoord + worldObj.rand.nextInt(3)) - 1;
        double d5 =
            (double) zCoord + (worldObj.rand.nextDouble() - worldObj.rand.nextDouble()) * 4D;
        EntityLiving entityliving = (entity instanceof EntityLiving) ? (EntityLiving) entity : null;
        entity.setLocationAndAngles(d2, d4, d5, worldObj.rand.nextFloat() * 360F, 0.0F);

        if (entityliving != null && !entityliving.getCanSpawnHere()) {
          continue;
        }

        func_70383_a(entity);
        worldObj.spawnEntityInWorld(entity);
        worldObj.playAuxSFX(2004, xCoord, yCoord, zCoord, 0);

        if (entityliving != null) {
          entityliving.spawnExplosionParticle();
        }

        updateDelay();
      }
    }

    super.updateEntity();
  }
  public EnumStatus sleepInBedAt(int i, int j, int k) {
    if (!worldObj.multiplayerWorld) {
      if (isPlayerSleeping() || !isEntityAlive()) {
        return EnumStatus.OTHER_PROBLEM;
      }
      if (worldObj.worldProvider.isAlternateDimension) {
        return EnumStatus.NOT_POSSIBLE_HERE;
      }
      if (worldObj.isDaytime()) {
        return EnumStatus.NOT_POSSIBLE_NOW;
      }
      if (Math.abs(posX - (double) i) > 3D
          || Math.abs(posY - (double) j) > 2D
          || Math.abs(posZ - (double) k) > 3D) {
        return EnumStatus.TOO_FAR_AWAY;
      }
      double d = 8D;
      double d1 = 5D;
      List list =
          worldObj.getEntitiesWithinAABB(
              net.minecraft.src.EntityMob.class,
              AxisAlignedBB.getBoundingBoxFromPool(
                  (double) i - d,
                  (double) j - d1,
                  (double) k - d,
                  (double) i + d,
                  (double) j + d1,
                  (double) k + d));
      if (!list.isEmpty()) {
        return EnumStatus.NOT_SAFE;
      }
    }
    setSize(0.2F, 0.2F);
    yOffset = 0.2F;
    if (worldObj.blockExists(i, j, k)) {
      int l = worldObj.getBlockMetadata(i, j, k);
      int i1 = BlockBed.getDirectionFromMetadata(l);
      float f = 0.5F;
      float f1 = 0.5F;
      switch (i1) {
        case 0:
          f1 = 0.9F;
          break;

        case 2:
          f1 = 0.1F;
          break;

        case 1:
          f = 0.1F;
          break;

        case 3:
          f = 0.9F;
          break;
      }
      func_22052_e(i1);
      setPosition((float) i + f, (float) j + 0.9375F, (float) k + f1);
    } else {
      setPosition((float) i + 0.5F, (float) j + 0.9375F, (float) k + 0.5F);
    }
    sleeping = true;
    sleepTimer = 0;
    bedChunkCoordinates = new ChunkCoordinates(i, j, k);
    motionX = motionZ = motionY = 0.0D;
    if (!worldObj.multiplayerWorld) {
      worldObj.updateAllPlayersSleepingFlag();
    }
    return EnumStatus.OK;
  }
示例#8
0
  public void func_77278_a() {
    float f = field_77280_f;
    HashSet hashset = new HashSet();
    for (int i = 0; i < field_77289_h; i++) {
      for (int k = 0; k < field_77289_h; k++) {
        label0:
        for (int i1 = 0; i1 < field_77289_h; i1++) {
          if (i != 0
              && i != field_77289_h - 1
              && k != 0
              && k != field_77289_h - 1
              && i1 != 0
              && i1 != field_77289_h - 1) {
            continue;
          }
          double d = ((float) i / ((float) field_77289_h - 1.0F)) * 2.0F - 1.0F;
          double d1 = ((float) k / ((float) field_77289_h - 1.0F)) * 2.0F - 1.0F;
          double d2 = ((float) i1 / ((float) field_77289_h - 1.0F)) * 2.0F - 1.0F;
          double d3 = Math.sqrt(d * d + d1 * d1 + d2 * d2);
          d /= d3;
          d1 /= d3;
          d2 /= d3;
          float f1 = field_77280_f * (0.7F + field_77287_j.field_73012_v.nextFloat() * 0.6F);
          double d5 = field_77284_b;
          double d7 = field_77285_c;
          double d9 = field_77282_d;
          float f2 = 0.3F;
          do {
            if (f1 <= 0.0F) {
              continue label0;
            }
            int k2 = MathHelper.func_76128_c(d5);
            int l2 = MathHelper.func_76128_c(d7);
            int i3 = MathHelper.func_76128_c(d9);
            int j3 = field_77287_j.func_72798_a(k2, l2, i3);
            if (j3 > 0) {
              f1 -= (Block.field_71973_m[j3].func_71904_a(field_77283_e) + 0.3F) * f2;
            }
            if (f1 > 0.0F) {
              hashset.add(new ChunkPosition(k2, l2, i3));
            }
            d5 += d * (double) f2;
            d7 += d1 * (double) f2;
            d9 += d2 * (double) f2;
            f1 -= f2 * 0.75F;
          } while (true);
        }
      }
    }

    field_77281_g.addAll(hashset);
    field_77280_f *= 2.0F;
    int j = MathHelper.func_76128_c(field_77284_b - (double) field_77280_f - 1.0D);
    int l = MathHelper.func_76128_c(field_77284_b + (double) field_77280_f + 1.0D);
    int j1 = MathHelper.func_76128_c(field_77285_c - (double) field_77280_f - 1.0D);
    int k1 = MathHelper.func_76128_c(field_77285_c + (double) field_77280_f + 1.0D);
    int l1 = MathHelper.func_76128_c(field_77282_d - (double) field_77280_f - 1.0D);
    int i2 = MathHelper.func_76128_c(field_77282_d + (double) field_77280_f + 1.0D);
    List list =
        field_77287_j.func_72839_b(
            field_77283_e, AxisAlignedBB.func_72332_a().func_72299_a(j, j1, l1, l, k1, i2));
    Vec3 vec3 = Vec3.func_72437_a().func_72345_a(field_77284_b, field_77285_c, field_77282_d);
    for (int j2 = 0; j2 < list.size(); j2++) {
      Entity entity = (Entity) list.get(j2);
      double d4 =
          entity.func_70011_f(field_77284_b, field_77285_c, field_77282_d) / (double) field_77280_f;
      if (d4 > 1.0D) {
        continue;
      }
      double d6 = entity.field_70165_t - field_77284_b;
      double d8 = (entity.field_70163_u + (double) entity.func_70047_e()) - field_77285_c;
      double d10 = entity.field_70161_v - field_77282_d;
      double d11 = MathHelper.func_76133_a(d6 * d6 + d8 * d8 + d10 * d10);
      if (d11 == 0.0D) {
        continue;
      }
      d6 /= d11;
      d8 /= d11;
      d10 /= d11;
      double d12 = field_77287_j.func_72842_a(vec3, entity.field_70121_D);
      double d13 = (1.0D - d4) * d12;
      entity.func_70097_a(
          DamageSource.field_76378_k,
          (int) (((d13 * d13 + d13) / 2D) * 8D * (double) field_77280_f + 1.0D));
      entity.field_70159_w += d6 * d13;
      entity.field_70181_x += d8 * d13;
      entity.field_70179_y += d10 * d13;
      if (entity instanceof EntityPlayer) {
        field_77288_k.put(
            (EntityPlayer) entity, Vec3.func_72437_a().func_72345_a(d6 * d13, d8 * d13, d10 * d13));
      }
    }

    field_77280_f = f;
  }
  public void doExplosion() {
    float f = explosionSize;
    int i = 16;
    for (int j = 0; j < i; j++) {
      for (int l = 0; l < i; l++) {
        label0:
        for (int j1 = 0; j1 < i; j1++) {
          if (j != 0 && j != i - 1 && l != 0 && l != i - 1 && j1 != 0 && j1 != i - 1) {
            continue;
          }
          double d = ((float) j / ((float) i - 1.0F)) * 2.0F - 1.0F;
          double d1 = ((float) l / ((float) i - 1.0F)) * 2.0F - 1.0F;
          double d2 = ((float) j1 / ((float) i - 1.0F)) * 2.0F - 1.0F;
          double d3 = Math.sqrt(d * d + d1 * d1 + d2 * d2);
          d /= d3;
          d1 /= d3;
          d2 /= d3;
          float f1 = explosionSize * (0.7F + worldObj.rand.nextFloat() * 0.6F);
          double d5 = explosionX;
          double d7 = explosionY;
          double d9 = explosionZ;
          float f2 = 0.3F;
          do {
            if (f1 <= 0.0F) {
              continue label0;
            }
            int j4 = MathHelper.floor_double(d5);
            int k4 = MathHelper.floor_double(d7);
            int l4 = MathHelper.floor_double(d9);
            int i5 = worldObj.getBlockId(j4, k4, l4);
            if (i5 > 0) {
              f1 -= (Block.blocksList[i5].getExplosionResistance(exploder) + 0.3F) * f2;
            }
            if (f1 > 0.0F) {
              destroyedBlockPositions.add(new ChunkPosition(j4, k4, l4));
            }
            d5 += d * (double) f2;
            d7 += d1 * (double) f2;
            d9 += d2 * (double) f2;
            f1 -= f2 * 0.75F;
          } while (true);
        }
      }
    }

    explosionSize *= 2.0F;
    int k = MathHelper.floor_double(explosionX - (double) explosionSize - 1.0D);
    int i1 = MathHelper.floor_double(explosionX + (double) explosionSize + 1.0D);
    int k1 = MathHelper.floor_double(explosionY - (double) explosionSize - 1.0D);
    int l1 = MathHelper.floor_double(explosionY + (double) explosionSize + 1.0D);
    int i2 = MathHelper.floor_double(explosionZ - (double) explosionSize - 1.0D);
    int j2 = MathHelper.floor_double(explosionZ + (double) explosionSize + 1.0D);
    List list =
        worldObj.getEntitiesWithinAABBExcludingEntity(
            exploder, AxisAlignedBB.getBoundingBoxFromPool(k, k1, i2, i1, l1, j2));
    Vec3D vec3d = Vec3D.createVector(explosionX, explosionY, explosionZ);
    for (int k2 = 0; k2 < list.size(); k2++) {
      Entity entity = (Entity) list.get(k2);
      double d4 = entity.getDistance(explosionX, explosionY, explosionZ) / (double) explosionSize;
      if (d4 <= 1.0D) {
        double d6 = entity.posX - explosionX;
        double d8 = entity.posY - explosionY;
        double d10 = entity.posZ - explosionZ;
        double d11 = MathHelper.sqrt_double(d6 * d6 + d8 * d8 + d10 * d10);
        d6 /= d11;
        d8 /= d11;
        d10 /= d11;
        double d12 = worldObj.func_494_a(vec3d, entity.boundingBox);
        double d13 = (1.0D - d4) * d12;
        entity.attackEntityFrom(
            exploder, (int) (((d13 * d13 + d13) / 2D) * 8D * (double) explosionSize + 1.0D));
        double d14 = d13;
        entity.motionX += d6 * d14;
        entity.motionY += d8 * d14;
        entity.motionZ += d10 * d14;
      }
    }

    explosionSize = f;
    ArrayList arraylist = new ArrayList();
    arraylist.addAll(destroyedBlockPositions);
    if (isFlaming) {
      for (int l2 = arraylist.size() - 1; l2 >= 0; l2--) {
        ChunkPosition chunkposition = (ChunkPosition) arraylist.get(l2);
        int i3 = chunkposition.x;
        int j3 = chunkposition.y;
        int k3 = chunkposition.z;
        int l3 = worldObj.getBlockId(i3, j3, k3);
        int i4 = worldObj.getBlockId(i3, j3 - 1, k3);
        if (l3 == 0 && Block.opaqueCubeLookup[i4] && ExplosionRNG.nextInt(3) == 0) {
          worldObj.setBlockWithNotify(i3, j3, k3, Block.fire.blockID);
        }
      }
    }
  }