Search in sources :

Example 1 with VillageGameStartEvent

use of pl.plajer.villagedefense3.villagedefenseapi.VillageGameStartEvent in project Village_Defense by Plajer.

the class Arena method run.

public void run() {
    User.handleCooldowns();
    ArenaUtils.updateScoreboard(this);
    switch(getArenaState()) {
        case WAITING_FOR_PLAYERS:
            if (plugin.isBungeeActivated())
                plugin.getServer().setWhitelist(false);
            if (getPlayers().size() < getMinimumPlayers()) {
                if (getTimer() <= 0) {
                    setTimer(15);
                    String message = ChatManager.formatMessage(this, ChatManager.colorMessage("In-Game.Messages.Lobby-Messages.Waiting-For-Players"), getMinimumPlayers());
                    for (Player player1 : getPlayers()) {
                        player1.sendMessage(ChatManager.PLUGIN_PREFIX + message);
                    }
                    return;
                }
            } else {
                if (plugin.isBossbarEnabled()) {
                    gameBar.setTitle(ChatManager.colorMessage("Bossbar.Waiting-For-Players"));
                }
                for (Player p : getPlayers()) {
                    p.sendMessage(ChatManager.PLUGIN_PREFIX + ChatManager.colorMessage("In-Game.Messages.Lobby-Messages.Enough-Players-To-Start"));
                }
                setArenaState(ArenaState.STARTING);
                setTimer(Main.STARTING_TIMER_TIME);
                this.showPlayers();
            }
            setTimer(getTimer() - 1);
            break;
        case STARTING:
            if (plugin.isBossbarEnabled()) {
                gameBar.setTitle(ChatManager.colorMessage("Bossbar.Starting-In").replaceAll("%time%", String.valueOf(getTimer())));
                gameBar.setProgress(getTimer() / plugin.getConfig().getDouble("Starting-Waiting-Time"));
            }
            if (getTimer() == 0) {
                VillageGameStartEvent villageGameStartEvent = new VillageGameStartEvent(this);
                Bukkit.getPluginManager().callEvent(villageGameStartEvent);
                setArenaState(ArenaState.IN_GAME);
                if (plugin.isBossbarEnabled()) {
                    gameBar.setProgress(1.0);
                }
                setTimer(5);
                teleportAllToStartLocation();
                for (Player player : getPlayers()) {
                    player.getInventory().clear();
                    player.setGameMode(GameMode.SURVIVAL);
                    UserManager.getUser(player.getUniqueId()).setInt("orbs", plugin.getConfig().getInt("Orbs-Starting-Amount"));
                    ArenaUtils.hidePlayersOutsideTheGame(player, this);
                    if (UserManager.getUser(player.getUniqueId()).getKit() != null) {
                        UserManager.getUser(player.getUniqueId()).getKit().giveKitItems(player);
                    } else {
                        KitRegistry.getDefaultKit().giveKitItems(player);
                    }
                    player.updateInventory();
                    addStat(player, "gamesplayed");
                    addExperience(player, 10);
                    setTimer(25);
                    player.sendMessage(ChatManager.PLUGIN_PREFIX + ChatManager.colorMessage("In-Game.Messages.Lobby-Messages.Game-Started"));
                }
                isFighting = false;
            }
            setTimer(getTimer() - 1);
            break;
        case IN_GAME:
            if (plugin.isBossbarEnabled()) {
                if (barToggle > 5) {
                    gameBar.setTitle(ChatManager.colorMessage("Bossbar.In-Game-Wave").replaceAll("%wave%", String.valueOf(getWave())));
                    barToggle++;
                    if (barToggle > 10) {
                        barToggle = 0;
                    }
                } else {
                    gameBar.setTitle(ChatManager.colorMessage("Bossbar.In-Game-Info").replaceAll("%wave%", String.valueOf(getWave())));
                    barToggle++;
                }
            }
            if (plugin.isBungeeActivated()) {
                if (getMaximumPlayers() <= getPlayers().size()) {
                    plugin.getServer().setWhitelist(true);
                } else {
                    plugin.getServer().setWhitelist(false);
                }
            }
            zombieChecker++;
            if (zombieChecker >= 60) {
                List<Villager> remove = new ArrayList<>();
                for (Villager villager : getVillagers()) {
                    if (villager.isDead())
                        remove.add(villager);
                }
                for (Villager villager : remove) {
                    removeVillager(villager);
                }
                remove.clear();
                zombieChecker = 0;
                List<Zombie> removeAfterLoop = new ArrayList<>();
                for (Zombie zombie : getZombies()) {
                    if (zombie.isDead()) {
                        removeAfterLoop.add(zombie);
                        continue;
                    }
                    if (glitchedZombies.contains(zombie) && zombie.getLocation().distance(zombieCheckerLocations.get(zombie)) <= 1) {
                        removeAfterLoop.add(zombie);
                        zombieCheckerLocations.remove(zombie);
                        zombie.remove();
                    }
                    if (zombieCheckerLocations.get(zombie) == null) {
                        zombieCheckerLocations.put(zombie, zombie.getLocation());
                    } else {
                        Location location = zombieCheckerLocations.get(zombie);
                        if (zombie.getLocation().distance(location) <= 1) {
                            zombie.teleport(zombieSpawns.get(random.nextInt(zombieSpawns.size() - 1)));
                            zombieCheckerLocations.put(zombie, zombie.getLocation());
                            glitchedZombies.add(zombie);
                        }
                    }
                }
                for (Zombie zombie : removeAfterLoop) {
                    removeZombie(zombie);
                }
                removeAfterLoop.clear();
            }
            if (getVillagers().size() <= 0 || getPlayersLeft().size() <= 0) {
                clearZombies();
                this.setArenaState(ArenaState.ENDING);
                this.stopGame(false);
                if (getVillagers().size() <= 0) {
                    showPlayers();
                    this.setTimer(10);
                } else
                    this.setTimer(5);
                return;
            }
            if (isFighting) {
                if (getZombiesLeft() <= 0) {
                    isFighting = false;
                    endWave();
                }
                if (zombiesToSpawn > 0) {
                    spawnZombies();
                    setTimer(500);
                } else {
                    if (getTimer() == 0) {
                        if (getZombiesLeft() <= 5) {
                            clearZombies();
                            zombiesToSpawn = 0;
                            for (Player p : getPlayers()) {
                                p.sendMessage(ChatManager.PLUGIN_PREFIX + ChatManager.colorMessage("In-Game.Messages.Zombie-Got-Stuck-In-The-Map"));
                            }
                        } else {
                            getZombies().clear();
                            for (int i = getZombiesLeft(); i > 0; i++) {
                                spawnFastZombie(random);
                            }
                        }
                    }
                }
                if (zombiesToSpawn < 0)
                    zombiesToSpawn = 0;
                setTimer(getTimer() - 1);
            } else {
                if (getTimer() <= 0) {
                    isFighting = true;
                    startWave();
                }
            }
            setTimer(getTimer() - 1);
            break;
        case ENDING:
            if (plugin.isBungeeActivated())
                plugin.getServer().setWhitelist(false);
            if (getTimer() <= 0) {
                if (plugin.isBossbarEnabled()) {
                    gameBar.setTitle(ChatManager.colorMessage("Bossbar.Game-Ended"));
                }
                clearVillagers();
                clearZombies();
                clearGolems();
                clearWolfs();
                for (Player player : getPlayers()) {
                    UserManager.getUser(player.getUniqueId()).removeScoreboard();
                    player.setGameMode(GameMode.SURVIVAL);
                    for (Player players : Bukkit.getOnlinePlayers()) {
                        player.showPlayer(players);
                        players.hidePlayer(player);
                    }
                    for (PotionEffect effect : player.getActivePotionEffects()) {
                        player.removePotionEffect(effect.getType());
                    }
                    player.setFlying(false);
                    player.setAllowFlight(false);
                    player.getInventory().clear();
                    ArmorHelper.clearArmor(player);
                    if (plugin.isBossbarEnabled()) {
                        gameBar.removePlayer(player);
                    }
                    player.setMaxHealth(20.0);
                    player.setHealth(player.getMaxHealth());
                    player.setFireTicks(0);
                    player.setFoodLevel(20);
                    for (Player players : plugin.getServer().getOnlinePlayers()) {
                        if (ArenaRegistry.getArena(players) != null)
                            players.showPlayer(player);
                        player.showPlayer(players);
                    }
                }
                teleportAllToEndLocation();
                if (plugin.isInventoryManagerEnabled()) {
                    for (Player player : getPlayers()) {
                        plugin.getInventoryManager().loadInventory(player);
                    }
                }
                for (Player p : getPlayers()) {
                    p.sendMessage(ChatManager.PLUGIN_PREFIX + ChatManager.colorMessage("Commands.Teleported-To-The-Lobby"));
                }
                setArenaState(ArenaState.RESTARTING);
                for (User user : UserManager.getUsers(this)) {
                    user.setSpectator(false);
                    user.setInt("orbs", 0);
                    user.setFakeDead(false);
                }
                plugin.getRewardsHandler().performEndGameRewards(this);
                clearPlayers();
                if (plugin.isBungeeActivated()) {
                    if (ConfigurationManager.getConfig("bungee").getBoolean("Shutdown-When-Game-Ends"))
                        plugin.getServer().shutdown();
                }
            }
            setTimer(getTimer() - 1);
            break;
        case RESTARTING:
            clearVillagers();
            this.restoreMap();
            getPlayers().clear();
            setArenaState(ArenaState.WAITING_FOR_PLAYERS);
            wave = 1;
            if (plugin.isBungeeActivated()) {
                for (Player player : plugin.getServer().getOnlinePlayers()) {
                    this.addPlayer(player);
                }
            }
            break;
        default:
            // o.o?
            break;
    }
}
Also used : Player(org.bukkit.entity.Player) VillageGameStartEvent(pl.plajer.villagedefense3.villagedefenseapi.VillageGameStartEvent) User(pl.plajer.villagedefense3.User) Zombie(org.bukkit.entity.Zombie) PotionEffect(org.bukkit.potion.PotionEffect) Villager(org.bukkit.entity.Villager) ArrayList(java.util.ArrayList) Location(org.bukkit.Location)

Aggregations

ArrayList (java.util.ArrayList)1 Location (org.bukkit.Location)1 Player (org.bukkit.entity.Player)1 Villager (org.bukkit.entity.Villager)1 Zombie (org.bukkit.entity.Zombie)1 PotionEffect (org.bukkit.potion.PotionEffect)1 User (pl.plajer.villagedefense3.User)1 VillageGameStartEvent (pl.plajer.villagedefense3.villagedefenseapi.VillageGameStartEvent)1