package de.tobiyas.racesandclasses.addins.spawning; import java.io.File; import java.io.IOException; import java.util.HashSet; import java.util.Set; import org.bukkit.Location; import de.tobiyas.racesandclasses.RacesAndClasses; import de.tobiyas.util.config.YAMLConfigExtended; public class RaceSpawnManager { /** * The Set of spawns. */ private final Set<RaceSpawn> spawns = new HashSet<RaceSpawn>(); private final File saveDir; private final File saveFile; private final YAMLConfigExtended config; public RaceSpawnManager(RacesAndClasses plugin) { File addinFolder = new File(plugin.getDataFolder(), "addins"); this.saveDir = new File(addinFolder, "spawns"); this.saveFile = new File(saveDir, "spawns.yml"); if(!addinFolder.exists()) addinFolder.mkdirs(); if(!saveDir.exists()) saveDir.mkdirs(); if(!saveFile.exists()) try{ saveFile.createNewFile(); }catch(IOException exp){} config = new YAMLConfigExtended(saveFile); } /** * loads all spawns. */ public void load(){ spawns.clear(); config.load(); for(String rootChild : config.getRootChildren()){ Location spawnLoc = config.getLocation(rootChild + ".spawn"); String race = config.getString(rootChild + ".race"); if(spawnLoc != null && race != null ) { RaceSpawn spawn = new RaceSpawn(race, spawnLoc); spawns.add(spawn); } } } /** * Saves the config for the Spawns. * * @param async if sync or not. */ public void save(boolean async){ config.clearConfig(); for(RaceSpawn spawn : spawns){ String race = spawn.getRace(); Location loc = spawn.getSpawnLocation(); config.set(race + ".race", race); config.set(race + ".spawn", loc); } if(async) config.saveAsync(); else config.save(); } /** * Sets a race spawn. * * @param race to set to * @param loc to set */ public void setRaceSpawn(String race, Location loc){ if(race == null || loc == null) return; for(RaceSpawn spawn : spawns){ if(spawn.getRace().equalsIgnoreCase(race)){ spawns.remove(spawn); break; } } spawns.add(new RaceSpawn(race, loc)); } /** * Returns the Spawn for the Race container. * Can be null if no Spawn found. * * @param race to search for. * * @return the location to spawn. Null if not present */ public Location getSpawnForRace(String race){ for(RaceSpawn spawn : spawns){ if(spawn.getRace().equalsIgnoreCase(race)){ return spawn.getSpawnLocation(); } } return null; } }