// Copyright (c) 2015 Christopher "BlayTheNinth" Baker package net.blay09.mods.eirairc.config.property; import net.blay09.mods.eirairc.api.config.IConfigProperty; public class ConfigProperty<T> implements IConfigProperty<T> { private final ConfigManager manager; private final String name; private final String category; private final String langKey; private final T defaultValue; private T value; private boolean hasValue; private ConfigProperty<T> parentProperty; private String[] validValues; private T min; private T max; public ConfigProperty(ConfigManager manager, String category, String name, T defaultValue) { this(manager, category, name, "eirairc:config.property." + name, defaultValue); } public ConfigProperty(ConfigManager manager, String category, String name, String langKey, T defaultValue) { this.manager = manager; this.category = category; this.name = name; this.langKey = langKey; this.defaultValue = defaultValue; manager.registerProperty(this); } public ConfigProperty<T> getParentProperty() { return parentProperty; } public void setParentProperty(ConfigProperty<T> parentProperty) { this.parentProperty = parentProperty; } @Override public T get() { if(!hasValue && parentProperty != null) { return parentProperty.get(); } return value != null ? value : defaultValue; } @Override public void set(T value) { this.value = value; hasValue = value != defaultValue; } @Override public void setValidValues(String[] validValues) { this.validValues = validValues; manager.updateProperty(this); } public String[] getValidValues() { return validValues; } @Override public void setMinMax(T min, T max) { this.min = min; this.max = max; manager.updateProperty(this); } public T getMin() { return min; } public T getMax() { return max; } @Override public String getName() { return name; } @Override public String getCategory() { return category; } @Override public T getDefaultValue() { if(parentProperty != null) { return parentProperty.get(); } return defaultValue; } public void reset() { value = defaultValue; hasValue = false; } public boolean hasValue() { return hasValue; } public String getAsString() { return String.valueOf(value); } public String getLangKey() { return langKey; } }