public class Homing extends JavaPlugin implements Listener {
public static Homing instance;
public List<Projectile> arrows;
public void onEnable() {
instance = this;
arrows = new ArrayList<Projectile>();
Bukkit.getPluginManager().registerEvents(this, this);
Bukkit.getScheduler().runTaskTimer(instance, () -> {
arrows.forEach(arr -> {
arr.getLocation().getWorld()
.spawnParticle(Particle.HEART,
arr.getLocation(),
1);
List<Player> near = arr.getNearbyEntities(10, 10, 10)
.stream().filter(entity -> entity instanceof Player)
.map(entity -> (Player) entity)
.filter(entity -> {
Player shooter = (Player) arr.getShooter();
return shooter.getDisplayName() != entity.getDisplayName();
}).collect(Collectors.toList());
if(near.size() < 1) return;
Vector vec = getDifferentialVector(
arr.getLocation(), near.get(0).getLocation()
).normalize();
arr.setVelocity(vec.multiply(1.5));
});
}, 0, 1);
}
@EventHandler
public void onShoot(ProjectileLaunchEvent e) {
arrows.add(e.getEntity());
}
@EventHandler
public void onHit(ProjectileHitEvent e) {
arrows.remove(e.getEntity());
}
public static Vector getDifferentialVector(Location from, Location to) {
return new Vector((to.getX() - from.getX()), to.getY() - from.getY(), (to.getZ() - from.getZ()));
}
}