diff --git a/src/main/java/ru/betterend/config/Configs.java b/src/main/java/ru/betterend/config/Configs.java index 6968cb1c..28b46600 100644 --- a/src/main/java/ru/betterend/config/Configs.java +++ b/src/main/java/ru/betterend/config/Configs.java @@ -13,15 +13,13 @@ public class Configs { public static final IdConfig ENTITY_CONFIG = new IdConfig("entities", (entityId, category) -> { return new ConfigKey(entityId.getNamespace(), category, entityId.getPath()); }); - public static final IdConfig GENERATOR_CONFIG = new IdConfig("generator", (entityId, category) -> { - return new ConfigKey(entityId.getNamespace(), category, entityId.getPath()); - }); + public static final SimpleConfig GENERATOR_CONFIG = new SimpleConfig("generator"); public static void saveConfigs() { ITEM_CONFIG.saveChanges(); BLOCK_CONFIG.saveChanges(); BIOME_CONFIG.saveChanges(); ENTITY_CONFIG.saveChanges(); - GENERATOR_CONFIG.saveChanges(); + GENERATOR_CONFIG.save(); } } diff --git a/src/main/java/ru/betterend/config/SimpleConfig.java b/src/main/java/ru/betterend/config/SimpleConfig.java new file mode 100644 index 00000000..47974e0b --- /dev/null +++ b/src/main/java/ru/betterend/config/SimpleConfig.java @@ -0,0 +1,256 @@ +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; + } +} diff --git a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java index 0deec947..35a09509 100644 --- a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java +++ b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java @@ -3,7 +3,6 @@ package ru.betterend.world.generator; import java.util.Random; import java.util.concurrent.locks.ReentrantLock; -import net.minecraft.util.Identifier; import ru.betterend.config.Configs; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.util.MHelper; @@ -23,8 +22,8 @@ public class TerrainGenerator { private static boolean noRingVoid; public static void init() { - newGenerator = Configs.GENERATOR_CONFIG.getBoolean(new Identifier("generator", "enabled"), "useNewGenerator", true); - noRingVoid = Configs.GENERATOR_CONFIG.getBoolean(new Identifier("generator", "enabled"), "noRingVoid", false); + newGenerator = Configs.GENERATOR_CONFIG.getBoolean("generator", "useNewGenerator", true); + noRingVoid = Configs.GENERATOR_CONFIG.getBoolean("generator", "noRingVoid", false); } public static void initNoise(long seed) {