Newer
Older
ChallengesJoinEntities / src / main / java / de / fanta / challengesjoinentities / Config.java
package de.fanta.challengesjoinentities;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;

import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;

public class Config {

    private static ChallengesJoinEntities plugin;
    private static Set<Server> challengeServers;
    private static Set<Server> adventureServers;

    public Config(ChallengesJoinEntities plugin) {
        Config.plugin = plugin;
        challengeServers = new HashSet<>();
        adventureServers = new HashSet<>();

        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 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, 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, server.getString("gpLocation"), server.getString("dir"), ServerType.ADVENTURE, plugin, location));
            }
        }

    }

    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 this.challengeServers.stream().filter(server -> !server.isOnline()).findFirst();
    }

    public Optional<Server> getOnlineAdventureServer() {
        return this.adventureServers.stream().filter(server -> !server.isOnline()).findFirst();
    }
}