diff --git a/src/main/java/ru/betterend/config/Config.java b/src/main/java/ru/betterend/config/Config.java index 42a37be1..89fb3147 100644 --- a/src/main/java/ru/betterend/config/Config.java +++ b/src/main/java/ru/betterend/config/Config.java @@ -2,8 +2,6 @@ package ru.betterend.config; import org.jetbrains.annotations.Nullable; -import com.google.gson.JsonObject; - import ru.betterend.BetterEnd; import ru.betterend.config.ConfigKeeper.BooleanEntry; import ru.betterend.config.ConfigKeeper.Entry; @@ -15,20 +13,16 @@ import ru.betterend.config.ConfigKeeper.StringEntry; public abstract class Config { protected final ConfigKeeper keeper; - protected final ConfigWriter writer; protected abstract void registerEntries(); public Config(String group) { - this.writer = new ConfigWriter(group); - JsonObject settings = writer.load(); - this.keeper = new ConfigKeeper(settings); + this.keeper = new ConfigKeeper(group); this.registerEntries(); - this.writer.save(); } public void saveChanges() { - this.writer.save(); + this.keeper.save(); } @Nullable diff --git a/src/main/java/ru/betterend/config/ConfigKeeper.java b/src/main/java/ru/betterend/config/ConfigKeeper.java index 20b110c4..f35babc1 100644 --- a/src/main/java/ru/betterend/config/ConfigKeeper.java +++ b/src/main/java/ru/betterend/config/ConfigKeeper.java @@ -9,7 +9,6 @@ import org.jetbrains.annotations.Nullable; import com.google.common.collect.Maps; import com.google.common.reflect.TypeToken; -import com.google.gson.JsonElement; import com.google.gson.JsonObject; import net.minecraft.util.JsonHelper; @@ -18,15 +17,27 @@ import ru.betterend.util.JsonFactory; public final class ConfigKeeper { private Map> configEntries = Maps.newHashMap(); - private final JsonObject configObject; - public ConfigKeeper(JsonObject config) { - this.configObject = config; + private final JsonObject configObject; + private final ConfigWriter writer; + + private boolean changed = false; + + public ConfigKeeper(String group) { + this.writer = new ConfigWriter(group); + this.configObject = writer.load(); } - private > void storeValue(ConfigKey key, E entry, T value) { - if (configObject == null) return; - + public void save() { + if (!changed) return; + this.writer.save(); + this.changed = false; + } + + private > void initializeEntry(ConfigKey key, E entry) { + if (configObject == null) { + return; + } String group = key.getOwner(); JsonObject jsonGroup; if (configObject.has(group)) { @@ -45,33 +56,24 @@ public final class ConfigKeeper { } String paramKey = key.getEntry(); paramKey += " [default: " + entry.getDefault() + "]"; - entry.toJson(jsonCategory, paramKey, value); + this.changed = entry.setLocation(jsonCategory, paramKey); } - private > T getValue(ConfigKey key, E entry) { + private > void storeValue(E entry, T value) { if (configObject == null) { + return; + } + T val = entry.getValue(); + if (value.equals(val)) return; + entry.toJson(value); + this.changed = true; + } + + private > T getValue(E entry) { + if (!entry.hasLocation()) { return entry.getDefault(); } - - String group = key.getOwner(); - if (!configObject.has(group)) { - return entry.getDefault(); - } - - JsonObject jsonGroup = JsonHelper.getObject(configObject, group); - String category = key.getCategory(); - if (!jsonGroup.has(category)) { - return entry.getDefault(); - } - - JsonObject jsonCategory = JsonHelper.getObject(jsonGroup, category); - String paramKey = key.getEntry(); - paramKey += " [default: " + entry.getDefault() + "]"; - if (!jsonCategory.has(paramKey)) { - return entry.getDefault(); - } - - return entry.fromJson(jsonCategory.get(paramKey)); + return entry.fromJson(); } @Nullable @@ -93,9 +95,9 @@ public final class ConfigKeeper { } public > E registerEntry(ConfigKey key, E entry) { - entry.setWriter(value -> this.storeValue(key, entry, value)); - entry.setReader(() -> { return this.getValue(key, entry); }); - this.storeValue(key, entry, entry.getValue()); + entry.setWriter(value -> this.storeValue(entry, value)); + entry.setReader(() -> { return this.getValue(entry); }); + this.initializeEntry(key, entry); this.configEntries.put(key, entry); return entry; } @@ -107,13 +109,13 @@ public final class ConfigKeeper { } @Override - public Boolean fromJson(JsonElement json) { - return json.getAsBoolean(); + public Boolean fromJson() { + return JsonHelper.getBoolean(location, key, defaultValue); } @Override - public void toJson(JsonObject json, String key, Boolean value) { - json.addProperty(key, value); + public void toJson(Boolean value) { + this.location.addProperty(key, value); } } @@ -124,13 +126,13 @@ public final class ConfigKeeper { } @Override - public Float fromJson(JsonElement json) { - return json.getAsFloat(); + public Float fromJson() { + return JsonHelper.getFloat(location, key, defaultValue); } @Override - public void toJson(JsonObject json, String key, Float value) { - json.addProperty(key, value); + public void toJson(Float value) { + this.location.addProperty(key, value); } } @@ -141,13 +143,13 @@ public final class ConfigKeeper { } @Override - public Float fromJson(JsonElement json) { - return json.getAsFloat(); + public Float fromJson() { + return JsonHelper.getFloat(location, key, defaultValue); } @Override - public void toJson(JsonObject json, String key, Float value) { - json.addProperty(key, value); + public void toJson(Float value) { + this.location.addProperty(key, value); } } @@ -163,13 +165,13 @@ public final class ConfigKeeper { } @Override - public Integer fromJson(JsonElement json) { - return json.getAsInt(); + public Integer fromJson() { + return JsonHelper.getInt(location, key, defaultValue); } @Override - public void toJson(JsonObject json, String key, Integer value) { - json.addProperty(key, value); + public void toJson(Integer value) { + this.location.addProperty(key, value); } } @@ -180,13 +182,13 @@ public final class ConfigKeeper { } @Override - public Integer fromJson(JsonElement json) { - return json.getAsInt(); + public Integer fromJson() { + return JsonHelper.getInt(location, key, defaultValue); } @Override - public void toJson(JsonObject json, String key, Integer value) { - json.addProperty(key, value); + public void toJson(Integer value) { + this.location.addProperty(key, value); } } @@ -197,13 +199,13 @@ public final class ConfigKeeper { } @Override - public String fromJson(JsonElement json) { - return json.getAsString(); + public String fromJson() { + return JsonHelper.getString(location, key, defaultValue); } @Override - public void toJson(JsonObject json, String key, String value) { - json.addProperty(key, value); + public void toJson(String value) { + this.location.addProperty(key, value); } } @@ -226,13 +228,13 @@ public final class ConfigKeeper { } @Override - public T fromJson(JsonElement json) { - return JsonFactory.GSON.fromJson(json, type); + public T fromJson() { + return JsonFactory.GSON.fromJson(location.get(key), type); } @Override - public void toJson(JsonObject json, String key, T value) { - json.addProperty(key, JsonFactory.GSON.toJson(json, type)); + public void toJson(T value) { + location.addProperty(key, JsonFactory.GSON.toJson(value, type)); } } @@ -265,9 +267,11 @@ public final class ConfigKeeper { protected final T defaultValue; protected Consumer writer; protected Supplier reader; + protected JsonObject location; + protected String key; - public abstract T fromJson(JsonElement json); - public abstract void toJson(JsonObject json, String key, T value); + public abstract T fromJson(); + public abstract void toJson(T value); public Entry (T defaultValue) { this.defaultValue = defaultValue; @@ -281,6 +285,21 @@ public final class ConfigKeeper { this.reader = reader; } + protected boolean setLocation(JsonObject location, String key) { + this.location = location; + this.key = key; + if (!location.has(key)) { + this.toJson(defaultValue); + return true; + } + return false; + } + + protected boolean hasLocation() { + return this.location != null && + this.key != null; + } + public T getValue() { return this.reader.get(); } diff --git a/src/main/java/ru/betterend/config/Configs.java b/src/main/java/ru/betterend/config/Configs.java index 6bef1de2..ddee0536 100644 --- a/src/main/java/ru/betterend/config/Configs.java +++ b/src/main/java/ru/betterend/config/Configs.java @@ -1,17 +1,17 @@ package ru.betterend.config; public class Configs { - public static final IdConfig ITEM_CONFIG = new CategoryConfig("items"); - public static final IdConfig BLOCK_CONFIG = new CategoryConfig("blocks"); public static final IdConfig ENTITY_CONFIG = new CategoryConfig("entities"); + public static final IdConfig BLOCK_CONFIG = new CategoryConfig("blocks"); + public static final SimpleConfig GENERAL = new SimpleConfig("settings"); + public static final IdConfig ITEM_CONFIG = new CategoryConfig("items"); public static final IdConfig BIOME_CONFIG = new EntryConfig("biomes"); - public static final SimpleConfig GENERATOR_CONFIG = new SimpleConfig("generator"); public static void saveConfigs() { - ITEM_CONFIG.saveChanges(); + ENTITY_CONFIG.saveChanges(); BLOCK_CONFIG.saveChanges(); BIOME_CONFIG.saveChanges(); - ENTITY_CONFIG.saveChanges(); - GENERATOR_CONFIG.save(); + ITEM_CONFIG.saveChanges(); + GENERAL.saveChanges(); } } diff --git a/src/main/java/ru/betterend/config/SimpleConfig.java b/src/main/java/ru/betterend/config/SimpleConfig.java index 47974e0b..463857a6 100644 --- a/src/main/java/ru/betterend/config/SimpleConfig.java +++ b/src/main/java/ru/betterend/config/SimpleConfig.java @@ -1,256 +1,88 @@ -package ru.betterend.config; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Reader; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map.Entry; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -import ru.betterend.BetterEnd; - -public final class SimpleConfig { - private boolean rewrite = false; - private final String name; - private JsonObject config; - - public SimpleConfig(String name) { - this.name = name; - } - - private void load() { - if (config == null) { - File file = getFolder(); - if (!file.exists()) - file.mkdirs(); - file = getFile(); - if (file.exists()) { - Gson gson = new Gson(); - try { - Reader reader = new FileReader(file); - config = gson.fromJson(reader, JsonObject.class); - if (config == null) { - config = new JsonObject(); - rewrite = true; - } - else { - rewrite = false; - } - } - catch (FileNotFoundException e) { - e.printStackTrace(); - config = new JsonObject(); - rewrite = true; - } - } - else { - config = new JsonObject(); - rewrite = true; - } - } - } - - public void save() { - if (rewrite) { - File file = getFolder(); - if (!file.exists()) - file.mkdirs(); - file = getFile(); - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - try { - FileWriter writer = new FileWriter(file); - String gstring = gson.toJson(config); - writer.write(gstring); - writer.flush(); - writer.close(); - rewrite = false; - } - catch (IOException e) { - e.printStackTrace(); - } - } - } - - private File getFile() { - return new File(String.format("./config/%s/%s.json", BetterEnd.MOD_ID, name)); - } - - private File getFolder() { - return new File("./config/" + BetterEnd.MOD_ID + "/"); - } - - public boolean getBoolean(String groups, String name, boolean def) { - load(); - name += "[def: " + def + "]"; - - JsonObject group = getGroup(groups); - JsonElement element = group.get(name); - - if (element != null) { - return element.getAsBoolean(); - } - else { - group.addProperty(name, def); - rewrite = true; - return def; - } - } - - public void setBoolean(String groups, String name, boolean def, boolean value) { - name += "[def: " + def + "]"; - - JsonObject group = getGroup(groups); - group.addProperty(name, value); - - rewrite = true; - } - - public float getFloat(String groups, String name, float def) { - load(); - name += "[def: " + def + "]"; - - JsonObject group = getGroup(groups); - JsonElement element = group.get(name); - - if (element != null) { - return element.getAsFloat(); - } - else { - group.addProperty(name, def); - rewrite = true; - return def; - } - } - - public void setFloat(String groups, String name, float def, float value) { - name += "[def: " + def + "]"; - - JsonObject group = getGroup(groups); - group.addProperty(name, value); - - rewrite = true; - } - - public int getInt(String groups, String name, int def) { - load(); - name += "[def: " + def + "]"; - - JsonObject group = getGroup(groups); - JsonElement element = group.get(name); - - if (element != null) { - return element.getAsInt(); - } - else { - group.addProperty(name, def); - rewrite = true; - return def; - } - } - - public String getString(String groups, String name, String def) { - load(); - name += "[def: " + def + "]"; - - JsonObject group = getGroup(groups); - JsonElement element = group.get(name); - - if (element != null) { - return element.getAsString(); - } - else { - group.addProperty(name, def); - rewrite = true; - return def; - } - } - - public void setInt(String groups, String name, int def, int value) { - name += "[def: " + def + "]"; - - JsonObject group = getGroup(groups); - group.addProperty(name, value); - - rewrite = true; - } - - public void setStringLoad(String groups, String name, String value) { - JsonObject group = getGroup(groups); - group.addProperty(name, value); - } - - public String[] getStringArray(String groups, String name, String[] def) { - load(); - - JsonObject group = getGroup(groups); - JsonElement element = group.get(name); - - if (element != null) { - return toStringArray(element.getAsJsonArray()); - } - else { - group.add(name, toJsonArray(def)); - rewrite = true; - return def; - } - } - - private String[] toStringArray(JsonArray array) { - load(); - String[] result = new String[array.size()]; - for (int i = 0; i < array.size(); i++) - result[i] = array.get(i).getAsString(); - return result; - } - - private JsonArray toJsonArray(String[] array) { - load(); - JsonArray result = new JsonArray(); - for (String s : array) - result.add(s); - return result; - } - - public JsonObject getGroup(String groups) { - JsonObject obj = config; - String[] groupsArr = groups.split("\\."); - for (String group : groupsArr) { - JsonObject jGroup = obj.getAsJsonObject(group); - if (jGroup == null) { - jGroup = new JsonObject(); - obj.add(group, jGroup); - } - obj = jGroup; - } - return obj; - } - - public List getBaseGroups() { - List groups = new ArrayList(); - Iterator> iterator = config.entrySet().iterator(); - iterator.forEachRemaining((element) -> { - groups.add(element.getKey()); - }); - return groups; - } - - public List> getGroupMembers(JsonObject group) { - List> result = new ArrayList>(); - result.addAll(group.entrySet()); - return result; - } - - public void markToSave() { - rewrite = true; - } -} +package ru.betterend.config; + +import org.jetbrains.annotations.Nullable; + +import ru.betterend.BetterEnd; +import ru.betterend.config.ConfigKeeper.Entry; +import ru.betterend.config.ConfigKeeper.FloatRange; +import ru.betterend.config.ConfigKeeper.IntegerRange; + +public class SimpleConfig extends Config { + + public SimpleConfig(String group) { + super(group); + } + + @Override + protected void registerEntries() {} + + protected ConfigKey createKey(String category, String key) { + return new ConfigKey(BetterEnd.MOD_ID, category, key); + } + + @Nullable + public > E getEntry(String category, String key, Class type) { + return this.getEntry(createKey(category, key), type); + } + + @Nullable + public > T getDefault(String category, String key, Class type) { + return this.getDefault(createKey(category, key), type); + } + + public String getString(String category, String key, String defaultValue) { + return this.getString(createKey(category, key), defaultValue); + } + + public String getString(String category, String key) { + return this.getString(createKey(category, key)); + } + + public boolean setString(String category, String key, String value) { + return this.setString(createKey(category, key), value); + } + + public int getInt(String category, String key, int defaultValue) { + return this.getInt(createKey(category, key), defaultValue); + } + + public int getInt(String category, String key) { + return this.getInt(createKey(category, key)); + } + + public boolean setInt(String category, String key, int value) { + return this.setInt(createKey(category, key), value); + } + + public boolean setRangedInt(String category, String key, int value) { + return this.setRanged(createKey(category, key), value, IntegerRange.class); + } + + public boolean setRangedFloat(String category, String key, float value) { + return this.setRanged(createKey(category, key), value, FloatRange.class); + } + + public float getFloat(String category, String key, float defaultValue) { + return this.getFloat(createKey(category, key), defaultValue); + } + + public float getFloat(String category, String key) { + return this.getFloat(createKey(category, key)); + } + + public boolean setFloat(String category, String key, float value) { + return this.setFloat(createKey(category, key), value); + } + + public boolean getBoolean(String category, String key, boolean defaultValue) { + return this.getBoolean(createKey(category, key), defaultValue); + } + + public boolean getBoolean(String category, String key) { + return this.getBoolean(createKey(category, key)); + } + + public boolean setBoolean(String category, String key, boolean value) { + return this.setBoolean(createKey(category, key), value); + } +} diff --git a/src/main/java/ru/betterend/compat/rei/REIAlloyingCategory.java b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java similarity index 98% rename from src/main/java/ru/betterend/compat/rei/REIAlloyingCategory.java rename to src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java index f3ea48b9..67ddf9ba 100644 --- a/src/main/java/ru/betterend/compat/rei/REIAlloyingCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java @@ -1,4 +1,4 @@ -package ru.betterend.compat.rei; +package ru.betterend.integration.rei; import java.text.DecimalFormat; import java.util.List; diff --git a/src/main/java/ru/betterend/compat/rei/REIAlloyingDisplay.java b/src/main/java/ru/betterend/integration/rei/REIAlloyingDisplay.java similarity index 98% rename from src/main/java/ru/betterend/compat/rei/REIAlloyingDisplay.java rename to src/main/java/ru/betterend/integration/rei/REIAlloyingDisplay.java index b5a91a95..cecd66b0 100644 --- a/src/main/java/ru/betterend/compat/rei/REIAlloyingDisplay.java +++ b/src/main/java/ru/betterend/integration/rei/REIAlloyingDisplay.java @@ -1,4 +1,4 @@ -package ru.betterend.compat.rei; +package ru.betterend.integration.rei; import java.util.Collections; import java.util.List; diff --git a/src/main/java/ru/betterend/compat/rei/REIAnvilCategory.java b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java similarity index 98% rename from src/main/java/ru/betterend/compat/rei/REIAnvilCategory.java rename to src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java index 82172fc7..88c9363b 100644 --- a/src/main/java/ru/betterend/compat/rei/REIAnvilCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java @@ -1,4 +1,4 @@ -package ru.betterend.compat.rei; +package ru.betterend.integration.rei; import java.util.Collections; import java.util.List; diff --git a/src/main/java/ru/betterend/compat/rei/REIAnvilDisplay.java b/src/main/java/ru/betterend/integration/rei/REIAnvilDisplay.java similarity index 97% rename from src/main/java/ru/betterend/compat/rei/REIAnvilDisplay.java rename to src/main/java/ru/betterend/integration/rei/REIAnvilDisplay.java index 2de2d777..df870fc7 100644 --- a/src/main/java/ru/betterend/compat/rei/REIAnvilDisplay.java +++ b/src/main/java/ru/betterend/integration/rei/REIAnvilDisplay.java @@ -1,4 +1,4 @@ -package ru.betterend.compat.rei; +package ru.betterend.integration.rei; import java.util.Collections; import java.util.List; diff --git a/src/main/java/ru/betterend/compat/rei/REIContainer.java b/src/main/java/ru/betterend/integration/rei/REIContainer.java similarity index 92% rename from src/main/java/ru/betterend/compat/rei/REIContainer.java rename to src/main/java/ru/betterend/integration/rei/REIContainer.java index dae79d5f..9d6a0118 100644 --- a/src/main/java/ru/betterend/compat/rei/REIContainer.java +++ b/src/main/java/ru/betterend/integration/rei/REIContainer.java @@ -1,4 +1,4 @@ -package ru.betterend.compat.rei; +package ru.betterend.integration.rei; import me.shedaniel.rei.plugin.containers.CraftingContainerInfoWrapper; import me.shedaniel.rei.server.ContainerInfoHandler; diff --git a/src/main/java/ru/betterend/compat/rei/REIInfusionCategory.java b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java similarity index 99% rename from src/main/java/ru/betterend/compat/rei/REIInfusionCategory.java rename to src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java index c304659b..6821a790 100644 --- a/src/main/java/ru/betterend/compat/rei/REIInfusionCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java @@ -1,4 +1,4 @@ -package ru.betterend.compat.rei; +package ru.betterend.integration.rei; import java.util.List; diff --git a/src/main/java/ru/betterend/compat/rei/REIInfusionDisplay.java b/src/main/java/ru/betterend/integration/rei/REIInfusionDisplay.java similarity index 98% rename from src/main/java/ru/betterend/compat/rei/REIInfusionDisplay.java rename to src/main/java/ru/betterend/integration/rei/REIInfusionDisplay.java index 644b0d3c..9e77e114 100644 --- a/src/main/java/ru/betterend/compat/rei/REIInfusionDisplay.java +++ b/src/main/java/ru/betterend/integration/rei/REIInfusionDisplay.java @@ -1,4 +1,4 @@ -package ru.betterend.compat.rei; +package ru.betterend.integration.rei; import java.util.Collections; import java.util.List; diff --git a/src/main/java/ru/betterend/compat/rei/REIPlugin.java b/src/main/java/ru/betterend/integration/rei/REIPlugin.java similarity index 98% rename from src/main/java/ru/betterend/compat/rei/REIPlugin.java rename to src/main/java/ru/betterend/integration/rei/REIPlugin.java index d4b2365d..ee84dea5 100644 --- a/src/main/java/ru/betterend/compat/rei/REIPlugin.java +++ b/src/main/java/ru/betterend/integration/rei/REIPlugin.java @@ -1,4 +1,4 @@ -package ru.betterend.compat.rei; +package ru.betterend.integration.rei; import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.RecipeHelper; diff --git a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java index abe22eca..6ce5b425 100644 --- a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java +++ b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java @@ -22,8 +22,8 @@ public class TerrainGenerator { private static boolean noRingVoid; public static void init() { - newGenerator = Configs.GENERATOR_CONFIG.getBoolean("generator", "useNewGenerator", false); - noRingVoid = Configs.GENERATOR_CONFIG.getBoolean("generator", "noRingVoid", false); + newGenerator = Configs.GENERAL.getBoolean("generator", "useNewGenerator", false); + noRingVoid = Configs.GENERAL.getBoolean("generator", "noRingVoid", false); } public static void initNoise(long seed) { diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 91334346..f7500c1d 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -26,10 +26,10 @@ "ru.betterend.client.BetterEndClient" ], "rei_plugins": [ - "ru.betterend.compat.rei.REIPlugin" + "ru.betterend.integration.rei.REIPlugin" ], "rei_containers": [ - "ru.betterend.compat.rei.REIContainer" + "ru.betterend.integration.rei.REIContainer" ] }, "mixins": [