// Path: src/main/java/com/garbagemule/MobArena/framework/Arena.java
// public interface Arena
// {
//     /*/////////////////////////////////////////////////////////////////////////
//     //
//     //      NEW METHODS IN REFACTORING
//     //
//     /////////////////////////////////////////////////////////////////////////*/
// 
//     ConfigurationSection getSettings();
// 
//     World getWorld();
// 
//     void setWorld(World world);
// 
//     boolean isEnabled();
// 
//     void setEnabled(boolean value);
// 
//     boolean isProtected();
// 
//     void setProtected(boolean value);
// 
//     boolean isRunning();
// 
//     boolean inEditMode();
// 
//     void setEditMode(boolean value);
// 
//     int getMinPlayers();
// 
//     int getMaxPlayers();
// 
//     List<Thing> getEntryFee();
// 
//     Set<Map.Entry<Integer, ThingPicker>> getEveryWaveEntrySet();
// 
//     ThingPicker getAfterWaveReward(int wave);
// 
//     Set<Player> getPlayersInArena();
// 
//     Set<Player> getPlayersInLobby();
// 
//     Set<Player> getReadyPlayersInLobby();
// 
//     Set<Player> getSpectators();
// 
//     MASpawnThread getSpawnThread();
// 
//     WaveManager getWaveManager();
// 
//     ArenaListener getEventListener();
// 
//     void setLeaderboard(Leaderboard leaderboard);
// 
//     ArenaPlayer getArenaPlayer(Player p);
// 
//     Set<Block> getBlocks();
// 
//     void addBlock(Block b);
// 
//     boolean removeBlock(Block b);
// 
//     boolean hasPet(Entity e);
// 
//     void addRepairable(Repairable r);
// 
//     ArenaRegion getRegion();
// 
//     InventoryManager getInventoryManager();
// 
//     RewardManager getRewardManager();
// 
//     MonsterManager getMonsterManager();
// 
//     ClassLimitManager getClassLimitManager();
// 
//     void revivePlayer(Player p);
// 
//     ScoreboardManager getScoreboard();
// 
// 
//     Messenger getMessenger();
// 
//     Messenger getGlobalMessenger();
// 
//     void announce(String msg);
// 
//     void announce(Msg msg, String s);
// 
//     void announce(Msg msg);
// 
// 
// 
// 
//     void scheduleTask(Runnable r, int delay);
// 
// 
// 
// 
// 
// 
// 
// 
// 
// 
// 
// 
//     boolean startArena();
// 
//     boolean endArena();
// 
//     void forceStart();
// 
//     void forceEnd();
// 
//     boolean hasPermission(Player p);
// 
//     boolean playerJoin(Player p, Location loc);
// 
//     void playerReady(Player p);
// 
//     boolean playerLeave(Player p);
// 
//     boolean isMoving(Player p);
// 
//     boolean isLeaving(Player p);
// 
//     void playerDeath(Player p);
// 
//     void playerRespawn(Player p);
// 
//     Location getRespawnLocation(Player p);
// 
//     void playerSpec(Player p, Location loc);
// 
//     void storeContainerContents();
// 
//     void restoreContainerContents();
// 
//     void discardPlayer(Player p);
// 
//     void repairBlocks();
// 
//     void queueRepairable(Repairable r);
// 
// 
// 
//     /*////////////////////////////////////////////////////////////////////
//     //
//     //      Items & Cleanup
//     //
//     ////////////////////////////////////////////////////////////////////*/
// 
//     void assignClass(Player p, String className);
// 
//     void assignClassGiveInv(Player p, String className, ItemStack[] contents);
// 
//     void addRandomPlayer(Player p);
// 
//     void assignRandomClass(Player p);
// 
// 
// 
//     /*////////////////////////////////////////////////////////////////////
//     //
//     //      Initialization & Checks
//     //
//     ////////////////////////////////////////////////////////////////////*/
// 
//     void restoreRegion();
// 
// 
// 
//     /*////////////////////////////////////////////////////////////////////
//     //
//     //      Getters & Misc
//     //
//     ////////////////////////////////////////////////////////////////////*/
// 
//     boolean inArena(Player p);
// 
//     boolean inLobby(Player p);
// 
//     boolean inSpec(Player p);
// 
//     boolean isDead(Player p);
// 
//     String configName();
// 
//     /**
//      * @deprecated use {@link #configName()} instead
//      */
//     @Deprecated
//     String arenaName();
// 
//     String getSlug();
// 
//     MobArena getPlugin();
// 
//     Map<String,ArenaClass> getClasses();
// 
//     int getPlayerCount();
// 
//     List<Player> getAllPlayers();
// 
//     Collection<ArenaPlayer> getArenaPlayerSet();
// 
//     List<Player> getNonreadyPlayers();
// 
//     boolean canAfford(Player p);
// 
//     boolean takeFee(Player p);
// 
//     boolean refund(Player p);
// 
//     boolean canJoin(Player p);
// 
//     boolean canSpec(Player p);
// 
//     boolean hasIsolatedChat();
// 
//     Player getLastPlayerStanding();
// 
//     AutoStartTimer getAutoStartTimer();
// }


import com.garbagemule.MobArena.framework.Arena;
import com.garbagemule.MobArena.waves.MABoss;
import com.garbagemule.MobArena.waves.ability.Ability;
import com.garbagemule.MobArena.waves.ability.AbilityInfo;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
package com.garbagemule.MobArena.waves.ability.core;


@AbilityInfo(
    name = "Pull All",
    aliases = {"pullall"}
)
public class PullAll implements Ability
{
    @Override
// Path: src/main/java/com/garbagemule/MobArena/framework/Arena.java
// public interface Arena
// {
//     /*/////////////////////////////////////////////////////////////////////////
//     //
//     //      NEW METHODS IN REFACTORING
//     //
//     /////////////////////////////////////////////////////////////////////////*/
// 
//     ConfigurationSection getSettings();
// 
//     World getWorld();
// 
//     void setWorld(World world);
// 
//     boolean isEnabled();
// 
//     void setEnabled(boolean value);
// 
//     boolean isProtected();
// 
//     void setProtected(boolean value);
// 
//     boolean isRunning();
// 
//     boolean inEditMode();
// 
//     void setEditMode(boolean value);
// 
//     int getMinPlayers();
// 
//     int getMaxPlayers();
// 
//     List<Thing> getEntryFee();
// 
//     Set<Map.Entry<Integer, ThingPicker>> getEveryWaveEntrySet();
// 
//     ThingPicker getAfterWaveReward(int wave);
// 
//     Set<Player> getPlayersInArena();
// 
//     Set<Player> getPlayersInLobby();
// 
//     Set<Player> getReadyPlayersInLobby();
// 
//     Set<Player> getSpectators();
// 
//     MASpawnThread getSpawnThread();
// 
//     WaveManager getWaveManager();
// 
//     ArenaListener getEventListener();
// 
//     void setLeaderboard(Leaderboard leaderboard);
// 
//     ArenaPlayer getArenaPlayer(Player p);
// 
//     Set<Block> getBlocks();
// 
//     void addBlock(Block b);
// 
//     boolean removeBlock(Block b);
// 
//     boolean hasPet(Entity e);
// 
//     void addRepairable(Repairable r);
// 
//     ArenaRegion getRegion();
// 
//     InventoryManager getInventoryManager();
// 
//     RewardManager getRewardManager();
// 
//     MonsterManager getMonsterManager();
// 
//     ClassLimitManager getClassLimitManager();
// 
//     void revivePlayer(Player p);
// 
//     ScoreboardManager getScoreboard();
// 
// 
//     Messenger getMessenger();
// 
//     Messenger getGlobalMessenger();
// 
//     void announce(String msg);
// 
//     void announce(Msg msg, String s);
// 
//     void announce(Msg msg);
// 
// 
// 
// 
//     void scheduleTask(Runnable r, int delay);
// 
// 
// 
// 
// 
// 
// 
// 
// 
// 
// 
// 
//     boolean startArena();
// 
//     boolean endArena();
// 
//     void forceStart();
// 
//     void forceEnd();
// 
//     boolean hasPermission(Player p);
// 
//     boolean playerJoin(Player p, Location loc);
// 
//     void playerReady(Player p);
// 
//     boolean playerLeave(Player p);
// 
//     boolean isMoving(Player p);
// 
//     boolean isLeaving(Player p);
// 
//     void playerDeath(Player p);
// 
//     void playerRespawn(Player p);
// 
//     Location getRespawnLocation(Player p);
// 
//     void playerSpec(Player p, Location loc);
// 
//     void storeContainerContents();
// 
//     void restoreContainerContents();
// 
//     void discardPlayer(Player p);
// 
//     void repairBlocks();
// 
//     void queueRepairable(Repairable r);
// 
// 
// 
//     /*////////////////////////////////////////////////////////////////////
//     //
//     //      Items & Cleanup
//     //
//     ////////////////////////////////////////////////////////////////////*/
// 
//     void assignClass(Player p, String className);
// 
//     void assignClassGiveInv(Player p, String className, ItemStack[] contents);
// 
//     void addRandomPlayer(Player p);
// 
//     void assignRandomClass(Player p);
// 
// 
// 
//     /*////////////////////////////////////////////////////////////////////
//     //
//     //      Initialization & Checks
//     //
//     ////////////////////////////////////////////////////////////////////*/
// 
//     void restoreRegion();
// 
// 
// 
//     /*////////////////////////////////////////////////////////////////////
//     //
//     //      Getters & Misc
//     //
//     ////////////////////////////////////////////////////////////////////*/
// 
//     boolean inArena(Player p);
// 
//     boolean inLobby(Player p);
// 
//     boolean inSpec(Player p);
// 
//     boolean isDead(Player p);
// 
//     String configName();
// 
//     /**
//      * @deprecated use {@link #configName()} instead
//      */
//     @Deprecated
//     String arenaName();
// 
//     String getSlug();
// 
//     MobArena getPlugin();
// 
//     Map<String,ArenaClass> getClasses();
// 
//     int getPlayerCount();
// 
//     List<Player> getAllPlayers();
// 
//     Collection<ArenaPlayer> getArenaPlayerSet();
// 
//     List<Player> getNonreadyPlayers();
// 
//     boolean canAfford(Player p);
// 
//     boolean takeFee(Player p);
// 
//     boolean refund(Player p);
// 
//     boolean canJoin(Player p);
// 
//     boolean canSpec(Player p);
// 
//     boolean hasIsolatedChat();
// 
//     Player getLastPlayerStanding();
// 
//     AutoStartTimer getAutoStartTimer();
// }


// Path: src/main/java/com/garbagemule/MobArena/waves/ability/core/PullAll.java
import com.garbagemule.MobArena.framework.Arena;
import com.garbagemule.MobArena.waves.MABoss;
import com.garbagemule.MobArena.waves.ability.Ability;
import com.garbagemule.MobArena.waves.ability.AbilityInfo;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;

package com.garbagemule.MobArena.waves.ability.core;


@AbilityInfo(
    name = "Pull All",
    aliases = {"pullall"}
)
public class PullAll implements Ability
{
    @Override
    public void execute(Arena arena, MABoss boss) {