@Override
  public boolean shouldExecute() {
    if (this.getEntityHandle() == null) return false;

    EntityLiving entityTarget = NMSUtil.getGoalTarget(this.getEntityHandle());

    if (entityTarget == null) return false;
    else if (this.m_toAttack != null && !this.m_toAttack.isAssignableFrom(entityTarget.getClass()))
      return false;
    else {
      this.m_target = entityTarget;
      this.m_path = this.getNavigation().a(this.m_target);
      return this.m_path != null;
    }
  }
  @Override
  public boolean canContinue() {
    EntityLiving entityTarget = NMSUtil.getGoalTarget(this.getEntityHandle());
    EntityLiving entity = this.getEntityHandle();
    if (entityTarget == null) return false;

    if (!this.m_target.isAlive()) return false;

    if (!this.m_ignoreSight) return !this.getNavigation().g();
    else
      return NMSUtil.isInHomeArea(
          entity,
          MathHelper.floor(this.m_target.locX),
          MathHelper.floor(this.m_target.locY),
          MathHelper.floor(this.m_target.locZ));
  }