package de.slikey.effectlib.util; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.MemoryConfiguration; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; public class ConfigUtils { public static Collection<ConfigurationSection> getNodeList(ConfigurationSection node, String path) { Collection<ConfigurationSection> results = new ArrayList<ConfigurationSection>(); List<Map<?, ?>> mapList = node.getMapList(path); for (Map<?, ?> map : mapList) { results.add(toConfigurationSection(map)); } return results; } @Deprecated public static ConfigurationSection toNodeList(Map<?, ?> nodeMap) { return toConfigurationSection(nodeMap); } public static ConfigurationSection toConfigurationSection(Map<?, ?> nodeMap) { ConfigurationSection newSection = new MemoryConfiguration(); for (Map.Entry<?, ?> entry : nodeMap.entrySet()) { set(newSection, entry.getKey().toString(), entry.getValue()); } return newSection; } public static void set(ConfigurationSection node, String path, Object value) { if (value == null) { node.set(path, value); return; } // This is a bunch of hackery... I suppose I ought to change the NBT // types to match and make this smarter? boolean isTrue = value.equals("true"); boolean isFalse = value.equals("false"); if (isTrue || isFalse) { node.set(path, isTrue); } else { try { Double d = (value instanceof Double) ? (Double)value : ( (value instanceof Float) ? (Float)value : Double.parseDouble(value.toString()) ); node.set(path, d); } catch (Exception ex) { try { Integer i = (value instanceof Integer) ? (Integer)value : Integer.parseInt(value.toString()); node.set(path, i); } catch (Exception ex2) { node.set(path, value); } } } } public static ConfigurationSection getConfigurationSection(ConfigurationSection base, String key) { Object value = base.get(key); if (value == null) return null; if (value instanceof ConfigurationSection) { return (ConfigurationSection)value; } if (value instanceof Map) { ConfigurationSection newChild = base.createSection(key); @SuppressWarnings("unchecked") Map<String, Object> map = (Map<String, Object>)value; for (Map.Entry<String, Object> entry : map.entrySet()) { newChild.set(entry.getKey(), entry.getValue()); } base.set(key, newChild); return newChild; } return null; } }