/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.arkhamnetwork.arcade.minigame.skywars.manager; import org.arkhamnetwork.arcade.commons.kit.Kit; import org.arkhamnetwork.arcade.commons.manager.Manager; import org.arkhamnetwork.arcade.commons.pregame.PreGameManager; import org.arkhamnetwork.arcade.commons.userstorage.PlayerRank; import org.arkhamnetwork.arcade.commons.userstorage.UserManager; import org.arkhamnetwork.arcade.commons.utils.BarUtils; import org.arkhamnetwork.arcade.commons.utils.PlayerUtils; import org.arkhamnetwork.arcade.core.Arcade; import org.arkhamnetwork.arcade.core.configuration.ArcadeConfiguration; import org.arkhamnetwork.arcade.minigame.skywars.SkyWars; import org.arkhamnetwork.arcade.minigame.skywars.struct.SkywarsPlayer; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.inventory.ItemStack; /** * * @author devan_000 */ public class SkywarsPlayerManager extends Manager { private static final SkyWars plugin = SkyWars.getSkywars(); public static void handleLogin(AsyncPlayerPreLoginEvent event) { if (!Arcade.isServerOnline() || plugin.getCurrentStage() == null) { event.setKickMessage(ChatColor.GREEN + "[Arcade] " + ChatColor.RED + "Server still setting up."); event.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_OTHER); return; } if (plugin.getCurrentStage().getId() == 1) { event.setKickMessage(ChatColor.GREEN + "[Arcade] " + ChatColor.RED + "That server is currently in-game."); event.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_OTHER); return; } if (plugin.getCurrentStage().getId() == 2) { event.setKickMessage(ChatColor.GREEN + "[Arcade] " + ChatColor.RED + "That server is currently restarting."); event.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_OTHER); return; } if (plugin.isFull()) { event.setKickMessage(ChatColor.GREEN + "[Arcade] " + ChatColor.BLUE + "That game is full."); event.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_OTHER); return; } } public static void handleJoin(Player player) { if (plugin.getCurrentStage() == null) { return; } // Pre-Game (The only time players should be joining) if (plugin.getCurrentStage().getId() == 0) { plugin.broadcast(ChatColor.GREEN + player.getName() + ChatColor.AQUA + " has joined the game. " + ChatColor.YELLOW + "(" + (plugin.getPlayers().size() + 1) + "/" + plugin.getCurrentMapData().getMaxPlayers() + ")"); SkywarsPlayer skywarsPlayer = new SkywarsPlayer(player); plugin.getPlayers().put(player.getUniqueId(), skywarsPlayer); player.teleport(PreGameManager.getSpawnLocation()); PlayerUtils.resetPlayer(player); BarUtils.setMessage(player, ChatColor.BLUE + "> " + ChatColor.GREEN + "You are currently playing on " + ChatColor.AQUA + ChatColor.UNDERLINE + ArcadeConfiguration.getServerName() + ChatColor.RESET + ChatColor.BLUE + " <"); for (String descriptionMessage : plugin.getGameDescriptionMessage()) { player.sendMessage(descriptionMessage); } } } public static void handleLeave(Player player, boolean kicked) { if (plugin.getCurrentStage() == null) { return; } plugin.getPlayers().remove(player.getUniqueId()); UserManager.unregisterUser(player.getUniqueId()); // If the player logs out in the pre-game stage. if (plugin.getCurrentStage().getId() == 0) { plugin.broadcast(ChatColor.GREEN + player.getName() + ChatColor.RED + " has left the game. " + ChatColor.YELLOW + "(" + (plugin.getPlayers().size() - 1) + "/" + plugin.getCurrentMapData().getMaxPlayers() + ")"); return; } // If the player logs out in-game. if (plugin.getCurrentStage().getId() == 0) { plugin.broadcast(ChatColor.GREEN + player.getName() + ChatColor.RED + " has died. " + ChatColor.YELLOW + "(" + (plugin.getPlayers().size() - 1) + "/" + plugin.getCurrentMapData().getMaxPlayers() + ")"); return; } } public static void attemptSelectKit(Kit kit, SkywarsPlayer player, boolean wasConfirmInventoryClick) { //You can only buy kits pre-game. if (plugin.getCurrentStage() == null || plugin.getCurrentStage().getId() != 0) { return; } if (player.getKit()!= null && player.getKit().getName().equals(kit.getName())) { plugin.messagePlayer(player.getBukkitPlayer(), ChatColor.RED+ "You already have that kit equipped."); return; } //If the kit needs a rank. if (!kit.getRanksWithPermission().isEmpty()) { boolean hasPerms = false; for (PlayerRank playerRank : player.getUserProfile().getPlayerRanks()) { if (kit.getRanksWithPermission().contains(playerRank)) { //The kit allowed use of one of the players ranks. hasPerms = true; break; } } //Return and send nope if they dont have perms. if (!hasPerms) { StringBuilder noPermBuilder = new StringBuilder(); int currentCount = 0; for (PlayerRank rank : kit.getRanksWithPermission()) { currentCount++; if (rank.isVisibleInDescriptions()) { noPermBuilder.append(rank.getRankName()); if (currentCount < kit.getRanksWithPermission().size()) { noPermBuilder.append(", "); } } } plugin.messagePlayer(player.getBukkitPlayer(), ChatColor.RED + "You must have one of the following ranks to use that kit: " + ChatColor.YELLOW + noPermBuilder.toString()); return; } } //Kit was free. if (kit.getCreditCost() <= 0) { selectKit(kit, player); return; } //It costs money, if the player dosent have enough return. if (player.getUserProfile().getArcadeCreditBalance() < kit.getCreditCost()) { plugin.messagePlayer(player.getBukkitPlayer(), ChatColor.GRAY + "You do not have enough " + ChatColor.GREEN + "Credits" + ChatColor.GRAY + "."); return; } //Now we have to start the buying process. if (!wasConfirmInventoryClick) { player.getBukkitPlayer().openInventory(kit.getBuyConfirmInventory()); return; } player.getUserProfile().updateData(player.getUserProfile().getArcadeCreditBalance() - kit.getCreditCost(), player.getUserProfile().getScore(), player.getUserProfile().getPlayerRanks(), player.getUserProfile().getLastSeen(), player.getUserProfile().getGamesPlayed()); plugin.messagePlayer(player.getBukkitPlayer(), ChatColor.YELLOW + "You purchased a use of the kit " + ChatColor.AQUA + "" + ChatColor.BOLD + kit.getName() + ChatColor.YELLOW + "."); plugin.messagePlayer(player.getBukkitPlayer(), ChatColor.GRAY + "You now have " + ChatColor.AQUA + player.getUserProfile().getArcadeCreditBalance() + " " + ChatColor.GREEN + "Credits" + ChatColor.GRAY + "."); selectKit(kit, player); } private static void selectKit(Kit kit, SkywarsPlayer player) { player.setKit(kit); PlayerUtils.resetPlayer(player.getBukkitPlayer()); for (ItemStack stack : kit.getItems()) { player.getBukkitPlayer().getInventory().addItem(stack); } player.getBukkitPlayer().updateInventory(); plugin.messagePlayer(player.getBukkitPlayer(), ChatColor.YELLOW + "You equipped the kit " + ChatColor.AQUA + "" + ChatColor.BOLD + kit.getName() + ChatColor.YELLOW + "."); } }