package me.avery246813579.hotpotato.game; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import me.avery246813579.hotpotato.HotPotato; import me.avery246813579.hotpotato.files.FileHandler; import me.avery246813579.hotpotato.timers.EndTimer; import me.avery246813579.hotpotato.timers.LiveTimer; import me.avery246813579.hotpotato.timers.LobbyTimer; import me.avery246813579.hotpotato.timers.PotatoTimer; import me.avery246813579.hotpotato.timers.PrepareTimer; import me.avery246813579.hotpotato.timers.StartingTimer; import me.avery246813579.hotpotato.util.ItemUtil; import me.avery246813579.hotpotato.util.MessageUtil; public class GameManager { private String gameName; private boolean forceStop = false, forceStart = false, starting = false, canTalk = true, canMove = true; private List<GamePlayer> gamePlayers = new ArrayList<GamePlayer>(); private List<GamePlayer> winners = new ArrayList<GamePlayer>(); private GameState gameState = GameState.Limbow; private Player potatoPlayer; private String description; private Game game; public GameManager(String gameName, String gameLocation) { this.gameName = gameName; this.game = new Game(this, gameLocation); this.description = FileHandler.ConfigFile.getFile().getString(ChatColor.translateAlternateColorCodes('&', "description")); loadLobby(); } public void forceStopGame() { resetGame(); } public void resetGame() { forceStart = false; forceStop = false; starting = false; canMove = true; canTalk = true; setPotatoPlayer(null); for (GamePlayer gamePlayer : gamePlayers) { gamePlayer.setAlive(false); gamePlayer.setKiller(null); gamePlayer.setKills(0); gamePlayer.setPlayedGame(false); gamePlayer.resetPlayerManually(); gamePlayer.giveRespectedItems(); gamePlayer.getPlayer().teleport(game.getLobbyLocation()); for (GamePlayer gp : gamePlayers) { gamePlayer.getPlayer().showPlayer(gp.getPlayer()); } } winners.clear(); loadLobby(); } public void loadLobby() { /** Used for checking map in future **/ startRecruiting(); } public void startRecruiting() { gameState = GameState.Recruit; new LobbyTimer(this); } public void stopRecruiting() { gameState = GameState.Prepare; new StartingTimer(this); } public void prepareGame() { for (GamePlayer gp : gamePlayers) { gp.getPlayer().sendMessage(""); gp.getPlayer().sendMessage(""); gp.getPlayer().sendMessage(""); gp.getPlayer().sendMessage(""); gp.getPlayer().sendMessage(""); gp.getPlayer().sendMessage(ChatColor.RED + "☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰"); gp.getPlayer().sendMessage(ChatColor.GREEN + "Gamemode ➜ " + ChatColor.YELLOW + "Hot Potato by Avery246813579"); gp.getPlayer().sendMessage(""); gp.getPlayer().sendMessage(ChatColor.GREEN + "How to play ➜ " + ChatColor.YELLOW + description); gp.getPlayer().sendMessage(""); gp.getPlayer().sendMessage(ChatColor.GREEN + "Map ➜ " + ChatColor.YELLOW + game.getMapName() + " Created By ➜ " + ChatColor.YELLOW + game.getMapCreator()); gp.getPlayer().sendMessage(ChatColor.RED + "☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰☰"); gp.getPlayer().playSound(gp.getPlayer().getLocation(), Sound.LEVEL_UP, 2.0F, 1.0F); gp.resetPlayerManually(); gp.getPlayer().closeInventory(); gp.getPlayer().teleport(game.getSpawn()); } canMove = false; canTalk = false; starting = true; new PrepareTimer(this); } public void startGame() { if (gamePlayers.size() < FileHandler.ConfigFile.getFile().getInt("minPlayers")) { for (GamePlayer gp : getGamePlayers()) { MessageUtil.sendTextMessage(gp.getPlayer(), "notEnoughPlayers"); resetGame(); return; } } gameState = GameState.Live; starting = false; for (GamePlayer gp : getGamePlayers()) { gp.getPlayer().playSound(gp.getPlayer().getLocation(), Sound.CAT_MEOW, 2.0F, 1.0F); gp.setAlive(true); gp.setPlayedGame(true); gp.resetPlayerManually(); gp.giveRespectedItems(); gp.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 100000, 2)); } canTalk = true; canMove = true; new LiveTimer(this); giveRandomPotato(); } public boolean checkWinner() { GamePlayer lastAlive = null; int alive = 0; for (GamePlayer gp : gamePlayers) { if (gp.isAlive()) { alive++; lastAlive = gp; } } if (alive == 1) { winners.clear(); winners.add(lastAlive); return true; } return false; } public void startEnd() { canTalk = false; gameState = GameState.End; for (GamePlayer gp : gamePlayers) { for(GamePlayer gamePlayer : gamePlayers){ gamePlayer.getPlayer().showPlayer(gp.getPlayer()); } gp.resetPlayerManually(); } if (FileHandler.ConfigFile.getFile().contains("commandsOnWin")) { for (String s : FileHandler.ConfigFile.getFile().getStringList("commandsOnWin")) { String command = ""; if (s.contains("{PLAYER}")) { command = s.replace("{PLAYER}", winners.get(0).getPlayer().getName()); } else { command = s; } Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), command); } } new EndTimer(this); } public void joinGame(Player player) { if (HotPotato.findGame(player) != null) { MessageUtil.sendTextMessage(player, "alreadyInGame"); return; } if (FileHandler.ConfigFile.getFile().getInt("maxPlayers") <= getGamePlayers().size()) { MessageUtil.sendTextMessage(player, "maxPlayersReached"); return; } GamePlayer gamePlayer = new GamePlayer(this, player); gamePlayers.add(gamePlayer); if (gameState == GameState.Live) { gamePlayer.makeSpecator(); } else { gamePlayer.getPlayer().teleport(game.getLobbyLocation()); MessageUtil.sendTextMessage(player, "onArenaJoin"); } } public void giveRandomPotato() { if (getAlivePlayers().size() <= 1) { return; } GamePlayer gp = getAlivePlayers().get(new Random().nextInt((getAlivePlayers().size() - 1))); gp.getPlayer().getInventory().setHelmet(new ItemStack(Material.TNT)); gp.getPlayer().getInventory().addItem(ItemUtil.potato()); potatoPlayer = gp.getPlayer(); for (GamePlayer gamePlayer : gamePlayers) { MessageUtil.sendTextMessage(gamePlayer.getPlayer(), "newPotato", gp.getPlayer().getName()); } new PotatoTimer(this); } public void givePotato(Player player) { potatoPlayer.getInventory().remove(ItemUtil.potato()); potatoPlayer.getInventory().setHelmet(null); for (GamePlayer gamePlayer : gamePlayers) { MessageUtil.sendTextMessage(gamePlayer.getPlayer(), "newPotatoTimeContinued", player.getName()); } potatoPlayer = player; player.getInventory().setHelmet(new ItemStack(Material.TNT)); player.getInventory().addItem(ItemUtil.potato()); } public void eliminatePlayer() { GamePlayer gamePlayer = findPlayer(potatoPlayer); for (GamePlayer gamePlayerz : gamePlayers) { MessageUtil.sendTextMessage(gamePlayerz.getPlayer(), "playerDeath", gamePlayer.getPlayer().getName()); } gamePlayer.makeSpecator(); giveRandomPotato(); } public List<GamePlayer> getAlivePlayers() { List<GamePlayer> alive = new ArrayList<GamePlayer>(); for (GamePlayer gamePlayer : gamePlayers) { if (gamePlayer.isAlive()) { alive.add(gamePlayer); } } return alive; } public GamePlayer findPlayer(Player player) { for (GamePlayer gp : gamePlayers) { if (gp.getPlayer() == player) { return gp; } } return null; } public void endGame() { canTalk = true; resetGame(); } public GameState getGameState() { return gameState; } public void setGameState(GameState gameState) { this.gameState = gameState; } public Game getGame() { return game; } public void setGame(Game game) { this.game = game; } public String getGameName() { return gameName; } public void setGameName(String gameName) { this.gameName = gameName; } public boolean isForceStop() { return forceStop; } public void setForceStop(boolean forceStop) { this.forceStop = forceStop; } public boolean isForceStart() { return forceStart; } public void setForceStart(boolean forceStart) { this.forceStart = forceStart; } public List<GamePlayer> getGamePlayers() { return gamePlayers; } public void setGamePlayers(List<GamePlayer> gamePlayers) { this.gamePlayers = gamePlayers; } public List<GamePlayer> getWinners() { return winners; } public void setWinners(List<GamePlayer> winners) { this.winners = winners; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public boolean isStarting() { return starting; } public void setStarting(boolean starting) { this.starting = starting; } public boolean isCanTalk() { return canTalk; } public void setCanTalk(boolean canTalk) { this.canTalk = canTalk; } public boolean isCanMove() { return canMove; } public void setCanMove(boolean canMove) { this.canMove = canMove; } public Player getPotatoPlayer() { return potatoPlayer; } public void setPotatoPlayer(Player potatoPlayer) { this.potatoPlayer = potatoPlayer; } }