diff --git a/src/main/java/ru/betterend/config/Config.java b/src/main/java/ru/betterend/config/Config.java index 769345b5..42a37be1 100644 --- a/src/main/java/ru/betterend/config/Config.java +++ b/src/main/java/ru/betterend/config/Config.java @@ -14,53 +14,51 @@ import ru.betterend.config.ConfigKeeper.StringEntry; public abstract class Config { - protected final ConfigKeeper configKeeper; + protected final ConfigKeeper keeper; protected final ConfigWriter writer; - protected final String group; protected abstract void registerEntries(); public Config(String group) { - this.group = group; this.writer = new ConfigWriter(group); JsonObject settings = writer.load(); - this.configKeeper = new ConfigKeeper(settings); + this.keeper = new ConfigKeeper(settings); this.registerEntries(); this.writer.save(); } public void saveChanges() { - this.writer.saveConfig(); + this.writer.save(); } @Nullable - public > E getEntry(ConfigKey key) { - return this.configKeeper.getEntry(key); + public > E getEntry(ConfigKey key, Class type) { + return this.keeper.getEntry(key, type); } @Nullable - public T getDefault(ConfigKey key) { - Entry entry = configKeeper.getEntry(key); + public > T getDefault(ConfigKey key, Class type) { + Entry entry = keeper.getEntry(key, type); return entry != null ? entry.getDefault() : null; } protected String getString(ConfigKey key, String defaultValue) { - String str = configKeeper.getValue(key); + String str = keeper.getValue(key, StringEntry.class); if (str == null) { - StringEntry entry = configKeeper.registerEntry(key, new StringEntry(defaultValue)); + StringEntry entry = keeper.registerEntry(key, new StringEntry(defaultValue)); return entry.getValue(); } return str != null ? str : defaultValue; } protected String getString(ConfigKey key) { - String str = configKeeper.getValue(key); + String str = keeper.getValue(key, StringEntry.class); return str != null ? str : ""; } protected boolean setString(ConfigKey key, String value) { try { - StringEntry entry = configKeeper.getEntry(key); + StringEntry entry = keeper.getEntry(key, StringEntry.class); if (entry == null) return false; entry.setValue(value); return true; @@ -71,22 +69,22 @@ public abstract class Config { } protected int getInt(ConfigKey key, int defaultValue) { - Integer val = configKeeper.getValue(key); + Integer val = keeper.getValue(key, IntegerEntry.class); if (val == null) { - IntegerEntry entry = configKeeper.registerEntry(key, new IntegerEntry(defaultValue)); + IntegerEntry entry = keeper.registerEntry(key, new IntegerEntry(defaultValue)); return entry.getValue(); } return val != null ? val : defaultValue; } protected int getInt(ConfigKey key) { - Integer val = configKeeper.getValue(key); + Integer val = keeper.getValue(key, IntegerEntry.class); return val != null ? val : 0; } protected boolean setInt(ConfigKey key, int value) { try { - IntegerEntry entry = configKeeper.getEntry(key); + IntegerEntry entry = keeper.getEntry(key, IntegerEntry.class); if (entry == null) return false; entry.setValue(value); return true; @@ -96,9 +94,9 @@ public abstract class Config { return false; } - protected > boolean setRanged(ConfigKey key, T value) { + protected , RE extends RangeEntry> boolean setRanged(ConfigKey key, T value, Class type) { try { - RangeEntry entry = configKeeper.getEntry(key); + RangeEntry entry = keeper.getEntry(key, type); if (entry == null) return false; entry.setValue(value); return true; @@ -109,22 +107,22 @@ public abstract class Config { } protected float getFloat(ConfigKey key, float defaultValue) { - Float val = configKeeper.getValue(key); + Float val = keeper.getValue(key, FloatEntry.class); if (val == null) { - FloatEntry entry = configKeeper.registerEntry(key, new FloatEntry(defaultValue)); + FloatEntry entry = keeper.registerEntry(key, new FloatEntry(defaultValue)); return entry.getValue(); } return val != null ? val : defaultValue; } protected float getFloat(ConfigKey key) { - Float val = configKeeper.getValue(key); + Float val = keeper.getValue(key, FloatEntry.class); return val != null ? val : 0.0F; } protected boolean setFloat(ConfigKey key, float value) { try { - FloatEntry entry = configKeeper.getEntry(key); + FloatEntry entry = keeper.getEntry(key, FloatEntry.class); if (entry == null) return false; entry.setValue(value); return true; @@ -135,22 +133,22 @@ public abstract class Config { } protected boolean getBoolean(ConfigKey key, boolean defaultValue) { - Boolean val = configKeeper.getValue(key); + Boolean val = keeper.getValue(key, BooleanEntry.class); if (val == null) { - BooleanEntry entry = configKeeper.registerEntry(key, new BooleanEntry(defaultValue)); + BooleanEntry entry = keeper.registerEntry(key, new BooleanEntry(defaultValue)); return entry.getValue(); } return val != null ? val : defaultValue; } protected boolean getBoolean(ConfigKey key) { - Boolean val = configKeeper.getValue(key); + Boolean val = keeper.getValue(key, BooleanEntry.class); return val != null ? val : false; } protected boolean setBoolean(ConfigKey key, boolean value) { try { - BooleanEntry entry = configKeeper.getEntry(key); + BooleanEntry entry = keeper.getEntry(key, BooleanEntry.class); if (entry == null) return false; entry.setValue(value); return true; diff --git a/src/main/java/ru/betterend/config/ConfigKeeper.java b/src/main/java/ru/betterend/config/ConfigKeeper.java index a2f4286d..f763aea4 100644 --- a/src/main/java/ru/betterend/config/ConfigKeeper.java +++ b/src/main/java/ru/betterend/config/ConfigKeeper.java @@ -75,14 +75,17 @@ public final class ConfigKeeper { } @Nullable - @SuppressWarnings("unchecked") - public > E getEntry(ConfigKey key) { - return (E) this.configEntries.get(key); + public > E getEntry(ConfigKey key, Class type) { + Entry entry = this.configEntries.get(key); + if (type.isInstance(entry)) { + return type.cast(entry); + } + return null; } @Nullable - public T getValue(ConfigKey key) { - Entry entry = this.getEntry(key); + public > T getValue(ConfigKey key, Class type) { + Entry entry = this.getEntry(key, type); if (entry == null) { return null; } @@ -207,11 +210,8 @@ public final class ConfigKeeper { public static class EnumEntry> extends Entry { - private final Type type; - public EnumEntry(T defaultValue) { super(defaultValue); - this.type = new EntryType().getType(); } @Override @@ -228,10 +228,6 @@ public final class ConfigKeeper { public void toJson(JsonObject json, String key, T value) { json.addProperty(key, JsonFactory.GSON.toJson(json, type)); } - - private class EntryType extends TypeToken { - private static final long serialVersionUID = 1L; - } } public static abstract class RangeEntry> extends Entry { @@ -261,6 +257,7 @@ public final class ConfigKeeper { public static abstract class Entry { protected final T defaultValue; + protected final Type type; protected Consumer writer; protected Supplier reader; @@ -269,6 +266,7 @@ public final class ConfigKeeper { public Entry (T defaultValue) { this.defaultValue = defaultValue; + this.type = new EntryType().getType(); } protected void setWriter(Consumer writer) { @@ -278,6 +276,10 @@ public final class ConfigKeeper { protected void setReader(Supplier reader) { this.reader = reader; } + + public Type getType() { + return this.type; + } public T getValue() { return this.reader.get(); @@ -294,5 +296,9 @@ public final class ConfigKeeper { public void setDefault() { this.setValue(defaultValue); } + + protected class EntryType extends TypeToken { + private static final long serialVersionUID = 1L; + } } } diff --git a/src/main/java/ru/betterend/config/ConfigWriter.java b/src/main/java/ru/betterend/config/ConfigWriter.java index 17db4c9c..438417e8 100644 --- a/src/main/java/ru/betterend/config/ConfigWriter.java +++ b/src/main/java/ru/betterend/config/ConfigWriter.java @@ -27,7 +27,7 @@ public class ConfigWriter { return configObject; } - public void saveConfig() { + public void save() { if (configObject == null) { return; } @@ -41,10 +41,6 @@ public class ConfigWriter { return configObject; } - public void save() { - save(configFile, configObject); - } - public void save(JsonElement config) { this.configObject = config.getAsJsonObject(); save(configFile, config); diff --git a/src/main/java/ru/betterend/config/IdConfig.java b/src/main/java/ru/betterend/config/IdConfig.java index 9555e4e1..94ebfc80 100644 --- a/src/main/java/ru/betterend/config/IdConfig.java +++ b/src/main/java/ru/betterend/config/IdConfig.java @@ -4,6 +4,7 @@ import java.util.function.BiFunction; import org.jetbrains.annotations.Nullable; import net.minecraft.util.Identifier; import ru.betterend.config.ConfigKeeper.Entry; +import ru.betterend.config.ConfigKeeper.RangeEntry; public class IdConfig extends Config { @@ -22,13 +23,13 @@ public class IdConfig extends Config { } @Nullable - public > E getEntry(Identifier id, String key) { - return this.getEntry(createKey(id, key)); + public > E getEntry(Identifier id, String key, Class type) { + return this.getEntry(createKey(id, key), type); } @Nullable - public T getDefault(Identifier id, String key) { - return this.getDefault(createKey(id, key)); + public > T getDefault(Identifier id, String key, Class type) { + return this.getDefault(createKey(id, key), type); } public String getString(Identifier id, String key, String defaultValue) { @@ -55,8 +56,8 @@ public class IdConfig extends Config { return this.setInt(createKey(id, key), value); } - public > boolean setRanged(Identifier id, String key, T value) { - return this.setRanged(createKey(id, key), value); + public , RE extends RangeEntry> boolean setRanged(Identifier id, String key, T value, Class type) { + return this.setRanged(createKey(id, key), value, type); } public float getFloat(Identifier id, String key, float defaultValue) {