Newer
Older
ChallengeSystem / Lobby / src / main / java / de / fanta / lobby / Config.java
@fanta fanta on 26 Jun 2024 5 KB teleport allow list :>
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);
    }
}