
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