Program: 25399
Project: 25399
Buggy source:
public void b_(){
  super.b_();
  if (y == 0.0F && x == 0.0F) {
    float f1=MathHelper.a(s * s + u * u);
    x=v=(float)((Math.atan2(s,u) * 180D) / 3.1415927410125732D);
    y=w=(float)((Math.atan2(t,f1) * 180D) / 3.1415927410125732D);
  }
  if (a > 0) {
    a--;
  }
  if (ak) {
    int i=l.a(c,d,e);
    if (i != f) {
      ak=false;
      s*=W.nextFloat() * 0.2F;
      t*=W.nextFloat() * 0.2F;
      u*=W.nextFloat() * 0.2F;
      al=0;
      am=0;
    }
 else {
      al++;
      if (al == 1200) {
        q();
      }
      return;
    }
  }
 else {
    am++;
  }
  Vec3D vec3d=Vec3D.b(p,q,r);
  Vec3D vec3d1=Vec3D.b(p + s,q + t,r + u);
  MovingObjectPosition movingobjectposition=l.a(vec3d,vec3d1);
  vec3d=Vec3D.b(p,q,r);
  vec3d1=Vec3D.b(p + s,q + t,r + u);
  if (movingobjectposition != null) {
    vec3d1=Vec3D.b(movingobjectposition.f.a,movingobjectposition.f.b,movingobjectposition.f.c);
  }
  Entity entity=null;
  List list=l.b(((Entity)(this)),z.a(s,t,u).b(1.0D,1.0D,1.0D));
  double d1=0.0D;
  for (int j=0; j < list.size(); j++) {
    Entity entity1=(Entity)list.get(j);
    if (!entity1.c_() || entity1 == b && am < 5) {
      continue;
    }
    float f5=0.3F;
    AxisAlignedBB axisalignedbb=entity1.z.b(f5,f5,f5);
    MovingObjectPosition movingobjectposition1=axisalignedbb.a(vec3d,vec3d1);
    if (movingobjectposition1 == null) {
      continue;
    }
    double d2=vec3d.a(movingobjectposition1.f);
    if (d2 < d1 || d1 == 0.0D) {
      entity=entity1;
      d1=d2;
    }
  }
  if (entity != null) {
    movingobjectposition=new MovingObjectPosition(entity);
  }
  if (movingobjectposition != null) {
    if (movingobjectposition.g != null) {
      boolean bounce;
      if (entity instanceof EntityLiving) {
        CraftServer server=((WorldServer)this.l).getServer();
        EntityDamageByProjectileEvent edbpe=new EntityDamageByProjectileEvent(b.getBukkitEntity(),entity.getBukkitEntity(),this.getBukkitEntity(),EntityDamageEvent.DamageCause.ENTITY_ATTACK,4);
        server.getPluginManager().callEvent(edbpe);
        if (!edbpe.isCancelled()) {
          bounce=!movingobjectposition.g.a(((Entity)(b)),edbpe.getDamage());
        }
 else {
          bounce=edbpe.getBounce();
        }
      }
 else {
        bounce=!movingobjectposition.g.a(((Entity)(b)),4);
      }
      if (!bounce) {
        l.a(((Entity)(this)),"String_Node_Str",1.0F,1.2F / (W.nextFloat() * 0.2F + 0.9F));
        q();
      }
 else {
        s*=-0.10000000149011612D;
        t*=-0.10000000149011612D;
        u*=-0.10000000149011612D;
        v+=180F;
        x+=180F;
        am=0;
      }
    }
 else {
      c=movingobjectposition.b;
      d=movingobjectposition.c;
      e=movingobjectposition.d;
      f=l.a(c,d,e);
      s=(float)(movingobjectposition.f.a - p);
      t=(float)(movingobjectposition.f.b - q);
      u=(float)(movingobjectposition.f.c - r);
      float f2=MathHelper.a(s * s + t * t + u * u);
      p-=(s / (double)f2) * 0.05000000074505806D;
      q-=(t / (double)f2) * 0.05000000074505806D;
      r-=(u / (double)f2) * 0.05000000074505806D;
      l.a(((Entity)(this)),"String_Node_Str",1.0F,1.2F / (W.nextFloat() * 0.2F + 0.9F));
      ak=true;
      a=7;
    }
  }
  p+=s;
  q+=t;
  r+=u;
  float f3=MathHelper.a(s * s + u * u);
  v=(float)((Math.atan2(s,u) * 180D) / 3.1415927410125732D);
  for (w=(float)((Math.atan2(t,f3) * 180D) / 3.1415927410125732D); w - y < -180F; y-=360F) {
    ;
  }
  for (; w - y >= 180F; y+=360F) {
    ;
  }
  for (; v - x < -180F; x-=360F) {
    ;
  }
  for (; v - x >= 180F; x+=360F) {
    ;
  }
  w=y + (w - y) * 0.2F;
  v=x + (v - x) * 0.2F;
  float f4=0.99F;
  float f6=0.03F;
  if (v()) {
    for (int k=0; k < 4; k++) {
      float f7=0.25F;
      l.a("String_Node_Str",p - s * (double)f7,q - t * (double)f7,r - u * (double)f7,s,t,u);
    }
    f4=0.8F;
  }
  s*=f4;
  t*=f4;
  u*=f4;
  t-=f6;
  a(p,q,r);
}

Fixed version (ground truth):
public void b_(){
  super.b_();
  if (y == 0.0F && x == 0.0F) {
    float f1=MathHelper.a(s * s + u * u);
    x=v=(float)((Math.atan2(s,u) * 180D) / 3.1415927410125732D);
    y=w=(float)((Math.atan2(t,f1) * 180D) / 3.1415927410125732D);
  }
  if (a > 0) {
    a--;
  }
  if (ak) {
    int i=l.a(c,d,e);
    if (i != f) {
      ak=false;
      s*=W.nextFloat() * 0.2F;
      t*=W.nextFloat() * 0.2F;
      u*=W.nextFloat() * 0.2F;
      al=0;
      am=0;
    }
 else {
      al++;
      if (al == 1200) {
        q();
      }
      return;
    }
  }
 else {
    am++;
  }
  Vec3D vec3d=Vec3D.b(p,q,r);
  Vec3D vec3d1=Vec3D.b(p + s,q + t,r + u);
  MovingObjectPosition movingobjectposition=l.a(vec3d,vec3d1);
  vec3d=Vec3D.b(p,q,r);
  vec3d1=Vec3D.b(p + s,q + t,r + u);
  if (movingobjectposition != null) {
    vec3d1=Vec3D.b(movingobjectposition.f.a,movingobjectposition.f.b,movingobjectposition.f.c);
  }
  Entity entity=null;
  List list=l.b(((Entity)(this)),z.a(s,t,u).b(1.0D,1.0D,1.0D));
  double d1=0.0D;
  for (int j=0; j < list.size(); j++) {
    Entity entity1=(Entity)list.get(j);
    if (!entity1.c_() || entity1 == b && am < 5) {
      continue;
    }
    float f5=0.3F;
    AxisAlignedBB axisalignedbb=entity1.z.b(f5,f5,f5);
    MovingObjectPosition movingobjectposition1=axisalignedbb.a(vec3d,vec3d1);
    if (movingobjectposition1 == null) {
      continue;
    }
    double d2=vec3d.a(movingobjectposition1.f);
    if (d2 < d1 || d1 == 0.0D) {
      entity=entity1;
      d1=d2;
    }
  }
  if (entity != null) {
    movingobjectposition=new MovingObjectPosition(entity);
  }
  if (movingobjectposition != null) {
    if (movingobjectposition.g != null) {
      boolean bounce;
      if (entity instanceof EntityLiving) {
        CraftServer server=((WorldServer)this.l).getServer();
        org.bukkit.entity.Entity shooter=null;
        if ((EntityLiving)b != null) {
          shooter=new org.bukkit.craftbukkit.entity.CraftLivingEntity(server,b);
        }
 else         if ((Entity)b != null) {
          shooter=(org.bukkit.entity.Entity)b.getBukkitEntity();
        }
        EntityDamageByProjectileEvent edbpe=new EntityDamageByProjectileEvent(shooter,entity.getBukkitEntity(),this.getBukkitEntity(),EntityDamageEvent.DamageCause.ENTITY_ATTACK,4);
        server.getPluginManager().callEvent(edbpe);
        if (!edbpe.isCancelled()) {
          bounce=!movingobjectposition.g.a(((Entity)(b)),edbpe.getDamage());
        }
 else {
          bounce=edbpe.getBounce();
        }
      }
 else {
        bounce=!movingobjectposition.g.a(((Entity)(b)),4);
      }
      if (!bounce) {
        l.a(((Entity)(this)),"String_Node_Str",1.0F,1.2F / (W.nextFloat() * 0.2F + 0.9F));
        q();
      }
 else {
        s*=-0.10000000149011612D;
        t*=-0.10000000149011612D;
        u*=-0.10000000149011612D;
        v+=180F;
        x+=180F;
        am=0;
      }
    }
 else {
      c=movingobjectposition.b;
      d=movingobjectposition.c;
      e=movingobjectposition.d;
      f=l.a(c,d,e);
      s=(float)(movingobjectposition.f.a - p);
      t=(float)(movingobjectposition.f.b - q);
      u=(float)(movingobjectposition.f.c - r);
      float f2=MathHelper.a(s * s + t * t + u * u);
      p-=(s / (double)f2) * 0.05000000074505806D;
      q-=(t / (double)f2) * 0.05000000074505806D;
      r-=(u / (double)f2) * 0.05000000074505806D;
      l.a(((Entity)(this)),"String_Node_Str",1.0F,1.2F / (W.nextFloat() * 0.2F + 0.9F));
      ak=true;
      a=7;
    }
  }
  p+=s;
  q+=t;
  r+=u;
  float f3=MathHelper.a(s * s + u * u);
  v=(float)((Math.atan2(s,u) * 180D) / 3.1415927410125732D);
  for (w=(float)((Math.atan2(t,f3) * 180D) / 3.1415927410125732D); w - y < -180F; y-=360F) {
    ;
  }
  for (; w - y >= 180F; y+=360F) {
    ;
  }
  for (; v - x < -180F; x-=360F) {
    ;
  }
  for (; v - x >= 180F; x+=360F) {
    ;
  }
  w=y + (w - y) * 0.2F;
  v=x + (v - x) * 0.2F;
  float f4=0.99F;
  float f6=0.03F;
  if (v()) {
    for (int k=0; k < 4; k++) {
      float f7=0.25F;
      l.a("String_Node_Str",p - s * (double)f7,q - t * (double)f7,r - u * (double)f7,s,t,u);
    }
    f4=0.8F;
  }
  s*=f4;
  t*=f4;
  u*=f4;
  t-=f6;
  a(p,q,r);
}