package net.ME1312.SubServers.Bungee.Library.Config; import net.ME1312.SubServers.Bungee.Library.Util; import net.ME1312.SubServers.Bungee.Library.Version.Version; import net.md_5.bungee.api.ChatColor; import org.yaml.snakeyaml.Yaml; import java.util.*; /** * YAML Value Class */ @SuppressWarnings({"unchecked", "unused"}) public class YAMLValue { protected Object obj; protected String label; protected YAMLSection up; private Yaml yaml; protected YAMLValue(Object obj, YAMLSection up, String label, Yaml yaml) { this.obj = obj; this.label = label; this.yaml = yaml; this.up = up; } /** * Get the YAML Section this Object was defined in * * @return YAML Section */ public YAMLSection getDefiningSection() { return up; } /** * Get Object * * @return Object */ public Object asObject() { return obj; } /** * Get Object as List * * @return List */ public List asObjectList() { return (List) obj; } /** * Get Object as Boolean * * @return Boolean */ public Boolean asBoolean() { return (Boolean) obj; } /** * Get Object as List * * @return List */ public List asBooleanList() { return (List) obj; } /** * Get Object as YAML Section * * @return YAML Section */ public YAMLSection asSection() { if (obj != null) return new YAMLSection((Map) obj, up, label, yaml); else return null; } /** * Get Object as YAML Section List * * @return YAML Section List */ public List asSectionList() { if (obj != null) { List values = new ArrayList(); for (Map value : (List>) obj) { values.add(new YAMLSection(value, null, null, yaml)); } return values; } else return null; } /** * Get Object as Double * * @return Double */ public Double asDouble() { return ((Number) obj).doubleValue(); } /** * Get Object as Double List * * @return Double List */ public List asDoubleList() { return (List) obj; } /** * Get Object as Float * * @return Float */ public Float asFloat() { return ((Number) obj).floatValue(); } /** * Get Object as Float List * * @return Float List */ public List asFloatList() { return (List) obj; } /** * Get Object as Integer * * @return Integer */ public Integer asInt() { return ((Number) obj).intValue(); } /** * Get Object as Integer List * * @return Integer List */ public List asIntList() { return (List) obj; } /** * Get Object as Long * * @return Long */ public Long asLong() { return ((Number) obj).longValue(); } /** * Get Object as Long List * * @return Long List */ public List asLongList() { return (List) obj; } /** * Get a Short by Handle * * @return Short */ public Short asShort() { return ((Number) obj).shortValue(); } /** * Get a Short List by Handle * * @return Short List */ public List asShortList() { return (List) obj; } /** * Get Object as Unparsed String * * @return Unparsed String */ public String asRawString() { if (obj != null) return obj.toString(); else return null; } /** * Get Object as Unparsed String List * * @return Unparsed String List */ public List asRawStringList() { if (obj != null) { List values = new ArrayList(); for (Object value : (List) obj) { values.add(value.toString()); } return values; } else return null; } /** * Get Object as String * * @return String */ public String asString() { if (obj != null) return Util.unescapeJavaString(asRawString()); else return null; } /** * Get Object as String List * * @return String List */ public List asStringList() { if (obj != null) { List values = new ArrayList(); for (String value : asRawStringList()) { values.add(Util.unescapeJavaString(value)); } return values; } else return null; } /** * Get Object as Colored String * * @param color Color Char to parse * @return Colored String */ public String asColoredString(char color) { if (Util.isNull(color)) throw new NullPointerException(); if (obj != null) return ChatColor.translateAlternateColorCodes(color, asString()); else return null; } /** * Get Object as Colored String List * * @param color Color Char to parse * @return Colored String List */ public List asColoredStringList(char color) { if (obj != null) { if (Util.isNull(color)) throw new NullPointerException(); List values = new ArrayList(); for (String value : asStringList()) { values.add(ChatColor.translateAlternateColorCodes(color, value)); } return values; } else return null; } /** * Get Object as UUID * * @return UUID */ public UUID asUUID() { if (obj != null) return UUID.fromString(asRawString()); else return null; } /** * Get Object as UUID List * * @return UUID List */ public List asUUIDList() { if (obj != null) { List values = new ArrayList(); for (String value : (List) obj) { values.add(UUID.fromString(value)); } return values; } else return null; } /** * Get Object as Version * * @return Version */ public Version asVersion() { if (obj != null) return Version.fromString(asRawString()); else return null; } /** * Get Object as Version List * * @return Version List */ public List asVersionList() { if (obj != null) { List values = new ArrayList(); for (String value : (List) obj) { values.add(Version.fromString(value)); } return values; } else return null; } /** * Check if object is Null * * @return Null Status */ public boolean isNull() { return obj == null; } /** * Check if object is a Boolean * * @return Boolean Status */ public boolean isBoolean() { return (obj instanceof Boolean); } /** * Check if object is a YAML Section * * @return YAML Section Status */ public boolean isSection() { return (obj instanceof Map); } /** * Check if object is a List * * @return List Status */ public boolean isList() { return (obj instanceof List); } /** * Check if object is a Number * * @return Number Status */ public boolean isNumber() { return (obj instanceof Number); } /** * Check if object is a String * * @return String Status */ public boolean isString() { return (obj instanceof String); } /** * Check if object is a UUID * * @return UUID Status */ public boolean isUUID() { return (obj instanceof String && !Util.isException(() -> UUID.fromString(asRawString()))); } @Override public boolean equals(Object object) { if (obj == null) { return object == null; } else { if (object instanceof YAMLValue) { return obj.equals(((YAMLValue) object).obj); } else { return obj.equals(object); } } } @Override public String toString() { if (obj != null) return obj.toString(); else return "null"; } }