@EventHandler
private void onEntityTarget(EntityTargetEvent e) {
if (!(e.getTarget() instanceof Player) || !(e.getEntity() instanceof Zombie)) return;
Player p = (Player) e.getTarget();
Zombie z = (Zombie) e.getEntity();
double d = p.getLocation().distance(z.getLocation());
if (d > ((int) (p.getExp() * 72))) {
e.setCancelled(true);
return;
}
makeFaster(z, 0.39F);
}
public void makeFaster(Zombie z, float speed) {
EntityZombie zombie = ((CraftZombie) z).getHandle();
Field fGoalSelector;
try {
fGoalSelector = EntityLiving.class.getDeclaredField("goalSelector");
fGoalSelector.setAccessible(true);
PathfinderGoalSelector gs = new PathfinderGoalSelector(((CraftWorld) z.getWorld()).getHandle() != null && ((CraftWorld) z.getWorld()).getHandle().methodProfiler != null ? ((CraftWorld) z.getWorld()).getHandle().methodProfiler : null);
gs.a(0, new PathfinderGoalFloat(zombie));
gs.a(1, new PathfinderGoalBreakDoor(zombie));
gs.a(2, new PathfinderGoalMeleeAttack(zombie, EntityHuman.class, speed, false));
gs.a(3, new PathfinderGoalMeleeAttack(zombie, EntityVillager.class, speed, true));
gs.a(4, new PathfinderGoalMoveTowardsRestriction(zombie, speed));
gs.a(5, new PathfinderGoalMoveThroughVillage(zombie, speed, false));
gs.a(6, new PathfinderGoalRandomStroll(zombie, speed));
gs.a(7, new PathfinderGoalLookAtPlayer(zombie, EntityHuman.class, 4.0F));
gs.a(7, new PathfinderGoalRandomLookaround(zombie));
fGoalSelector.set(zombie, gs);
} catch (NoSuchFieldException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
}