// Path: src/main/java/com/garbagemule/MobArena/waves/ability/core/DisorientAll.java
// @AbilityInfo(
//     name = "Disorient All",
//     aliases = {"disorientall"}
// )
// public class DisorientAll implements Ability
// {
//     @Override
//     public void execute(Arena arena, MABoss boss) {
//         for (Player p : arena.getPlayersInArena()) {
//             Location loc = p.getLocation();
//             loc.setYaw(loc.getYaw() + 45 + AbilityUtils.random.nextInt(270));
//             p.teleport(loc);
//         }
//     }
// }
// 
// Path: src/main/java/com/garbagemule/MobArena/waves/ability/core/FetchAll.java
// @AbilityInfo(
//     name = "Fetch All",
//     aliases = {"fetchall"}
// )
// public class FetchAll implements Ability
// {
//     @Override
//     public void execute(Arena arena, MABoss boss) {
//         Location bLoc = boss.getEntity().getLocation();
// 
//         for (Player p : arena.getPlayersInArena()) {
//             p.teleport(bLoc);
//         }
//     }
// }
// 
// Path: src/main/java/com/garbagemule/MobArena/waves/ability/core/PullAll.java
// @AbilityInfo(
//     name = "Pull All",
//     aliases = {"pullall"}
// )
// public class PullAll implements Ability
// {
//     @Override
//     public void execute(Arena arena, MABoss boss) {
//         Location bLoc = boss.getEntity().getLocation();
// 
//         for (Player p : arena.getPlayersInArena()) {
//             Location loc = p.getLocation();
//             Vector v     = new Vector(bLoc.getX() - loc.getX(), 0, bLoc.getZ() - loc.getZ());
// 
//             double a = Math.abs(bLoc.getX() - loc.getX());
//             double b = Math.abs(bLoc.getZ() - loc.getZ());
//             double c = Math.sqrt((a*a + b*b));
// 
//             p.setVelocity(v.normalize().multiply(c*0.3).setY(0.8));
//         }
//     }
// }
// 
// Path: src/main/java/com/garbagemule/MobArena/waves/ability/core/ThrowAll.java
// @AbilityInfo(
//     name = "Throw All",
//     aliases = {"throwall"}
// )
// public class ThrowAll implements Ability
// {
//     @Override
//     public void execute(Arena arena, MABoss boss) {
//         Location bLoc = boss.getEntity().getLocation();
// 
//         for (Player p : arena.getPlayersInArena()) {
//             Location loc = p.getLocation();
//             Vector v     = new Vector(loc.getX() - bLoc.getX(), 0, loc.getZ() - bLoc.getZ());
//             p.setVelocity(v.normalize().setY(0.8));
//         }
//     }
// }


import com.garbagemule.MobArena.waves.ability.core.ChainLightning;
import com.garbagemule.MobArena.waves.ability.core.DisorientAll;
import com.garbagemule.MobArena.waves.ability.core.DisorientDistant;
import com.garbagemule.MobArena.waves.ability.core.DisorientNearby;
import com.garbagemule.MobArena.waves.ability.core.DisorientTarget;
import com.garbagemule.MobArena.waves.ability.core.FetchAll;
import com.garbagemule.MobArena.waves.ability.core.FetchDistant;
import com.garbagemule.MobArena.waves.ability.core.FetchNearby;
import com.garbagemule.MobArena.waves.ability.core.FetchTarget;
import com.garbagemule.MobArena.waves.ability.core.FireAura;
import com.garbagemule.MobArena.waves.ability.core.Flood;
import com.garbagemule.MobArena.waves.ability.core.LightningAura;
import com.garbagemule.MobArena.waves.ability.core.LivingBomb;
import com.garbagemule.MobArena.waves.ability.core.ObsidianBomb;
import com.garbagemule.MobArena.waves.ability.core.PullAll;
import com.garbagemule.MobArena.waves.ability.core.PullDistant;
import com.garbagemule.MobArena.waves.ability.core.PullNearby;
import com.garbagemule.MobArena.waves.ability.core.PullTarget;
import com.garbagemule.MobArena.waves.ability.core.RootTarget;
import com.garbagemule.MobArena.waves.ability.core.ShootArrow;
import com.garbagemule.MobArena.waves.ability.core.ShootFireball;
import com.garbagemule.MobArena.waves.ability.core.ShufflePositions;
import com.garbagemule.MobArena.waves.ability.core.ThrowAll;
import com.garbagemule.MobArena.waves.ability.core.ThrowDistant;
import com.garbagemule.MobArena.waves.ability.core.ThrowNearby;
import com.garbagemule.MobArena.waves.ability.core.ThrowTarget;
import com.garbagemule.MobArena.waves.ability.core.WarpToPlayer;
import org.bukkit.Bukkit;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
    }

    /**
     * Load all the core abilities included in MobArena
     */
    public static void loadCoreAbilities() {
        if (abilities == null) abilities = new HashMap<>();

        register(ChainLightning.class);
        register(DisorientAll.class);
        register(DisorientDistant.class);
        register(DisorientNearby.class);
        register(DisorientTarget.class);
        register(FetchAll.class);
        register(FetchDistant.class);
        register(FetchNearby.class);
        register(FetchTarget.class);
        register(FireAura.class);
        register(Flood.class);
        register(LightningAura.class);
        register(LivingBomb.class);
        register(ObsidianBomb.class);
        register(PullAll.class);
        register(PullDistant.class);
        register(PullNearby.class);
        register(PullTarget.class);
        register(RootTarget.class);
        register(ShootArrow.class);
        register(ShootFireball.class);
        register(ShufflePositions.class);
// Path: src/main/java/com/garbagemule/MobArena/waves/ability/core/DisorientAll.java
// @AbilityInfo(
//     name = "Disorient All",
//     aliases = {"disorientall"}
// )
// public class DisorientAll implements Ability
// {
//     @Override
//     public void execute(Arena arena, MABoss boss) {
//         for (Player p : arena.getPlayersInArena()) {
//             Location loc = p.getLocation();
//             loc.setYaw(loc.getYaw() + 45 + AbilityUtils.random.nextInt(270));
//             p.teleport(loc);
//         }
//     }
// }
// 
// Path: src/main/java/com/garbagemule/MobArena/waves/ability/core/FetchAll.java
// @AbilityInfo(
//     name = "Fetch All",
//     aliases = {"fetchall"}
// )
// public class FetchAll implements Ability
// {
//     @Override
//     public void execute(Arena arena, MABoss boss) {
//         Location bLoc = boss.getEntity().getLocation();
// 
//         for (Player p : arena.getPlayersInArena()) {
//             p.teleport(bLoc);
//         }
//     }
// }
// 
// Path: src/main/java/com/garbagemule/MobArena/waves/ability/core/PullAll.java
// @AbilityInfo(
//     name = "Pull All",
//     aliases = {"pullall"}
// )
// public class PullAll implements Ability
// {
//     @Override
//     public void execute(Arena arena, MABoss boss) {
//         Location bLoc = boss.getEntity().getLocation();
// 
//         for (Player p : arena.getPlayersInArena()) {
//             Location loc = p.getLocation();
//             Vector v     = new Vector(bLoc.getX() - loc.getX(), 0, bLoc.getZ() - loc.getZ());
// 
//             double a = Math.abs(bLoc.getX() - loc.getX());
//             double b = Math.abs(bLoc.getZ() - loc.getZ());
//             double c = Math.sqrt((a*a + b*b));
// 
//             p.setVelocity(v.normalize().multiply(c*0.3).setY(0.8));
//         }
//     }
// }
// 
// Path: src/main/java/com/garbagemule/MobArena/waves/ability/core/ThrowAll.java
// @AbilityInfo(
//     name = "Throw All",
//     aliases = {"throwall"}
// )
// public class ThrowAll implements Ability
// {
//     @Override
//     public void execute(Arena arena, MABoss boss) {
//         Location bLoc = boss.getEntity().getLocation();
// 
//         for (Player p : arena.getPlayersInArena()) {
//             Location loc = p.getLocation();
//             Vector v     = new Vector(loc.getX() - bLoc.getX(), 0, loc.getZ() - bLoc.getZ());
//             p.setVelocity(v.normalize().setY(0.8));
//         }
//     }
// }


// Path: src/main/java/com/garbagemule/MobArena/waves/ability/AbilityManager.java
import com.garbagemule.MobArena.waves.ability.core.ChainLightning;
import com.garbagemule.MobArena.waves.ability.core.DisorientAll;
import com.garbagemule.MobArena.waves.ability.core.DisorientDistant;
import com.garbagemule.MobArena.waves.ability.core.DisorientNearby;
import com.garbagemule.MobArena.waves.ability.core.DisorientTarget;
import com.garbagemule.MobArena.waves.ability.core.FetchAll;
import com.garbagemule.MobArena.waves.ability.core.FetchDistant;
import com.garbagemule.MobArena.waves.ability.core.FetchNearby;
import com.garbagemule.MobArena.waves.ability.core.FetchTarget;
import com.garbagemule.MobArena.waves.ability.core.FireAura;
import com.garbagemule.MobArena.waves.ability.core.Flood;
import com.garbagemule.MobArena.waves.ability.core.LightningAura;
import com.garbagemule.MobArena.waves.ability.core.LivingBomb;
import com.garbagemule.MobArena.waves.ability.core.ObsidianBomb;
import com.garbagemule.MobArena.waves.ability.core.PullAll;
import com.garbagemule.MobArena.waves.ability.core.PullDistant;
import com.garbagemule.MobArena.waves.ability.core.PullNearby;
import com.garbagemule.MobArena.waves.ability.core.PullTarget;
import com.garbagemule.MobArena.waves.ability.core.RootTarget;
import com.garbagemule.MobArena.waves.ability.core.ShootArrow;
import com.garbagemule.MobArena.waves.ability.core.ShootFireball;
import com.garbagemule.MobArena.waves.ability.core.ShufflePositions;
import com.garbagemule.MobArena.waves.ability.core.ThrowAll;
import com.garbagemule.MobArena.waves.ability.core.ThrowDistant;
import com.garbagemule.MobArena.waves.ability.core.ThrowNearby;
import com.garbagemule.MobArena.waves.ability.core.ThrowTarget;
import com.garbagemule.MobArena.waves.ability.core.WarpToPlayer;
import org.bukkit.Bukkit;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

    }

    /**
     * Load all the core abilities included in MobArena
     */
    public static void loadCoreAbilities() {
        if (abilities == null) abilities = new HashMap<>();

        register(ChainLightning.class);
        register(DisorientAll.class);
        register(DisorientDistant.class);
        register(DisorientNearby.class);
        register(DisorientTarget.class);
        register(FetchAll.class);
        register(FetchDistant.class);
        register(FetchNearby.class);
        register(FetchTarget.class);
        register(FireAura.class);
        register(Flood.class);
        register(LightningAura.class);
        register(LivingBomb.class);
        register(ObsidianBomb.class);
        register(PullAll.class);
        register(PullDistant.class);
        register(PullNearby.class);
        register(PullTarget.class);
        register(RootTarget.class);
        register(ShootArrow.class);
        register(ShootFireball.class);
        register(ShufflePositions.class);
        register(ThrowAll.class);