package com.walrusone.skywars.controllers;
import java.io.File;
import java.util.ArrayList;
import java.util.Map;
import com.google.common.collect.Maps;
import com.walrusone.skywars.SkyWarsReloaded;
import com.walrusone.skywars.game.GameMap;
public class MapController {
private File dataDirectory;
private File maps;
private File rootDirectory;
private final Map<String, GameMap> mapList = Maps.newHashMap();
private ArrayList<String> editMaps = new ArrayList<String>();
public MapController() {
dataDirectory = SkyWarsReloaded.get().getDataFolder();
maps = new File (dataDirectory, "maps");
String root = SkyWarsReloaded.get().getServer().getWorldContainer().getAbsolutePath();
rootDirectory = new File(root);
if (maps.exists() && maps.isDirectory()) {
for (File map : maps.listFiles()) {
if (map.isDirectory()) {
registerMap(map.getName());
editMaps.add(map.getName().toLowerCase());
}
}
} else {
SkyWarsReloaded.get().getLogger().info("Maps directory is missing or no Maps were found!");
}
}
public boolean registerMap(String name) {
boolean result;
WorldController wc = SkyWarsReloaded.getWC();
File source = new File(maps, name);
File target = new File(rootDirectory, name);
wc.copyWorld(source, target);
boolean mapExists = false;
if(target.isDirectory()) {
if(target.list().length > 0) {
mapExists = true;
}
}
if (mapExists) {
SkyWarsReloaded.getWC().deleteWorld(name);
}
wc.copyWorld(source, target);
boolean loaded = SkyWarsReloaded.getWC().loadWorld(name);
if(loaded) {
GameMap gameMap = new GameMap(name, source);
if (gameMap.containsSpawns()) {
mapList.put(name.toLowerCase(), gameMap);
SkyWarsReloaded.get().getLogger().info("Registered Map " + name + "!");
result = true;
} else {
if (name.equalsIgnoreCase("lobby")) {
SkyWarsReloaded.get().getLogger().info("Could Not Register Map: " + name + " - Map must have at least 1 Spawn Point!");
result = false;;
} else {
SkyWarsReloaded.get().getLogger().info("Could Not Register Map: " + name + " - Map must have at least 2 Spawn Points");
result = false;
}
}
} else {
SkyWarsReloaded.get().getLogger().info("Could Not Load Map: " + name);
result = false;
}
SkyWarsReloaded.getWC().deleteWorld(name);
return result;
}
public GameMap getMap(String name){
return mapList.get(name);
}
public ArrayList<GameMap> getRegisteredMaps() {
return new ArrayList<GameMap>(mapList.values());
}
public void removeMap(String name){
mapList.remove(name.toLowerCase());
}
public ArrayList<String> getMaps() {
return new ArrayList<String>(mapList.keySet());
}
public void addEditMap(String name) {
editMaps.add(name.toLowerCase());
}
public void removeEditMap(String name) {
editMaps.remove(name.toLowerCase());
}
public ArrayList<String> getEditMaps() {
return editMaps;
}
public boolean mapExists(String name) {
if (editMaps.contains(name.toLowerCase())) {
return true;
}
return false;
}
public boolean mapRegistered(String name) {
if (mapList.containsKey(name.toLowerCase())) {
return true;
}
return false;
}
}