package me.maker56.survivalgames.game.phases; import java.util.Collections; import java.util.List; import me.maker56.survivalgames.SurvivalGames; import me.maker56.survivalgames.Util; import me.maker56.survivalgames.arena.Arena; import me.maker56.survivalgames.commands.messages.MessageHandler; import me.maker56.survivalgames.game.Game; import me.maker56.survivalgames.game.GameState; import me.maker56.survivalgames.user.SpectatorUser; import me.maker56.survivalgames.user.User; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitTask; import org.bukkit.util.Vector; public class DeathmatchPhase { private int time = 600, starttime = time; private BukkitTask task; private Game game; public DeathmatchPhase(Game game) { this.game = game; } public void load() { game.setScoreboardPhase(SurvivalGames.getScoreboardManager().getNewScoreboardPhase(GameState.DEATHMATCH)); start(); } public void start() { game.sendMessage(MessageHandler.getMessage("game-deathmatch-start")); game.setState(GameState.DEATHMATCH); List<Location> spawns = game.getCurrentArena().getDeathmatchSpawns(); int i = 0; for(User user : game.getUsers()) { if(i >= spawns.size()) i = 0; user.getPlayer().teleport(spawns.get(i)); i++; } Location suloc = spawns.get(0); for(SpectatorUser su : game.getSpecators()) { su.getPlayer().teleport(suloc); Vector v = new Vector(0, 2, 0); v.multiply(1.25); su.getPlayer().getLocation().setDirection(v); } task = Bukkit.getScheduler().runTaskTimer(SurvivalGames.instance, new Runnable() { public void run() { if(time == 60) { game.sendMessage(MessageHandler.getMessage("game-deathmatch-timeout-warning")); } if(time % 60 == 0 && time != 0) { game.sendMessage(MessageHandler.getMessage("game-deathmatch-timeout").replace("%0%", Util.getFormatedTime(time))); } else if(time % 10 == 0 && time < 60 && time > 10) { game.sendMessage(MessageHandler.getMessage("game-deathmatch-timeout").replace("%0%", Util.getFormatedTime(time))); } else if(time <= 10 && time > 0) { game.sendMessage(MessageHandler.getMessage("game-deathmatch-timeout").replace("%0%", Util.getFormatedTime(time))); } else if(time == 0) { Arena a = game.getCurrentArena(); User user = null; if(a.isDomeEnabled()) { double nearest = a.getDomeRadius() + 50; for(User u : game.getUsers()) { double distance = a.domeDistance(u.getPlayer().getLocation()); if(distance <= nearest) { nearest = distance; user = u; } } } else { Collections.shuffle(game.getUsers()); user = game.getUsers().get(0); } for(User u : game.getUsers()) { if(!u.equals(user)) { u.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 10000000, 3)); } } } game.updateScoreboard(); time--; } }, 0L, 20L); } public int getTime() { return time; } public void cancelTask() { if(task != null) task.cancel(); } public int getStartTime() { return starttime; } }