diff --git a/velocity/src/main/java/com/alttd/chat/config/Config.java b/velocity/src/main/java/com/alttd/chat/config/Config.java index a0030db..c619fc2 100644 --- a/velocity/src/main/java/com/alttd/chat/config/Config.java +++ b/velocity/src/main/java/com/alttd/chat/config/Config.java @@ -4,6 +4,7 @@ import com.google.common.base.Throwables; import com.google.common.collect.Lists; import com.google.common.reflect.TypeToken; import ninja.leaping.configurate.ConfigurationNode; +import ninja.leaping.configurate.ConfigurationOptions; import ninja.leaping.configurate.objectmapping.ObjectMappingException; import ninja.leaping.configurate.yaml.YAMLConfigurationLoader; import org.yaml.snakeyaml.DumperOptions; @@ -52,14 +53,11 @@ public final class Config { } try { - config = configLoader.load(); + config = configLoader.load(ConfigurationOptions.defaults().setHeader(HEADER)); } catch (IOException e) { e.printStackTrace(); } - configLoader.getDefaultOptions().setHeader(HEADER); - configLoader.getDefaultOptions().withShouldCopyDefaults(true); - verbose = getBoolean("verbose", true); version = getInt("config-version", 1); @@ -152,8 +150,9 @@ public final class Config { private static ConfigurationNode getNode(String path) { if(config.getNode(splitPath(path)).isVirtual()) { - new RegexConfig("Dummy"); + //new RegexConfig("Dummy"); } + config.getChildrenMap(); return config.getNode(splitPath(path)); } diff --git a/velocity/src/main/java/com/alttd/chat/config/RegexConfig.java b/velocity/src/main/java/com/alttd/chat/config/RegexConfig.java index 45b853c..cadf506 100644 --- a/velocity/src/main/java/com/alttd/chat/config/RegexConfig.java +++ b/velocity/src/main/java/com/alttd/chat/config/RegexConfig.java @@ -1,73 +1,171 @@ package com.alttd.chat.config; +import com.google.common.base.Throwables; import com.google.common.reflect.TypeToken; +import ninja.leaping.configurate.ConfigurationNode; +import ninja.leaping.configurate.ConfigurationOptions; +import ninja.leaping.configurate.commented.CommentedConfigurationNode; +import ninja.leaping.configurate.hocon.HoconConfigurationLoader; import ninja.leaping.configurate.objectmapping.ObjectMappingException; +import ninja.leaping.configurate.yaml.YAMLConfigurationLoader; +import org.yaml.snakeyaml.DumperOptions; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.regex.Pattern; public final class RegexConfig { private static final Pattern PATH_PATTERN = Pattern.compile("\\."); + private static final String HEADER = + "This file is used to store all of the chatfilters used in the Altitude Chat plugin.\n" + + "Nodes must be build in this format.\n" + + "TODO update this format\n"; - private final String regexName; - private final String configPath; - // TODO move this into regex.yml? - public RegexConfig(String regexName) { - this.regexName = regexName; - this.configPath = "regex-settings." + this.regexName + "."; - init(); + private static File CONFIG_FILE; + public static ConfigurationNode config; + public static YAMLConfigurationLoader configLoader; + + static int version; + static boolean verbose; + + public static void init(File path) { + CONFIG_FILE = new File(path, "filters.yml");; + configLoader = YAMLConfigurationLoader.builder() + .setFile(CONFIG_FILE) + .setFlowStyle(DumperOptions.FlowStyle.BLOCK) + .build(); + + if (!CONFIG_FILE.getParentFile().exists()) { + if(!CONFIG_FILE.getParentFile().mkdirs()) { + return; + } + } + if (!CONFIG_FILE.exists()) { + try { + if(!CONFIG_FILE.createNewFile()) { + return; + } + } catch (IOException error) { + error.printStackTrace(); + } + } + + try { + config = configLoader.load(ConfigurationOptions.defaults().setHeader(HEADER)); + } catch (IOException e) { + e.printStackTrace(); + } + + verbose = getBoolean("verbose", true); + version = getInt("config-version", 1); + + readConfig(Config.class, null); + try { + configLoader.save(config); + } catch (IOException e) { + e.printStackTrace(); + } } - public void init() { - Config.readConfig(RegexConfig.class, this); - Config.saveConfig(); + public static void readConfig(Class clazz, Object instance) { + for (Method method : clazz.getDeclaredMethods()) { + if (Modifier.isPrivate(method.getModifiers())) { + if (method.getParameterTypes().length == 0 && method.getReturnType() == Void.TYPE) { + try { + method.setAccessible(true); + method.invoke(instance); + } catch (InvocationTargetException | IllegalAccessException ex) { + throw Throwables.propagate(ex.getCause()); + } + } + } + } + try { + configLoader.save(config); + } catch (IOException ex) { + throw Throwables.propagate(ex.getCause()); + } } - public static Object[] splitPath(String key) { + private static Object[] splitPath(String key) { return PATH_PATTERN.split(key); } private static void set(String path, Object def) { - if(Config.config.getNode(splitPath(path)).isVirtual()) { - Config.config.getNode(splitPath(path)).setValue(def); - } + if(config.getNode(splitPath(path)).isVirtual()) + config.getNode(splitPath(path)).setValue(def); } private static void setString(String path, String def) { try { - if(Config.config.getNode(splitPath(path)).isVirtual()) - Config.config.getNode(splitPath(path)).setValue(TypeToken.of(String.class), def); + if(config.getNode(splitPath(path)).isVirtual()) + config.getNode(splitPath(path)).setValue(TypeToken.of(String.class), def); } catch(ObjectMappingException ex) { } } - private boolean getBoolean(String path, boolean def) { - set(configPath + path, def); - return Config.config.getNode(splitPath(configPath+path)).getBoolean(def); + private static boolean getBoolean(String path, boolean def) { + set(path, def); + return config.getNode(splitPath(path)).getBoolean(def); } - private double getDouble(String path, double def) { - set(configPath +path, def); - return Config.config.getNode(splitPath(configPath+path)).getDouble(def); + private static double getDouble(String path, double def) { + set(path, def); + return config.getNode(splitPath(path)).getDouble(def); } - private int getInt(String path, int def) { - set(configPath +path, def); - return Config.config.getNode(splitPath(configPath+path)).getInt(def); + private static int getInt(String path, int def) { + set(path, def); + return config.getNode(splitPath(path)).getInt(def); } - private String getString(String path, String def) { - set(configPath +path, def); - return Config.config.getNode(splitPath(configPath+path)).getString(def); + private static String getString(String path, String def) { + setString(path, def); + return config.getNode(splitPath(path)).getString(def); } - /** DO NOT EDIT ANYTHING ABOVE **/ + private static Long getLong(String path, Long def) { + set(path, def); + return config.getNode(splitPath(path)).getLong(def); + } - public String REGEX = "REGEX"; - public String TYPE = "TYPE"; - public String REPLACEMENT = "REPLACEMENT"; - private void ServerSettings() { - REGEX = getString("regex", REGEX); - TYPE = getString("type", TYPE); - REPLACEMENT = getString("replacement", REPLACEMENT); + private static List getList(String path, T def) { + try { + set(path, def); + return config.getNode(splitPath(path)).getList(TypeToken.of(String.class)); + } catch(ObjectMappingException ex) { + } + return new ArrayList<>(); + } + +// public String REGEX = "REGEX"; +// public String TYPE = "TYPE"; +// public String REPLACEMENT = "REPLACEMENT"; +// private void ServerSettings() { +// REGEX = getString("regex", REGEX); +// TYPE = getString("type", TYPE); +// REPLACEMENT = getString("replacement", REPLACEMENT); +// } + + private void loadChatFilters() { + Map chProps = new HashMap<>(); + config.getChildrenMap().forEach((key, value) -> { + if (value.hasMapChildren()) { + for (Map.Entry vl : value.getChildrenMap().entrySet()) { + chProps.put( vl.getKey().toString(), vl.getValue().getValue()); + } + } else { + chProps.put(key.toString(), value.getValue()); + } + }); + //UCChannel ch = new UCChannel(chProps); + //addChannel(ch); } }