All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.minecraft.server.EntityBlaze Maven / Gradle / Ivy

The newest version!
package net.minecraft.server;

import org.bukkit.entity.Blaze;
import org.jetbrains.annotations.NotNull;

public class EntityBlaze extends EntityMonster {

  private float a = 0.5F;
  private int b;

  public EntityBlaze(World world) {
    super(world);
    this.fireProof = true;
    this.b_ = 10;
    this.goalSelector.a(4, new PathfinderGoalBlazeFireball(this));
    this.goalSelector.a(5, new PathfinderGoalMoveTowardsRestriction(this, 1.0D));
    this.goalSelector.a(7, new PathfinderGoalRandomStroll(this, 1.0D));
    this.goalSelector.a(8, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 8.0F));
    this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this));
    this.targetSelector.a(1, new PathfinderGoalHurtByTarget(this, true));
    this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget(this, EntityHuman.class, true));
  }

  protected void initAttributes() {
    super.initAttributes();
    this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(6.0D);
    this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(0.23000000417232513D);
    this.getAttributeInstance(GenericAttributes.FOLLOW_RANGE).setValue(48.0D);
  }

  @NotNull
  @Override
  public Blaze getEntity() {
    return (Blaze) super.getEntity();
  }

  protected void h() {
    super.h();
    this.datawatcher.a(16, (byte) 0);
  }

  protected String z() {
    return "mob.blaze.breathe";
  }

  protected String bo() {
    return "mob.blaze.hit";
  }

  protected String bp() {
    return "mob.blaze.death";
  }

  public float c(float f) {
    return 1.0F;
  }

  public void m() {
    if (!this.onGround && this.motY < 0.0D) {
      this.motY *= 0.6D;
    }

    if (this.world.isClientSide) {
      if (this.random.nextInt(24) == 0 && !this.R()) {
        this.world.a(this.locX + 0.5D, this.locY + 0.5D, this.locZ + 0.5D, "fire.fire", 1.0F + this.random.nextFloat(), this.random.nextFloat() * 0.7F + 0.3F, false);
      }

      for (int i = 0; i < 2; ++i) {
        this.world.addParticle(EnumParticle.SMOKE_LARGE, this.locX + (this.random.nextDouble() - 0.5D) * (double) this.width, this.locY + this.random.nextDouble() * (double) this.length, this.locZ + (this.random.nextDouble() - 0.5D) * (double) this.width, 0.0D, 0.0D, 0.0D);
      }
    }

    super.m();
  }

  protected void E() {
    if (this.U()) {
      this.damageEntity(DamageSource.DROWN, 1.0F);
    }

    --this.b;
    if (this.b <= 0) {
      this.b = 100;
      this.a = 0.5F + (float) this.random.nextGaussian() * 3.0F;
    }

    EntityLiving entityliving = this.getGoalTarget();

    if (entityliving != null && entityliving.locY + (double) entityliving.getHeadHeight() > this.locY + (double) this.getHeadHeight() + (double) this.a) {
      this.motY += (0.30000001192092896D - this.motY) * 0.30000001192092896D;
      this.ai = true;
    }

    super.E();
  }

  public void e(float f, float f1) {
  }

  protected Item getLoot() {
    return Items.BLAZE_ROD;
  }

  public boolean isBurning() {
    return this.n();
  }

  protected void dropDeathLoot(boolean flag, int i) {
    if (flag) {
      int j = this.random.nextInt(2 + i);

      for (int k = 0; k < j; ++k) {
        this.a(Items.BLAZE_ROD, 1);
      }
    }

  }

  public boolean n() {
    return (this.datawatcher.getByte(16) & 1) != 0;
  }

  public void a(boolean flag) {
    byte b0 = this.datawatcher.getByte(16);

    if (flag) {
      b0 = (byte) (b0 | 1);
    } else {
      b0 &= -2;
    }

    this.datawatcher.watch(16, Byte.valueOf(b0));
  }

  protected boolean n_() {
    return true;
  }

  static class PathfinderGoalBlazeFireball extends PathfinderGoal {

    private final EntityBlaze a;
    private int b;
    private int c;

    public PathfinderGoalBlazeFireball(EntityBlaze entityblaze) {
      this.a = entityblaze;
      this.a(3);
    }

    public boolean a() {
      EntityLiving entityliving = this.a.getGoalTarget();

      return entityliving != null && entityliving.isAlive();
    }

    public void c() {
      this.b = 0;
    }

    public void d() {
      this.a.a(false);
    }

    public void e() {
      --this.c;
      EntityLiving entityliving = this.a.getGoalTarget();
      double d0 = this.a.h(entityliving);

      if (d0 < 4.0D) {
        if (this.c <= 0) {
          this.c = 20;
          this.a.r(entityliving);
        }

        this.a.getControllerMove().a(entityliving.locX, entityliving.locY, entityliving.locZ, 1.0D);
      } else if (d0 < 256.0D) {
        double d1 = entityliving.locX - this.a.locX;
        double d2 = entityliving.getBoundingBox().b + (double) (entityliving.length / 2.0F) - (this.a.locY + (double) (this.a.length / 2.0F));
        double d3 = entityliving.locZ - this.a.locZ;

        if (this.c <= 0) {
          ++this.b;
          if (this.b == 1) {
            this.c = 60;
            this.a.a(true);
          } else if (this.b <= 4) {
            this.c = 6;
          } else {
            this.c = 100;
            this.b = 0;
            this.a.a(false);
          }

          if (this.b > 1) {
            float f = MathHelper.c(MathHelper.sqrt(d0)) * 0.5F;

            this.a.world.a(null, 1009, new BlockPosition((int) this.a.locX, (int) this.a.locY, (int) this.a.locZ), 0);

            for (int i = 0; i < 1; ++i) {
              EntitySmallFireball entitysmallfireball = new EntitySmallFireball(this.a.world, this.a, d1 + this.a.bc().nextGaussian() * (double) f, d2, d3 + this.a.bc().nextGaussian() * (double) f);

              entitysmallfireball.locY = this.a.locY + (double) (this.a.length / 2.0F) + 0.5D;
              this.a.world.addEntity(entitysmallfireball);
            }
          }
        }

        this.a.getControllerLook().a(entityliving, 10.0F, 10.0F);
      } else {
        this.a.getNavigation().n();
        this.a.getControllerMove().a(entityliving.locX, entityliving.locY, entityliving.locZ, 1.0D);
      }

      super.e();
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy