Removed config classes
This commit is contained in:
parent
84e35f6a86
commit
055baeaae0
11 changed files with 13 additions and 898 deletions
|
@ -1,10 +0,0 @@
|
||||||
package ru.betterend.config;
|
|
||||||
|
|
||||||
public class CategoryConfig extends IdConfig {
|
|
||||||
|
|
||||||
public CategoryConfig(String group) {
|
|
||||||
super(group, (id, category) -> {
|
|
||||||
return new ConfigKey(id.getPath(), id.getNamespace(), category);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,154 +0,0 @@
|
||||||
package ru.betterend.config;
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import ru.betterend.BetterEnd;
|
|
||||||
import ru.betterend.config.ConfigKeeper.BooleanEntry;
|
|
||||||
import ru.betterend.config.ConfigKeeper.Entry;
|
|
||||||
import ru.betterend.config.ConfigKeeper.FloatEntry;
|
|
||||||
import ru.betterend.config.ConfigKeeper.IntegerEntry;
|
|
||||||
import ru.betterend.config.ConfigKeeper.RangeEntry;
|
|
||||||
import ru.betterend.config.ConfigKeeper.StringEntry;
|
|
||||||
|
|
||||||
public abstract class Config {
|
|
||||||
|
|
||||||
protected final ConfigKeeper keeper;
|
|
||||||
|
|
||||||
protected abstract void registerEntries();
|
|
||||||
|
|
||||||
public Config(String group) {
|
|
||||||
this.keeper = new ConfigKeeper(group);
|
|
||||||
this.registerEntries();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void saveChanges() {
|
|
||||||
this.keeper.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public <T, E extends Entry<T>> E getEntry(ConfigKey key, Class<E> type) {
|
|
||||||
return this.keeper.getEntry(key, type);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public <T, E extends Entry<T>> T getDefault(ConfigKey key, Class<E> type) {
|
|
||||||
Entry<T> entry = keeper.getEntry(key, type);
|
|
||||||
return entry != null ? entry.getDefault() : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String getString(ConfigKey key, String defaultValue) {
|
|
||||||
String str = keeper.getValue(key, StringEntry.class);
|
|
||||||
if (str == null) {
|
|
||||||
StringEntry entry = keeper.registerEntry(key, new StringEntry(defaultValue));
|
|
||||||
return entry.getValue();
|
|
||||||
}
|
|
||||||
return str != null ? str : defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String getString(ConfigKey key) {
|
|
||||||
String str = keeper.getValue(key, StringEntry.class);
|
|
||||||
return str != null ? str : "";
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean setString(ConfigKey key, String value) {
|
|
||||||
try {
|
|
||||||
StringEntry entry = keeper.getEntry(key, StringEntry.class);
|
|
||||||
if (entry == null) return false;
|
|
||||||
entry.setValue(value);
|
|
||||||
return true;
|
|
||||||
} catch (NullPointerException ex) {
|
|
||||||
BetterEnd.LOGGER.catching(ex);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected int getInt(ConfigKey key, int defaultValue) {
|
|
||||||
Integer val = keeper.getValue(key, IntegerEntry.class);
|
|
||||||
if (val == null) {
|
|
||||||
IntegerEntry entry = keeper.registerEntry(key, new IntegerEntry(defaultValue));
|
|
||||||
return entry.getValue();
|
|
||||||
}
|
|
||||||
return val != null ? val : defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected int getInt(ConfigKey key) {
|
|
||||||
Integer val = keeper.getValue(key, IntegerEntry.class);
|
|
||||||
return val != null ? val : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean setInt(ConfigKey key, int value) {
|
|
||||||
try {
|
|
||||||
IntegerEntry entry = keeper.getEntry(key, IntegerEntry.class);
|
|
||||||
if (entry == null) return false;
|
|
||||||
entry.setValue(value);
|
|
||||||
return true;
|
|
||||||
} catch (NullPointerException ex) {
|
|
||||||
BetterEnd.LOGGER.catching(ex);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected <T extends Comparable<T>, RE extends RangeEntry<T>> boolean setRanged(ConfigKey key, T value, Class<RE> type) {
|
|
||||||
try {
|
|
||||||
RangeEntry<T> entry = keeper.getEntry(key, type);
|
|
||||||
if (entry == null) return false;
|
|
||||||
entry.setValue(value);
|
|
||||||
return true;
|
|
||||||
} catch (NullPointerException | ClassCastException ex) {
|
|
||||||
BetterEnd.LOGGER.catching(ex);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected float getFloat(ConfigKey key, float defaultValue) {
|
|
||||||
Float val = keeper.getValue(key, FloatEntry.class);
|
|
||||||
if (val == null) {
|
|
||||||
FloatEntry entry = keeper.registerEntry(key, new FloatEntry(defaultValue));
|
|
||||||
return entry.getValue();
|
|
||||||
}
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected float getFloat(ConfigKey key) {
|
|
||||||
Float val = keeper.getValue(key, FloatEntry.class);
|
|
||||||
return val != null ? val : 0.0F;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean setFloat(ConfigKey key, float value) {
|
|
||||||
try {
|
|
||||||
FloatEntry entry = keeper.getEntry(key, FloatEntry.class);
|
|
||||||
if (entry == null) return false;
|
|
||||||
entry.setValue(value);
|
|
||||||
return true;
|
|
||||||
} catch (NullPointerException ex) {
|
|
||||||
BetterEnd.LOGGER.catching(ex);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean getBoolean(ConfigKey key, boolean defaultValue) {
|
|
||||||
Boolean val = keeper.getValue(key, BooleanEntry.class);
|
|
||||||
if (val == null) {
|
|
||||||
BooleanEntry entry = keeper.registerEntry(key, new BooleanEntry(defaultValue));
|
|
||||||
return entry.getValue();
|
|
||||||
}
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean getBoolean(ConfigKey key) {
|
|
||||||
Boolean val = keeper.getValue(key, BooleanEntry.class);
|
|
||||||
return val != null ? val : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean setBoolean(ConfigKey key, boolean value) {
|
|
||||||
try {
|
|
||||||
BooleanEntry entry = keeper.getEntry(key, BooleanEntry.class);
|
|
||||||
if (entry == null) return false;
|
|
||||||
entry.setValue(value);
|
|
||||||
return true;
|
|
||||||
} catch (NullPointerException ex) {
|
|
||||||
BetterEnd.LOGGER.catching(ex);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,318 +0,0 @@
|
||||||
package ru.betterend.config;
|
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
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.GsonHelper;
|
|
||||||
import ru.betterend.util.JsonFactory;
|
|
||||||
|
|
||||||
public final class ConfigKeeper {
|
|
||||||
|
|
||||||
private final Map<ConfigKey, Entry<?>> configEntries = Maps.newHashMap();
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void save() {
|
|
||||||
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[] path = key.getPath();
|
|
||||||
JsonObject obj = configObject;
|
|
||||||
|
|
||||||
if (!key.isRoot()) {
|
|
||||||
for (String group: path) {
|
|
||||||
JsonElement element = obj.get(group);
|
|
||||||
if (element == null || !element.isJsonObject()) {
|
|
||||||
element = new JsonObject();
|
|
||||||
obj.add(group, element);
|
|
||||||
}
|
|
||||||
obj = element.getAsJsonObject();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String paramKey = key.getEntry();
|
|
||||||
paramKey += " [default: " + entry.getDefault() + "]";
|
|
||||||
|
|
||||||
this.changed |= entry.setLocation(obj, paramKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
private <T, E extends Entry<T>> 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, E extends Entry<T>> T getValue(E entry) {
|
|
||||||
if (!entry.hasLocation()) {
|
|
||||||
return entry.getDefault();
|
|
||||||
}
|
|
||||||
return entry.fromJson();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public <T, E extends Entry<T>> E getEntry(ConfigKey key, Class<E> type) {
|
|
||||||
Entry<?> entry = this.configEntries.get(key);
|
|
||||||
if (type.isInstance(entry)) {
|
|
||||||
return type.cast(entry);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public <T, E extends Entry<T>> T getValue(ConfigKey key, Class<E> type) {
|
|
||||||
Entry<T> entry = this.getEntry(key, type);
|
|
||||||
if (entry == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return entry.getValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
public <T, E extends Entry<T>> E registerEntry(ConfigKey key, E entry) {
|
|
||||||
entry.setWriter(value -> this.storeValue(entry, value));
|
|
||||||
entry.setReader(() -> { return this.getValue(entry); });
|
|
||||||
this.initializeEntry(key, entry);
|
|
||||||
this.configEntries.put(key, entry);
|
|
||||||
return entry;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class BooleanEntry extends Entry<Boolean> {
|
|
||||||
|
|
||||||
public BooleanEntry(Boolean defaultValue) {
|
|
||||||
super(defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Boolean fromJson() {
|
|
||||||
return GsonHelper.getAsBoolean(location, key, defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void toJson(Boolean value) {
|
|
||||||
this.location.addProperty(key, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class FloatEntry extends Entry<Float> {
|
|
||||||
|
|
||||||
public FloatEntry(Float defaultValue) {
|
|
||||||
super(defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Float fromJson() {
|
|
||||||
return GsonHelper.getAsFloat(location, key, defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void toJson(Float value) {
|
|
||||||
this.location.addProperty(key, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class FloatRange extends RangeEntry<Float> {
|
|
||||||
|
|
||||||
public FloatRange(Float defaultValue, float minVal, float maxVal) {
|
|
||||||
super(defaultValue, minVal, maxVal);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Float fromJson() {
|
|
||||||
return GsonHelper.getAsFloat(location, key, defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void toJson(Float value) {
|
|
||||||
this.location.addProperty(key, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class IntegerEntry extends Entry<Integer> {
|
|
||||||
|
|
||||||
public IntegerEntry(Integer defaultValue) {
|
|
||||||
super(defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Integer getDefault() {
|
|
||||||
return this.defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Integer fromJson() {
|
|
||||||
return GsonHelper.getAsInt(location, key, defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void toJson(Integer value) {
|
|
||||||
this.location.addProperty(key, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class IntegerRange extends RangeEntry<Integer> {
|
|
||||||
|
|
||||||
public IntegerRange(Integer defaultValue, int minVal, int maxVal) {
|
|
||||||
super(defaultValue, minVal, maxVal);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Integer fromJson() {
|
|
||||||
return GsonHelper.getAsInt(location, key, defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void toJson(Integer value) {
|
|
||||||
this.location.addProperty(key, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class StringEntry extends Entry<String> {
|
|
||||||
|
|
||||||
public StringEntry(String defaultValue) {
|
|
||||||
super(defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String fromJson() {
|
|
||||||
return GsonHelper.getAsString(location, key, defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void toJson(String value) {
|
|
||||||
this.location.addProperty(key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class EnumEntry<T extends Enum<T>> extends Entry<T> {
|
|
||||||
|
|
||||||
private final Type type;
|
|
||||||
|
|
||||||
public EnumEntry(T defaultValue) {
|
|
||||||
super(defaultValue);
|
|
||||||
TypeToken<T> token = new TypeToken<T>(){
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
};
|
|
||||||
this.type = token.getType();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public T getDefault() {
|
|
||||||
return this.defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public T fromJson() {
|
|
||||||
return JsonFactory.GSON.fromJson(location.get(key), type);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void toJson(T value) {
|
|
||||||
location.addProperty(key, JsonFactory.GSON.toJson(value, type));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static abstract class RangeEntry<T extends Comparable<T>> extends Entry<T> {
|
|
||||||
|
|
||||||
private final T min, max;
|
|
||||||
|
|
||||||
public RangeEntry(T defaultValue, T minVal, T maxVal) {
|
|
||||||
super(defaultValue);
|
|
||||||
this.min = minVal;
|
|
||||||
this.max = maxVal;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setValue(T value) {
|
|
||||||
super.setValue(value.compareTo(min) < 0 ? min : value.compareTo(max) > 0 ? max : value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public T minValue() {
|
|
||||||
return this.min;
|
|
||||||
}
|
|
||||||
|
|
||||||
public T maxValue() {
|
|
||||||
return this.max;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static abstract class Entry<T> {
|
|
||||||
|
|
||||||
protected final T defaultValue;
|
|
||||||
protected Consumer<T> writer;
|
|
||||||
protected Supplier<T> reader;
|
|
||||||
protected JsonObject location;
|
|
||||||
protected String key;
|
|
||||||
|
|
||||||
public abstract T fromJson();
|
|
||||||
public abstract void toJson(T value);
|
|
||||||
|
|
||||||
public Entry (T defaultValue) {
|
|
||||||
this.defaultValue = defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setWriter(Consumer<T> writer) {
|
|
||||||
this.writer = writer;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setReader(Supplier<T> 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() {
|
|
||||||
return this.reader.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setValue(T value) {
|
|
||||||
this.writer.accept(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public T getDefault() {
|
|
||||||
return this.defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDefault() {
|
|
||||||
this.setValue(defaultValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,85 +0,0 @@
|
||||||
package ru.betterend.config;
|
|
||||||
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
|
|
||||||
public class ConfigKey {
|
|
||||||
private final String path[];
|
|
||||||
private final String entry;
|
|
||||||
private final boolean root;
|
|
||||||
|
|
||||||
public ConfigKey(String entry, String... path) {
|
|
||||||
this.validate(entry);
|
|
||||||
this.path = path;
|
|
||||||
this.entry = entry;
|
|
||||||
this.root = path.length == 0 || (path.length == 1 && path[0].isEmpty());
|
|
||||||
}
|
|
||||||
|
|
||||||
public ConfigKey(String entry, ResourceLocation path) {
|
|
||||||
this(entry, path.getNamespace(), path.getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
public String[] getPath() {
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getEntry() {
|
|
||||||
return entry;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isRoot() {
|
|
||||||
return root;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
final int prime = 31;
|
|
||||||
int result = 1;
|
|
||||||
result = prime * result + path.hashCode();
|
|
||||||
result = prime * result + entry.hashCode();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object obj) {
|
|
||||||
if (this == obj) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (!(obj instanceof ConfigKey)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
ConfigKey other = (ConfigKey) obj;
|
|
||||||
if (other.path.length != path.length) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
for (int i = 0; i < path.length; i++) {
|
|
||||||
if (!path[i].equals(other.path[i])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!entry.equals(other.entry)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
if (root) {
|
|
||||||
return String.format("[root]:%s", entry);
|
|
||||||
}
|
|
||||||
String p = path[0];
|
|
||||||
for (int i = 1; i < path.length; i++) {
|
|
||||||
p += "." + path[i];
|
|
||||||
}
|
|
||||||
return String.format("%s:%s", p, entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void validate(String entry) {
|
|
||||||
if (entry == null) {
|
|
||||||
throw new NullPointerException("Config key must be not null!");
|
|
||||||
}
|
|
||||||
if (entry.isEmpty()) {
|
|
||||||
throw new IndexOutOfBoundsException("Config key must be not empty!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,69 +0,0 @@
|
||||||
package ru.betterend.config;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
|
|
||||||
import com.google.gson.JsonElement;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
|
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
|
||||||
import ru.betterend.BetterEnd;
|
|
||||||
import ru.betterend.util.JsonFactory;
|
|
||||||
|
|
||||||
public class ConfigWriter {
|
|
||||||
|
|
||||||
private final static Path GAME_CONFIG_DIR = FabricLoader.getInstance().getConfigDir();
|
|
||||||
public final static File MOD_CONFIG_DIR = new File(GAME_CONFIG_DIR.toFile(), BetterEnd.MOD_ID);
|
|
||||||
|
|
||||||
private final File configFile;
|
|
||||||
private JsonObject configObject;
|
|
||||||
|
|
||||||
public ConfigWriter(String configFile) {
|
|
||||||
this.configFile = new File(MOD_CONFIG_DIR, configFile + ".json");
|
|
||||||
this.load();
|
|
||||||
}
|
|
||||||
|
|
||||||
public JsonObject getConfig() {
|
|
||||||
return configObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void save() {
|
|
||||||
if (configObject == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
save(configFile, configObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
public JsonObject load() {
|
|
||||||
if (configObject == null) {
|
|
||||||
configObject = load(configFile);
|
|
||||||
}
|
|
||||||
return configObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void save(JsonElement config) {
|
|
||||||
this.configObject = config.getAsJsonObject();
|
|
||||||
save(configFile, config);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static JsonObject load(File configFile) {
|
|
||||||
return JsonFactory.getJsonObject(configFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void save(File configFile, JsonElement config) {
|
|
||||||
JsonFactory.storeJson(configFile, config);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String scrubFileName(String input) {
|
|
||||||
input = input.replaceAll("[/\\ ]+", "_");
|
|
||||||
input = input.replaceAll("[,:&\"\\|\\<\\>\\?\\*]", "_");
|
|
||||||
|
|
||||||
return input;
|
|
||||||
}
|
|
||||||
|
|
||||||
static {
|
|
||||||
if (!MOD_CONFIG_DIR.exists()) {
|
|
||||||
MOD_CONFIG_DIR.mkdirs();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,18 +2,21 @@ package ru.betterend.config;
|
||||||
|
|
||||||
import net.fabricmc.api.EnvType;
|
import net.fabricmc.api.EnvType;
|
||||||
import net.fabricmc.api.Environment;
|
import net.fabricmc.api.Environment;
|
||||||
|
import ru.bclib.config.EntryConfig;
|
||||||
|
import ru.bclib.config.IdConfig;
|
||||||
|
import ru.bclib.config.PathConfig;
|
||||||
import ru.betterend.BetterEnd;
|
import ru.betterend.BetterEnd;
|
||||||
|
|
||||||
public class Configs {
|
public class Configs {
|
||||||
public static final PathConfig ENTITY_CONFIG = new PathConfig("entities");
|
public static final PathConfig ENTITY_CONFIG = new PathConfig(BetterEnd.MOD_ID, "entities");
|
||||||
public static final PathConfig BLOCK_CONFIG = new PathConfig("blocks");
|
public static final PathConfig BLOCK_CONFIG = new PathConfig(BetterEnd.MOD_ID, "blocks");
|
||||||
public static final PathConfig ITEM_CONFIG = new PathConfig("items");
|
public static final PathConfig ITEM_CONFIG = new PathConfig(BetterEnd.MOD_ID, "items");
|
||||||
public static final IdConfig BIOME_CONFIG = new EntryConfig("biomes");
|
public static final IdConfig BIOME_CONFIG = new EntryConfig(BetterEnd.MOD_ID, "biomes");
|
||||||
public static final PathConfig GENERATOR_CONFIG = new PathConfig("generator");
|
public static final PathConfig GENERATOR_CONFIG = new PathConfig(BetterEnd.MOD_ID, "generator");
|
||||||
public static final PathConfig RECIPE_CONFIG = new PathConfig("recipes");
|
public static final PathConfig RECIPE_CONFIG = new PathConfig(BetterEnd.MOD_ID, "recipes");
|
||||||
|
|
||||||
@Environment(value = EnvType.CLIENT)
|
@Environment(value = EnvType.CLIENT)
|
||||||
public static final PathConfig CLENT_CONFIG = new PathConfig("client");
|
public static final PathConfig CLENT_CONFIG = new PathConfig(BetterEnd.MOD_ID, "client");
|
||||||
|
|
||||||
public static void saveConfigs() {
|
public static void saveConfigs() {
|
||||||
ENTITY_CONFIG.saveChanges();
|
ENTITY_CONFIG.saveChanges();
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
package ru.betterend.config;
|
|
||||||
|
|
||||||
public class EntryConfig extends IdConfig {
|
|
||||||
|
|
||||||
public EntryConfig(String group) {
|
|
||||||
super(group, (id, entry) -> {
|
|
||||||
return new ConfigKey(entry, id);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,93 +0,0 @@
|
||||||
package ru.betterend.config;
|
|
||||||
|
|
||||||
import java.util.function.BiFunction;
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import ru.betterend.config.ConfigKeeper.Entry;
|
|
||||||
import ru.betterend.config.ConfigKeeper.FloatRange;
|
|
||||||
import ru.betterend.config.ConfigKeeper.IntegerRange;
|
|
||||||
|
|
||||||
public class IdConfig extends Config {
|
|
||||||
|
|
||||||
protected final BiFunction<ResourceLocation, String, ConfigKey> keyFactory;
|
|
||||||
|
|
||||||
public IdConfig(String group, BiFunction<ResourceLocation, String, ConfigKey> keyFactory) {
|
|
||||||
super(group);
|
|
||||||
this.keyFactory = keyFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void registerEntries() {}
|
|
||||||
|
|
||||||
protected ConfigKey createKey(ResourceLocation id, String key) {
|
|
||||||
return this.keyFactory.apply(id, key);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public <T, E extends Entry<T>> E getEntry(ResourceLocation id, String key, Class<E> type) {
|
|
||||||
return this.getEntry(createKey(id, key), type);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public <T, E extends Entry<T>> T getDefault(ResourceLocation id, String key, Class<E> type) {
|
|
||||||
return this.getDefault(createKey(id, key), type);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getString(ResourceLocation id, String key, String defaultValue) {
|
|
||||||
return this.getString(createKey(id, key), defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getString(ResourceLocation id, String key) {
|
|
||||||
return this.getString(createKey(id, key));
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setString(ResourceLocation id, String key, String value) {
|
|
||||||
return this.setString(createKey(id, key), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getInt(ResourceLocation id, String key, int defaultValue) {
|
|
||||||
return this.getInt(createKey(id, key), defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getInt(ResourceLocation id, String key) {
|
|
||||||
return this.getInt(createKey(id, key));
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setInt(ResourceLocation id, String key, int value) {
|
|
||||||
return this.setInt(createKey(id, key), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setRangedInt(ResourceLocation id, String key, int value) {
|
|
||||||
return this.setRanged(createKey(id, key), value, IntegerRange.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setRangedFloat(ResourceLocation id, String key, float value) {
|
|
||||||
return this.setRanged(createKey(id, key), value, FloatRange.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public float getFloat(ResourceLocation id, String key, float defaultValue) {
|
|
||||||
return this.getFloat(createKey(id, key), defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
public float getFloat(ResourceLocation id, String key) {
|
|
||||||
return this.getFloat(createKey(id, key));
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setFloat(ResourceLocation id, String key, float value) {
|
|
||||||
return this.setFloat(createKey(id, key), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getBoolean(ResourceLocation id, String key, boolean defaultValue) {
|
|
||||||
return this.getBoolean(createKey(id, key), defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getBoolean(ResourceLocation id, String key) {
|
|
||||||
return this.getBoolean(createKey(id, key));
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setBoolean(ResourceLocation id, String key, boolean value) {
|
|
||||||
return this.setBoolean(createKey(id, key), value);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,149 +0,0 @@
|
||||||
package ru.betterend.config;
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import ru.betterend.config.ConfigKeeper.Entry;
|
|
||||||
import ru.betterend.config.ConfigKeeper.FloatRange;
|
|
||||||
import ru.betterend.config.ConfigKeeper.IntegerRange;
|
|
||||||
|
|
||||||
public class PathConfig extends Config {
|
|
||||||
|
|
||||||
public PathConfig(String group) {
|
|
||||||
super(group);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void registerEntries() {}
|
|
||||||
|
|
||||||
protected ConfigKey createKey(String category, String key) {
|
|
||||||
return new ConfigKey(key, category.split("\\."));
|
|
||||||
}
|
|
||||||
|
|
||||||
protected ConfigKey createKey(String key) {
|
|
||||||
return createKey("", key);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public <T, E extends Entry<T>> E getEntry(String category, String key, Class<E> type) {
|
|
||||||
return this.getEntry(createKey(category, key), type);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public <T, E extends Entry<T>> T getDefault(String category, String key, Class<E> 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// From Root
|
|
||||||
|
|
||||||
public String getStringRoot(String key, String defaultValue) {
|
|
||||||
return this.getString(createKey(key), defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getStringRoot(String key) {
|
|
||||||
return this.getString(createKey(key));
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setStringRoot(String key, String value) {
|
|
||||||
return this.setString(createKey(key), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getIntRoot(String key, int defaultValue) {
|
|
||||||
return this.getInt(createKey(key), defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getIntRoot(String key) {
|
|
||||||
return this.getInt(createKey(key));
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setIntRoot(String key, int value) {
|
|
||||||
return this.setInt(createKey(key), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setRangedIntRoot(String key, int value) {
|
|
||||||
return this.setRanged(createKey(key), value, IntegerRange.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setRangedFloatRoot(String key, float value) {
|
|
||||||
return this.setRanged(createKey(key), value, FloatRange.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public float getFloatRoot(String key, float defaultValue) {
|
|
||||||
return this.getFloat(createKey(key), defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
public float getFloatRoot(String key) {
|
|
||||||
return this.getFloat(createKey(key));
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setFloatRoot(String key, float value) {
|
|
||||||
return this.setFloat(createKey(key), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getBooleanRoot(String key, boolean defaultValue) {
|
|
||||||
return this.getBoolean(createKey(key), defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getBooleanRoot(String key) {
|
|
||||||
return this.getBoolean(createKey(key));
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean setBooleanRoot(String key, boolean value) {
|
|
||||||
return this.setBoolean(createKey(key), value);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -5,6 +5,7 @@ import java.io.File;
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
@ -12,7 +13,6 @@ import net.minecraft.world.level.Level;
|
||||||
import ru.bclib.util.ColorUtil;
|
import ru.bclib.util.ColorUtil;
|
||||||
import ru.bclib.util.MHelper;
|
import ru.bclib.util.MHelper;
|
||||||
import ru.betterend.BetterEnd;
|
import ru.betterend.BetterEnd;
|
||||||
import ru.betterend.config.ConfigWriter;
|
|
||||||
import ru.betterend.util.JsonFactory;
|
import ru.betterend.util.JsonFactory;
|
||||||
|
|
||||||
public class EndPortals {
|
public class EndPortals {
|
||||||
|
@ -22,7 +22,7 @@ public class EndPortals {
|
||||||
private static PortalInfo[] portals;
|
private static PortalInfo[] portals;
|
||||||
|
|
||||||
public static void loadPortals() {
|
public static void loadPortals() {
|
||||||
File file = new File(ConfigWriter.MOD_CONFIG_DIR, "portals.json");
|
File file = new File(FabricLoader.getInstance().getConfigDir().toString(), "betterend/portals.json");
|
||||||
JsonObject json;
|
JsonObject json;
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
file.getParentFile().mkdirs();
|
file.getParentFile().mkdirs();
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package ru.betterend.world.generator;
|
package ru.betterend.world.generator;
|
||||||
|
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import ru.betterend.config.PathConfig;
|
import ru.bclib.config.PathConfig;
|
||||||
|
|
||||||
public class LayerOptions {
|
public class LayerOptions {
|
||||||
public final float distance;
|
public final float distance;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue