Hey! I'm looking for the best method to making a homing fireball that locks onto players within a certain block radius!
I want it to do this:
I already have a system that spawns a fireball, handles cooldown and damage. Just not sure of the most effective way to lock on to the nearest player.
My current code if needed:
I want it to do this:
I already have a system that spawns a fireball, handles cooldown and damage. Just not sure of the most effective way to lock on to the nearest player.
My current code if needed:
Code:
package me.gosintary.crazygta.hsm;
import java.util.ArrayList;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Fireball;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
public class HSM extends JavaPlugin implements Listener {
private PluginManager pm;
public void onEnable() {
pm = Bukkit.getServer().getPluginManager();
registerEvents();
}
private void registerEvents() {
pm.registerEvents(this, this);
}
ArrayList<Player> cooldown = new ArrayList<Player>();
@EventHandler
public void fireMissile(PlayerInteractEvent e) {
Player p = e.getPlayer();
if(p.getItemInHand().getType() == Material.FIREWORK) {
if(cooldown.contains(p)) {
p.sendMessage(ChatColor.RED+"Heat Seaking Missile is Reloading!");
}else {
/*Location loc = p.getLocation();
Entity r = loc.getWorld().spawnEntity(loc.add(loc.getDirection()), EntityType.FIREBALL);
r.setVelocity(loc.getDirection().multiply(1));*/
Location spawnAt = p.getEyeLocation().toVector().add(p.getEyeLocation().getDirection().multiply(0)).toLocation(p.getWorld());
Fireball fireball = p.getWorld().spawn(p.getLocation().add(p.getLocation().getDirection()), Fireball.class);
fireball.setVelocity(p.getLocation().getDirection().multiply(1));
fireball.setBounce(false);
fireball.setIsIncendiary(false);
fireball.setYield(4);
fireball.setShooter(p);
cooldown.add(p);
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
@Override
public void run() {
p.sendMessage(ChatColor.GREEN+"Missile reloaded, ready for deployment!");
cooldown.remove(p);
}
}, 40);
}
}
}
/*@EventHandler
public void FireBall(EntityDamageByEntityEvent e){
Player s = (Player) e.getEntity();
if(e.getDamager() instanceof Fireball){
s.damage(40);
}
}*/
@EventHandler
public void onEntityExplode(EntityExplodeEvent e) {
e.blockList().clear();
}
}
