This commit is contained in:
paulevsGitch 2020-12-31 05:57:05 +03:00
commit 82fa9b1047
14 changed files with 189 additions and 344 deletions

View file

@ -2,8 +2,6 @@ package ru.betterend.config;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import com.google.gson.JsonObject;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.config.ConfigKeeper.BooleanEntry; import ru.betterend.config.ConfigKeeper.BooleanEntry;
import ru.betterend.config.ConfigKeeper.Entry; import ru.betterend.config.ConfigKeeper.Entry;
@ -15,20 +13,16 @@ import ru.betterend.config.ConfigKeeper.StringEntry;
public abstract class Config { public abstract class Config {
protected final ConfigKeeper keeper; protected final ConfigKeeper keeper;
protected final ConfigWriter writer;
protected abstract void registerEntries(); protected abstract void registerEntries();
public Config(String group) { public Config(String group) {
this.writer = new ConfigWriter(group); this.keeper = new ConfigKeeper(group);
JsonObject settings = writer.load();
this.keeper = new ConfigKeeper(settings);
this.registerEntries(); this.registerEntries();
this.writer.save();
} }
public void saveChanges() { public void saveChanges() {
this.writer.save(); this.keeper.save();
} }
@Nullable @Nullable

View file

@ -9,7 +9,6 @@ import org.jetbrains.annotations.Nullable;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.reflect.TypeToken; import com.google.common.reflect.TypeToken;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import net.minecraft.util.JsonHelper; import net.minecraft.util.JsonHelper;
@ -18,15 +17,27 @@ import ru.betterend.util.JsonFactory;
public final class ConfigKeeper { public final class ConfigKeeper {
private Map<ConfigKey, Entry<?>> configEntries = Maps.newHashMap(); private Map<ConfigKey, Entry<?>> configEntries = Maps.newHashMap();
private final JsonObject configObject;
public ConfigKeeper(JsonObject config) { private final JsonObject configObject;
this.configObject = config; private final ConfigWriter writer;
private boolean changed = false;
public ConfigKeeper(String group) {
this.writer = new ConfigWriter(group);
this.configObject = writer.load();
} }
private <T, E extends Entry<T>> void storeValue(ConfigKey key, E entry, T value) { public void save() {
if (configObject == null) return; if (!changed) return;
this.writer.save();
this.changed = false;
}
private <T, E extends Entry<T>> void initializeEntry(ConfigKey key, E entry) {
if (configObject == null) {
return;
}
String group = key.getOwner(); String group = key.getOwner();
JsonObject jsonGroup; JsonObject jsonGroup;
if (configObject.has(group)) { if (configObject.has(group)) {
@ -45,33 +56,24 @@ public final class ConfigKeeper {
} }
String paramKey = key.getEntry(); String paramKey = key.getEntry();
paramKey += " [default: " + entry.getDefault() + "]"; paramKey += " [default: " + entry.getDefault() + "]";
entry.toJson(jsonCategory, paramKey, value); this.changed = entry.setLocation(jsonCategory, paramKey);
} }
private <T, E extends Entry<T>> T getValue(ConfigKey key, E entry) { private <T, E extends Entry<T>> void storeValue(E entry, T value) {
if (configObject == null) { if (configObject == null) {
return;
}
T val = entry.getValue();
if (value.equals(val)) return;
entry.toJson(value);
this.changed = true;
}
private <T, E extends Entry<T>> T getValue(E entry) {
if (!entry.hasLocation()) {
return entry.getDefault(); return entry.getDefault();
} }
return entry.fromJson();
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));
} }
@Nullable @Nullable
@ -93,9 +95,9 @@ public final class ConfigKeeper {
} }
public <T, E extends Entry<T>> E registerEntry(ConfigKey key, E entry) { public <T, E extends Entry<T>> E registerEntry(ConfigKey key, E entry) {
entry.setWriter(value -> this.storeValue(key, entry, value)); entry.setWriter(value -> this.storeValue(entry, value));
entry.setReader(() -> { return this.getValue(key, entry); }); entry.setReader(() -> { return this.getValue(entry); });
this.storeValue(key, entry, entry.getValue()); this.initializeEntry(key, entry);
this.configEntries.put(key, entry); this.configEntries.put(key, entry);
return entry; return entry;
} }
@ -107,13 +109,13 @@ public final class ConfigKeeper {
} }
@Override @Override
public Boolean fromJson(JsonElement json) { public Boolean fromJson() {
return json.getAsBoolean(); return JsonHelper.getBoolean(location, key, defaultValue);
} }
@Override @Override
public void toJson(JsonObject json, String key, Boolean value) { public void toJson(Boolean value) {
json.addProperty(key, value); this.location.addProperty(key, value);
} }
} }
@ -124,13 +126,13 @@ public final class ConfigKeeper {
} }
@Override @Override
public Float fromJson(JsonElement json) { public Float fromJson() {
return json.getAsFloat(); return JsonHelper.getFloat(location, key, defaultValue);
} }
@Override @Override
public void toJson(JsonObject json, String key, Float value) { public void toJson(Float value) {
json.addProperty(key, value); this.location.addProperty(key, value);
} }
} }
@ -141,13 +143,13 @@ public final class ConfigKeeper {
} }
@Override @Override
public Float fromJson(JsonElement json) { public Float fromJson() {
return json.getAsFloat(); return JsonHelper.getFloat(location, key, defaultValue);
} }
@Override @Override
public void toJson(JsonObject json, String key, Float value) { public void toJson(Float value) {
json.addProperty(key, value); this.location.addProperty(key, value);
} }
} }
@ -163,13 +165,13 @@ public final class ConfigKeeper {
} }
@Override @Override
public Integer fromJson(JsonElement json) { public Integer fromJson() {
return json.getAsInt(); return JsonHelper.getInt(location, key, defaultValue);
} }
@Override @Override
public void toJson(JsonObject json, String key, Integer value) { public void toJson(Integer value) {
json.addProperty(key, value); this.location.addProperty(key, value);
} }
} }
@ -180,13 +182,13 @@ public final class ConfigKeeper {
} }
@Override @Override
public Integer fromJson(JsonElement json) { public Integer fromJson() {
return json.getAsInt(); return JsonHelper.getInt(location, key, defaultValue);
} }
@Override @Override
public void toJson(JsonObject json, String key, Integer value) { public void toJson(Integer value) {
json.addProperty(key, value); this.location.addProperty(key, value);
} }
} }
@ -197,13 +199,13 @@ public final class ConfigKeeper {
} }
@Override @Override
public String fromJson(JsonElement json) { public String fromJson() {
return json.getAsString(); return JsonHelper.getString(location, key, defaultValue);
} }
@Override @Override
public void toJson(JsonObject json, String key, String value) { public void toJson(String value) {
json.addProperty(key, value); this.location.addProperty(key, value);
} }
} }
@ -226,13 +228,13 @@ public final class ConfigKeeper {
} }
@Override @Override
public T fromJson(JsonElement json) { public T fromJson() {
return JsonFactory.GSON.fromJson(json, type); return JsonFactory.GSON.fromJson(location.get(key), type);
} }
@Override @Override
public void toJson(JsonObject json, String key, T value) { public void toJson(T value) {
json.addProperty(key, JsonFactory.GSON.toJson(json, type)); location.addProperty(key, JsonFactory.GSON.toJson(value, type));
} }
} }
@ -265,9 +267,11 @@ public final class ConfigKeeper {
protected final T defaultValue; protected final T defaultValue;
protected Consumer<T> writer; protected Consumer<T> writer;
protected Supplier<T> reader; protected Supplier<T> reader;
protected JsonObject location;
protected String key;
public abstract T fromJson(JsonElement json); public abstract T fromJson();
public abstract void toJson(JsonObject json, String key, T value); public abstract void toJson(T value);
public Entry (T defaultValue) { public Entry (T defaultValue) {
this.defaultValue = defaultValue; this.defaultValue = defaultValue;
@ -281,6 +285,21 @@ public final class ConfigKeeper {
this.reader = reader; 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() { public T getValue() {
return this.reader.get(); return this.reader.get();
} }

View file

@ -1,17 +1,17 @@
package ru.betterend.config; package ru.betterend.config;
public class Configs { 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 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 IdConfig BIOME_CONFIG = new EntryConfig("biomes");
public static final SimpleConfig GENERATOR_CONFIG = new SimpleConfig("generator");
public static void saveConfigs() { public static void saveConfigs() {
ITEM_CONFIG.saveChanges(); ENTITY_CONFIG.saveChanges();
BLOCK_CONFIG.saveChanges(); BLOCK_CONFIG.saveChanges();
BIOME_CONFIG.saveChanges(); BIOME_CONFIG.saveChanges();
ENTITY_CONFIG.saveChanges(); ITEM_CONFIG.saveChanges();
GENERATOR_CONFIG.save(); GENERAL.saveChanges();
} }
} }

View file

@ -1,256 +1,88 @@
package ru.betterend.config; package ru.betterend.config;
import java.io.File; import org.jetbrains.annotations.Nullable;
import java.io.FileNotFoundException;
import java.io.FileReader; import ru.betterend.BetterEnd;
import java.io.FileWriter; import ru.betterend.config.ConfigKeeper.Entry;
import java.io.IOException; import ru.betterend.config.ConfigKeeper.FloatRange;
import java.io.Reader; import ru.betterend.config.ConfigKeeper.IntegerRange;
import java.util.ArrayList;
import java.util.Iterator; public class SimpleConfig extends Config {
import java.util.List;
import java.util.Map.Entry; public SimpleConfig(String group) {
super(group);
import com.google.gson.Gson; }
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray; @Override
import com.google.gson.JsonElement; protected void registerEntries() {}
import com.google.gson.JsonObject;
protected ConfigKey createKey(String category, String key) {
import ru.betterend.BetterEnd; return new ConfigKey(BetterEnd.MOD_ID, category, key);
}
public final class SimpleConfig {
private boolean rewrite = false; @Nullable
private final String name; public <T, E extends Entry<T>> E getEntry(String category, String key, Class<E> type) {
private JsonObject config; return this.getEntry(createKey(category, key), type);
}
public SimpleConfig(String name) {
this.name = name; @Nullable
} public <T, E extends Entry<T>> T getDefault(String category, String key, Class<E> type) {
return this.getDefault(createKey(category, key), type);
private void load() { }
if (config == null) {
File file = getFolder(); public String getString(String category, String key, String defaultValue) {
if (!file.exists()) return this.getString(createKey(category, key), defaultValue);
file.mkdirs(); }
file = getFile();
if (file.exists()) { public String getString(String category, String key) {
Gson gson = new Gson(); return this.getString(createKey(category, key));
try { }
Reader reader = new FileReader(file);
config = gson.fromJson(reader, JsonObject.class); public boolean setString(String category, String key, String value) {
if (config == null) { return this.setString(createKey(category, key), value);
config = new JsonObject(); }
rewrite = true;
} public int getInt(String category, String key, int defaultValue) {
else { return this.getInt(createKey(category, key), defaultValue);
rewrite = false; }
}
} public int getInt(String category, String key) {
catch (FileNotFoundException e) { return this.getInt(createKey(category, key));
e.printStackTrace(); }
config = new JsonObject();
rewrite = true; public boolean setInt(String category, String key, int value) {
} return this.setInt(createKey(category, key), value);
} }
else {
config = new JsonObject(); public boolean setRangedInt(String category, String key, int value) {
rewrite = true; 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 void save() { }
if (rewrite) {
File file = getFolder(); public float getFloat(String category, String key, float defaultValue) {
if (!file.exists()) return this.getFloat(createKey(category, key), defaultValue);
file.mkdirs(); }
file = getFile();
Gson gson = new GsonBuilder().setPrettyPrinting().create(); public float getFloat(String category, String key) {
try { return this.getFloat(createKey(category, key));
FileWriter writer = new FileWriter(file); }
String gstring = gson.toJson(config);
writer.write(gstring); public boolean setFloat(String category, String key, float value) {
writer.flush(); return this.setFloat(createKey(category, key), value);
writer.close(); }
rewrite = false;
} public boolean getBoolean(String category, String key, boolean defaultValue) {
catch (IOException e) { return this.getBoolean(createKey(category, key), defaultValue);
e.printStackTrace(); }
}
} public boolean getBoolean(String category, String key) {
} return this.getBoolean(createKey(category, key));
}
private File getFile() {
return new File(String.format("./config/%s/%s.json", BetterEnd.MOD_ID, name)); public boolean setBoolean(String category, String key, boolean value) {
} return this.setBoolean(createKey(category, key), value);
}
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<String> getBaseGroups() {
List<String> groups = new ArrayList<String>();
Iterator<Entry<String, JsonElement>> iterator = config.entrySet().iterator();
iterator.forEachRemaining((element) -> {
groups.add(element.getKey());
});
return groups;
}
public List<Entry<String, JsonElement>> getGroupMembers(JsonObject group) {
List<Entry<String, JsonElement>> result = new ArrayList<Entry<String, JsonElement>>();
result.addAll(group.entrySet());
return result;
}
public void markToSave() {
rewrite = true;
}
}

View file

@ -1,4 +1,4 @@
package ru.betterend.compat.rei; package ru.betterend.integration.rei;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.List; import java.util.List;

View file

@ -1,4 +1,4 @@
package ru.betterend.compat.rei; package ru.betterend.integration.rei;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;

View file

@ -1,4 +1,4 @@
package ru.betterend.compat.rei; package ru.betterend.integration.rei;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;

View file

@ -1,4 +1,4 @@
package ru.betterend.compat.rei; package ru.betterend.integration.rei;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;

View file

@ -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.plugin.containers.CraftingContainerInfoWrapper;
import me.shedaniel.rei.server.ContainerInfoHandler; import me.shedaniel.rei.server.ContainerInfoHandler;

View file

@ -1,4 +1,4 @@
package ru.betterend.compat.rei; package ru.betterend.integration.rei;
import java.util.List; import java.util.List;

View file

@ -1,4 +1,4 @@
package ru.betterend.compat.rei; package ru.betterend.integration.rei;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;

View file

@ -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.EntryStack;
import me.shedaniel.rei.api.RecipeHelper; import me.shedaniel.rei.api.RecipeHelper;

View file

@ -22,8 +22,8 @@ public class TerrainGenerator {
private static boolean noRingVoid; private static boolean noRingVoid;
public static void init() { public static void init() {
newGenerator = Configs.GENERATOR_CONFIG.getBoolean("generator", "useNewGenerator", false); newGenerator = Configs.GENERAL.getBoolean("generator", "useNewGenerator", false);
noRingVoid = Configs.GENERATOR_CONFIG.getBoolean("generator", "noRingVoid", false); noRingVoid = Configs.GENERAL.getBoolean("generator", "noRingVoid", false);
} }
public static void initNoise(long seed) { public static void initNoise(long seed) {

View file

@ -26,10 +26,10 @@
"ru.betterend.client.BetterEndClient" "ru.betterend.client.BetterEndClient"
], ],
"rei_plugins": [ "rei_plugins": [
"ru.betterend.compat.rei.REIPlugin" "ru.betterend.integration.rei.REIPlugin"
], ],
"rei_containers": [ "rei_containers": [
"ru.betterend.compat.rei.REIContainer" "ru.betterend.integration.rei.REIContainer"
] ]
}, },
"mixins": [ "mixins": [