Best method for making homing fireballs?

Status
This thread has been locked.

Paper Cars

Audio Production Services
Supreme
Feedback score
8
Posts
514
Reactions
103
Resources
0
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:
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();
    }
    
}
 
Status
This thread has been locked.
Top