All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.handyplus.lib.util.HandyConfigUtil Maven / Gradle / Ivy

The newest version!
package cn.handyplus.lib.util;

import cn.handyplus.lib.InitApi;
import cn.handyplus.lib.constants.BaseConstants;
import cn.handyplus.lib.constants.LanguageTypeEnum;
import cn.handyplus.lib.constants.VersionCheckEnum;
import cn.handyplus.lib.core.CollUtil;
import cn.handyplus.lib.core.StrUtil;
import lombok.SneakyThrows;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;

/**
 * 配置管理类
 *
 * @author handy
 * @since 2.8.2
 */
public class HandyConfigUtil {

    private HandyConfigUtil() {
    }

    /**
     * 加载config
     *
     * @return config
     */
    public static FileConfiguration loadConfig() {
        BaseConstants.CONFIG = load("config.yml");
        return setConfig(BaseConstants.CONFIG);
    }

    /**
     * 加载语言文件
     *
     * @param language 语言配置类型
     * @return config
     * @since 3.4.5
     */
    public static FileConfiguration loadLangConfig(String language) {
        return loadLangConfig(language, false);
    }

    /**
     * 加载语言文件
     *
     * @param language   语言配置类型
     * @param isI18nJson 是否加载汉化
     * @return config
     * @since 3.4.5
     */
    public static FileConfiguration loadLangConfig(String language, boolean isI18nJson) {
        FileConfiguration langConfig = HandyConfigUtil.load("languages/" + language + ".yml");
        // 加载语言到jar
        BaseConstants.LANG_CONFIG = langConfig;
        if (isI18nJson) {
            LanguageTypeEnum languageType = LanguageTypeEnum.getByValue(language);
            if (languageType == null) {
                initItemJson();
            } else {
                initI18nJson(languageType);
            }
        }
        return langConfig;
    }

    /**
     * 加载文件
     *
     * @param child 文件路径
     * @return fileConfiguration 文件
     */
    public static FileConfiguration load(String child) {
        File langFile = new File(InitApi.PLUGIN.getDataFolder(), child);
        if (!(langFile.exists())) {
            InitApi.PLUGIN.saveResource(child, false);
        }
        return YamlConfiguration.loadConfiguration(langFile);
    }

    /**
     * 加载目录下全部文件
     *
     * @param directoryStr 目录
     * @return 全部文件
     * @since 3.1.6
     */
    public static Map loadDirectory(String directoryStr) {
        Map map = new HashMap<>();
        File directory = new File(InitApi.PLUGIN.getDataFolder(), directoryStr);
        if (!(directory.exists())) {
            InitApi.PLUGIN.saveResource(directoryStr, false);
        }
        // 获取全部配置
        File[] spawnFileList = directory.listFiles();
        if (spawnFileList == null) {
            return map;
        }
        // 循环加载文件
        for (File file : spawnFileList) {
            map.put(file.getName(), load(directoryStr + file.getName()));
        }
        return map;
    }

    /**
     * 创建文件
     *
     * @param fileName 文件名
     * @return true成功
     * @since 3.3.0
     */
    @SneakyThrows
    public static boolean createNewFile(String fileName) {
        File file = new File(InitApi.PLUGIN.getDataFolder(), fileName);
        if (!file.exists()) {
            return file.createNewFile();
        }
        return true;
    }

    /**
     * 设置节点
     *
     * @param fileConfiguration 文件
     * @param path              yml节点
     * @param value             内容
     * @param child             文件路径
     */
    public static void setPath(FileConfiguration fileConfiguration, String path, Object value, String child) {
        setPath(fileConfiguration, path, value, null, child);
    }

    /**
     * 设置节点
     *
     * @param fileConfiguration 文件
     * @param path              yml节点
     * @param value             内容
     * @param comments          注释
     * @param child             文件路径
     */
    public static void setPath(FileConfiguration fileConfiguration, String path, Object value, List comments, String child) {
        try {
            fileConfiguration.set(path, value);
            if (CollUtil.isNotEmpty(comments) && BaseConstants.VERSION_ID >= VersionCheckEnum.V_1_18.getVersionId()) {
                fileConfiguration.setComments(path, comments);
            }
            fileConfiguration.save(new File(InitApi.PLUGIN.getDataFolder(), child));
        } catch (IOException e) {
            Bukkit.getLogger().log(Level.SEVERE, "setPath 发生异常", e);
        } catch (NoSuchMethodError ignored) {
        }
    }

    /**
     * 判断是否包含 然后设置节点
     *
     * @param fileConfiguration 文件
     * @param path              yml节点
     * @param value             内容
     * @param comments          注释
     * @param child             文件路径
     */
    public static void setPathIsNotContains(FileConfiguration fileConfiguration, String path, Object value, List comments, String child) {
        if (fileConfiguration.contains(path)) {
            return;
        }
        setPath(fileConfiguration, path, value, comments, child);
    }

    /**
     * 判断文件是否存在
     *
     * @param child 文件路径
     * @return true 存在
     * @since 3.6.2
     */
    public static boolean exists(String child) {
        File file = new File(InitApi.PLUGIN.getDataFolder(), child);
        return file.exists();
    }

    /**
     * 获取节点下的数据map
     *
     * @param config 配置
     * @param type   类型
     * @return 数据map
     * @since 3.3.4
     */
    public static Map getStringMapChild(FileConfiguration config, String type) {
        Map map = new LinkedHashMap<>();
        Map values = getChildMap(config, type);
        for (String key : values.keySet()) {
            map.put(key, config.getString(type + "." + key));
        }
        return map;
    }

    /**
     * 获取节点下的数据map
     *
     * @param config 配置
     * @param type   类型
     * @return 数据map
     * @since 3.5.8
     */
    public static Map> getStringListMapChild(FileConfiguration config, String type) {
        Map> map = new LinkedHashMap<>();
        Map values = getChildMap(config, type);
        for (String key : values.keySet()) {
            map.put(key, config.getStringList(type + "." + key));
        }
        return map;
    }

    /**
     * 获取节点下的数据map
     *
     * @param config 配置
     * @param type   类型
     * @return 数据map
     * @since 3.6.9
     */
    public static Map getChildMap(FileConfiguration config, String type) {
        if (StrUtil.isEmpty(type)) {
            return config.getValues(false);
        }
        Map map = new LinkedHashMap<>();
        ConfigurationSection configurationSection = config.getConfigurationSection(type);
        if (configurationSection == null) {
            return map;
        }
        return configurationSection.getValues(false);
    }

    /**
     * 获取节点key
     *
     * @param config 配置
     * @param type   类型
     * @return keys
     * @since 3.7.9
     */
    public static Set getKey(FileConfiguration config, String type) {
        if (StrUtil.isEmpty(type)) {
            return config.getKeys(false);
        }
        Set set = new HashSet<>();
        ConfigurationSection configurationSection = config.getConfigurationSection(type);
        if (configurationSection == null) {
            return set;
        }
        return configurationSection.getKeys(false);
    }

    /**
     * 加载物品汉化文件
     */
    private static void initI18nJson(LanguageTypeEnum language) {
        // 优先加载json
        File zhChFile = new File(InitApi.PLUGIN.getDataFolder(), language.getValue() + ".json");
        if (zhChFile.exists()) {
            BaseUtil.readJsonFileToJsonCacheMap(zhChFile);
        } else {
            // 获取json文件
            HandyHttpUtil.getI18nJson(language);
        }
        // 加载item.json
        initItemJson();
        // 云汉化处理
        if (BaseConstants.IS_CLOUD_ITEM) {
            // 获取云汉化
            HandyHttpUtil.setCloudItemJsonCacheMap(BaseConstants.VERSION_CHECK_ENUM.getMainVersion());
            // 自动同步自定义汉化
            HandyHttpUtil.setItemName();
        }
    }

    /**
     * 加载item.json
     *
     * @since 2.9.9
     */
    private static void initItemJson() {
        File itemFile = new File(InitApi.PLUGIN.getDataFolder(), "item.json");
        if (!itemFile.exists()) {
            InitApi.PLUGIN.saveResource("item.json", false);
        }
        try {
            BaseUtil.readJsonFileToItemJsonCacheMap(itemFile);
        } catch (Exception e) {
            MessageUtil.sendConsoleMessage("item.json 加载失败,原因:json格式异常");
        }
    }

    /**
     * 设置配置
     *
     * @param config 配置
     */
    private static FileConfiguration setConfig(FileConfiguration config) {
        // 扩展信息赋值
        BaseConstants.DEBUG = BaseConstants.CONFIG.getBoolean("debug");
        BaseConstants.IS_CLOUD_ITEM = BaseConstants.CONFIG.getBoolean("isCloudItem", true);
        return config;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy