package de.fanta.lobby;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Steerable;
import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
public class Config {
private static Lobby plugin;
private static Set<Server> challengeServers;
private static Set<Server> adventureServers;
private static List<String> allowTeleportWorlds;
public Config(Lobby plugin) {
Config.plugin = plugin;
challengeServers = new HashSet<>();
adventureServers = new HashSet<>();
allowTeleportWorlds = new ArrayList<>();
if (Bukkit.getPluginManager().getPlugin("Challenges") == null) {
plugin.saveDefaultConfig();
reloadConfig();
}
}
public static void reloadConfig() {
plugin.reloadConfig();
FileConfiguration config = plugin.getConfig();
ConfigurationSection piglinsSection = config.getConfigurationSection("piglins");
if (piglinsSection != null) {
for (String serverName : piglinsSection.getKeys(false)) {
ConfigurationSection piglin = piglinsSection.getConfigurationSection(serverName);
plugin.addPiglin(UUID.fromString(piglin.getString("uuid")), serverName, piglin.getString("gpLocation"), piglin.getString("displayName"), false);
plugin.getGlobalDataHelper().requestInitialData(serverName);
}
}
ConfigurationSection filaPathSection = config.getConfigurationSection("fileLocations");
if (filaPathSection != null) {
plugin.setChallengeSavePath(new File(filaPathSection.getString("challengeSaves")).toPath());
plugin.setAdventureSavePath(new File(filaPathSection.getString("adventureSaves")).toPath());
plugin.setAventureMapsPath(new File(filaPathSection.getString("adventureMaps")).toPath());
plugin.setServerJarsPath(new File(filaPathSection.getString("serverJars")).toPath());
plugin.setServerFolderPath(new File(filaPathSection.getString("serverFolder")).toPath());
}
ConfigurationSection challengeServerSection = config.getConfigurationSection("challenge");
if (challengeServerSection != null) {
for (String serverName : challengeServerSection.getKeys(false)) {
ConfigurationSection server = challengeServerSection.getConfigurationSection(serverName);
ConfigurationSection locSection = server.getConfigurationSection("location");
World world = Bukkit.getWorld(locSection.getString("world"));
double x = locSection.getDouble("x");
double y = locSection.getDouble("y");
double z = locSection.getDouble("z");
float yaw = (float) locSection.getDouble("yaw");
Location location = new Location(world, x, y, z, yaw, 0.0F);
challengeServers.add(new Server(serverName, null, server.getString("gpLocation"), server.getString("dir"), ServerType.CHALLENGES, plugin, location));
}
}
ConfigurationSection adventureServerSection = config.getConfigurationSection("adventure");
if (adventureServerSection != null) {
for (String serverName : adventureServerSection.getKeys(false)) {
ConfigurationSection server = adventureServerSection.getConfigurationSection(serverName);
ConfigurationSection locSection = server.getConfigurationSection("location");
World world = Bukkit.getWorld(locSection.getString("world"));
double x = locSection.getDouble("x");
double y = locSection.getDouble("y");
double z = locSection.getDouble("z");
float yaw = (float) locSection.getDouble("yaw");
Location location = new Location(world, x, y, z, yaw, 0.0F);
adventureServers.add(new Server(serverName, null, server.getString("gpLocation"), server.getString("dir"), ServerType.ADVENTURE, plugin, location));
}
}
allowTeleportWorlds = config.getStringList("teleportworlds");
}
public void savePiglin(JoinEntityData data) {
FileConfiguration config = plugin.getConfig();
ConfigurationSection piglinsSection = config.getConfigurationSection("piglins");
if (piglinsSection == null) {
config.createSection("piglins");
piglinsSection = config.getConfigurationSection("piglins");
}
ConfigurationSection piglin = piglinsSection.createSection(data.getServerName());
piglin.set("uuid", data.getEntityUUID().toString());
piglin.set("gpLocation", data.getGlobalPortLocationName());
piglin.set("displayName", data.getServerDisplayName());
plugin.saveConfig();
}
public void removePiglin(String serverName) {
FileConfiguration config = plugin.getConfig();
ConfigurationSection piglinsSection = config.getConfigurationSection("piglins");
piglinsSection.set(serverName, null);
plugin.saveConfig();
}
public Set<Server> getChallengeServers() {
return challengeServers;
}
public Set<Server> getAdventureServers() {
return adventureServers;
}
public Optional<Server> getOnlineChanllengeServer() {
return challengeServers.stream().filter(server -> !server.isOnline()).findFirst();
}
public Optional<Server> getOnlineAdventureServer() {
return adventureServers.stream().filter(server -> !server.isOnline()).findFirst();
}
public boolean isAllowedTeleportWorld(String worldName) {
return allowTeleportWorlds.contains(worldName);
}
}