package com.leontg77.uhc.cmds; import static com.leontg77.uhc.Main.plugin; import java.io.File; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.TimeZone; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scoreboard.Team; import com.leontg77.uhc.Fireworks; import com.leontg77.uhc.Game; import com.leontg77.uhc.Main; import com.leontg77.uhc.Parkour; import com.leontg77.uhc.Scoreboards; import com.leontg77.uhc.Settings; import com.leontg77.uhc.Spectator; import com.leontg77.uhc.Spectator.SpecInfo; import com.leontg77.uhc.State; import com.leontg77.uhc.Teams; import com.leontg77.uhc.Timers; import com.leontg77.uhc.User; import com.leontg77.uhc.User.Stat; import com.leontg77.uhc.scenario.Scenario; import com.leontg77.uhc.scenario.ScenarioManager; import com.leontg77.uhc.utils.GameUtils; import com.leontg77.uhc.utils.PlayerUtils; import com.leontg77.uhc.worlds.WorldManager; /** * End command class. * * @author LeonTG77 */ public class EndCommand implements CommandExecutor { @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (!sender.hasPermission("uhc.end")) { sender.sendMessage(Main.NO_PERM_MSG); return true; } if (args.length < 2) { sender.sendMessage(Main.PREFIX + "Usage: /end <kills> <winners>"); return true; } int kills; try { kills = Integer.parseInt(args[0]); } catch (Exception e) { sender.sendMessage(ChatColor.RED + args[0] + " is not a vaild number."); return true; } Settings settings = Settings.getInstance(); ArrayList<String> winners = new ArrayList<String>(); PlayerUtils.broadcast(Main.PREFIX + "The game is now over!"); PlayerUtils.broadcast(" "); PlayerUtils.broadcast(Main.PREFIX + "The winners are:"); for (int i = 1; i < args.length; i++) { OfflinePlayer winner = PlayerUtils.getOfflinePlayer(args[i]); User data = User.get(winner); data.increaseStat(Stat.WINS); PlayerUtils.broadcast("�8� �7" + args[i]); winners.add(args[i]); } PlayerUtils.broadcast(" "); PlayerUtils.broadcast(Main.PREFIX + "With �a" + kills + "�7 kills."); PlayerUtils.broadcast(Main.PREFIX + "View the hall of fame with �a/hof"); PlayerUtils.broadcast(" "); PlayerUtils.broadcast(Main.PREFIX + "Congrats on the win and thanks for playing!"); TimeZone.setDefault(TimeZone.getTimeZone("UTC")); String host = GameUtils.getCurrentHost(); DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); Date date = new Date(); int matchcount = 1; if (settings.getHOF().contains(host)) { matchcount = settings.getHOF().getConfigurationSection(host).getKeys(false).size() + 1; } settings.getHOF().set(host + "." + matchcount + ".date", dateFormat.format(date)); settings.getHOF().set(host + "." + matchcount + ".winners", winners); settings.getHOF().set(host + "." + matchcount + ".kills", kills); settings.getHOF().set(host + "." + matchcount + ".teamsize", GameUtils.getTeamSize().trim()); settings.getHOF().set(host + "." + matchcount + ".scenarios", Game.getInstance().getScenarios()); settings.saveHOF(); for (Scenario scen : ScenarioManager.getInstance().getEnabledScenarios()) { scen.disable(); } Fireworks firework = Fireworks.getInstance(); Parkour parkour = Parkour.getInstance(); Spectator spec = Spectator.getInstance(); Game game = Game.getInstance(); for (Player online : PlayerUtils.getPlayers()) { for (Player onlineTwo : PlayerUtils.getPlayers()) { online.showPlayer(onlineTwo); onlineTwo.showPlayer(online); } if (spec.isSpectating(online)) { spec.disableSpecmode(online, true); } online.setGameMode(GameMode.SURVIVAL); online.teleport(Main.getSpawn()); online.setMaxHealth(20.0); online.setFireTicks(0); User user = User.get(online); user.reset(); } HandlerList.unregisterAll(new SpecInfo()); State.setState(State.LOBBY); firework.startFireworkShow(); parkour.setup(); spec.spectators.clear(); TeamCommand.savedTeams.clear(); SpecInfo.totalDiamonds.clear(); SpecInfo.totalGold.clear(); Main.teamKills.clear(); Main.kills.clear(); Bukkit.getServer().setIdleTimeout(60); Main.plugin.saveData(); game.setScenarios("games running"); game.setMatchPost("none"); game.setTeamSize(0); game.setFFA(true); Teams teams = Teams.getInstance(); Team team = teams.getTeam("spec"); for (String member : team.getEntries()) { team.removeEntry(member); } for (OfflinePlayer whitelisted : Bukkit.getWhitelistedPlayers()) { whitelisted.setWhitelisted(false); } new BukkitRunnable() { public void run() { Scoreboards board = Scoreboards.getInstance(); for (String entry : board.board.getEntries()) { board.resetScore(entry); } Teams teams = Teams.getInstance(); for (Team team : teams.getTeams()) { for (String member : team.getEntries()) { team.removeEntry(member); } } PlayerUtils.broadcast(Main.PREFIX + "Reset scoreboards and teams."); WorldManager manager = WorldManager.getInstance(); for (World world : GameUtils.getGameWorlds()) { manager.deleteWorld(world); } PlayerUtils.broadcast(Main.PREFIX + "Deleted used worlds."); } }.runTaskLater(Main.plugin, 600); File playerData = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "playerdata"); File stats = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "stats"); for (File dataFiles : playerData.listFiles()) { dataFiles.delete(); } for (File statsFiles : stats.listFiles()) { statsFiles.delete(); } try { Bukkit.getServer().getScheduler().cancelTask(Timers.taskMinutes); } catch (Exception e) { plugin.getLogger().warning("Could not cancel task " + Timers.taskMinutes); } try { Bukkit.getServer().getScheduler().cancelTask(Timers.taskSeconds); } catch (Exception e) { plugin.getLogger().warning("Could not cancel task " + Timers.taskSeconds); } return true; } }