package hu.battlecraft.PVP; import java.util.ArrayList; import java.util.List; import hu.battlecraft.BattleCraft; import hu.battlecraft.Misc.Helper; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.entity.Player; public class PVPMatch { public int ID; public MapTemplate template; public Integer ElapsedSeconds; public boolean Started = false; public String world_name; public List Player_names; public PVPMatch(String world_name, MapTemplate template, Player[] players){ this.template = template; this.Player_names = new ArrayList(); for(Player p : players){ Player_names.add(p.getName()); } this.Started = false; this.world_name = world_name; if(Bukkit.getWorld(world_name) == null){ Close(); } for(Player p : players){ p.teleport(Bukkit.getWorld(world_name).getSpawnLocation()); } } public void Close(){ if(Bukkit.getWorld(world_name) != null){ for (Player player : Bukkit.getWorld(world_name).getPlayers()) { player.teleport(Bukkit.getServer().getWorld("lobby").getSpawnLocation()); player.sendMessage("A világ amiben voltál többé nem létezik!"); } if(Bukkit.getWorld(world_name).getLoadedChunks() != null && Bukkit.getWorld(world_name).getLoadedChunks().length > 0){ for(Chunk c : Bukkit.getWorld(world_name).getLoadedChunks()){ c.unload(false, true); } } BattleCraft.access.forceUnloadWorld(Bukkit.getWorld(world_name)); BattleCraft.access.clearWorldReference(world_name); Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(BattleCraft.inst, new WorldDeleter(world_name), 80); } } private class WorldDeleter implements Runnable { String[] worlds; static final long retryDelay = 30; static final int maxRetries = 5; int attempt; public WorldDeleter(String name) { attempt = 0; worlds = new String[1]; worlds[0] = name; } public void run() { boolean allGood = true; for ( String world : worlds ) allGood = allGood && Helper.deleteWorld(world); if ( !allGood ) if ( attempt < maxRetries ) { BattleCraft.logger.info("Retrying world data deletion..."); attempt++; Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(BattleCraft.inst, this, retryDelay); return; } else BattleCraft.logger.warning("Failed to delete some world information!"); } } }