More config refactor

This commit is contained in:
Aleksey 2020-12-12 19:14:25 +03:00
parent c630e6d22a
commit 74e9adf42e
7 changed files with 96 additions and 133 deletions

View file

@ -12,7 +12,6 @@ import com.google.common.reflect.TypeToken;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import net.minecraft.util.Identifier;
import net.minecraft.util.JsonHelper;
import ru.betterend.util.JsonFactory;
@ -28,9 +27,7 @@ public final class ConfigKeeper {
private <T, E extends Entry<T>> void storeValue(ConfigKey key, E entry, T value) {
if (configObject == null) return;
Identifier categoryId = key.getCategory();
Identifier paramId = key.getParameter();
String group = categoryId.getPath();
String group = key.getOwner();
JsonObject jsonGroup;
if (configObject.has(group)) {
jsonGroup = JsonHelper.getObject(configObject, group);
@ -38,7 +35,7 @@ public final class ConfigKeeper {
jsonGroup = new JsonObject();
configObject.add(group, jsonGroup);
}
String category = paramId.getNamespace();
String category = key.getCategory();
JsonObject jsonCategory;
if (jsonGroup.has(category)) {
jsonCategory = JsonHelper.getObject(jsonGroup, category);
@ -46,7 +43,7 @@ public final class ConfigKeeper {
jsonCategory = new JsonObject();
jsonGroup.add(category, jsonCategory);
}
String paramKey = paramId.getPath();
String paramKey = key.getEntry();
paramKey += " [default: " + entry.getDefault() + "]";
entry.toJson(jsonCategory, paramKey, value);
}
@ -56,21 +53,19 @@ public final class ConfigKeeper {
return entry.getDefault();
}
Identifier categoryId = key.getCategory();
Identifier paramId = key.getParameter();
String group = categoryId.getPath();
String group = key.getOwner();
if (!configObject.has(group)) {
return entry.getDefault();
}
JsonObject jsonGroup = JsonHelper.getObject(configObject, group);
String category = paramId.getNamespace();
String category = key.getCategory();
if (!jsonGroup.has(category)) {
return entry.getDefault();
}
JsonObject jsonCategory = JsonHelper.getObject(jsonGroup, category);
String paramKey = paramId.getPath();
String paramKey = key.getEntry();
paramKey += " [default: " + entry.getDefault() + "]";
if (!jsonCategory.has(paramKey)) {
return entry.getDefault();

View file

@ -1,30 +1,38 @@
package ru.betterend.config;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.NotNull;
public class ConfigKey {
private final Identifier category;
private final Identifier parameter;
private final String owner;
private final String category;
private final String entry;
public ConfigKey(Identifier category, Identifier parameter) {
public ConfigKey(@NotNull String owner, @NotNull String category, @NotNull String entry) {
this.validate(owner, category, entry);
this.owner = owner;
this.category = category;
this.parameter = parameter;
this.entry = entry;
}
public Identifier getCategory() {
public String getOwner() {
return owner;
}
public String getCategory() {
return category;
}
public Identifier getParameter() {
return parameter;
public String getEntry() {
return entry;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((category == null) ? 0 : category.hashCode());
result = prime * result + ((parameter == null) ? 0 : parameter.hashCode());
result = prime * result + category.hashCode();
result = prime * result + entry.hashCode();
result = prime * result + owner.hashCode();
return result;
}
@ -44,13 +52,32 @@ public class ConfigKey {
} else if (!category.equals(other.category)) {
return false;
}
if (parameter == null) {
if (other.parameter != null) {
if (entry == null) {
if (other.entry != null) {
return false;
}
} else if (!parameter.equals(other.parameter)) {
} else if (!entry.equals(other.entry)) {
return false;
}
if (owner == null) {
if (other.owner != null) {
return false;
}
} else if (!owner.equals(other.owner)) {
return false;
}
return true;
}
private void validate(String owner, String category, String entry) {
if (owner == null) {
throw new NullPointerException("Failed to create ConfigKey: 'owner' can't be null.");
}
if (category == null) {
throw new NullPointerException("Failed to create ConfigKey: 'category' can't be null.");
}
if (entry == null) {
throw new NullPointerException("Failed to create ConfigKey: 'entry' can't be null.");
}
}
}

View file

@ -1,9 +1,15 @@
package ru.betterend.config;
public class Configs {
public static final IdentifierConfig ITEM_CONFIG = new IdentifierConfig("items");
public static final IdentifierConfig BLOCK_CONFIG = new IdentifierConfig("blocks");
public static final IdentifierConfig BIOME_CONFIG = new IdentifierConfig("biomes");
public static final IdConfig ITEM_CONFIG = new IdConfig("items", (item, category) -> {
return new ConfigKey(item.getNamespace(), category, item.getPath());
});
public static final IdConfig BLOCK_CONFIG = new IdConfig("blocks", (block, category) -> {
return new ConfigKey(block.getNamespace(), category, block.getPath());
});
public static final IdConfig BIOME_CONFIG = new IdConfig("biomes", (biome, entry) -> {
return new ConfigKey(biome.getNamespace(), biome.getPath(), entry);
});
public static void saveConfigs() {
ITEM_CONFIG.saveChanges();

View file

@ -1,22 +1,24 @@
package ru.betterend.config;
import java.util.function.BiFunction;
import org.jetbrains.annotations.Nullable;
import net.minecraft.util.Identifier;
import ru.betterend.config.ConfigKeeper.Entry;
public class IdentifierConfig extends Config {
public IdentifierConfig(String group) {
public class IdConfig extends Config {
private final BiFunction<Identifier, String, ConfigKey> keyFactory;
public IdConfig(String group, BiFunction<Identifier, String, ConfigKey> keyFactory) {
super(group);
this.keyFactory = keyFactory;
}
@Override
protected void registerEntries() {}
private ConfigKey createKey(Identifier id, String key) {
Identifier groupId = new Identifier(group, id.getNamespace());
Identifier categoryId = new Identifier(id.getPath(), key);
return new ConfigKey(groupId, categoryId);
return this.keyFactory.apply(id, key);
}
@Nullable

View file

@ -1,84 +0,0 @@
package ru.betterend.config;
import org.jetbrains.annotations.Nullable;
import net.minecraft.util.Identifier;
import ru.betterend.config.ConfigKeeper.Entry;
public class ItemConfig extends Config {
protected ItemConfig() {
super("settings");
}
@Override
protected void registerEntries() {}
private ConfigKey createKey(Identifier item, String category) {
Identifier groupId = new Identifier(group, item.getNamespace());
Identifier categoryId = new Identifier(category, item.getPath());
return new ConfigKey(groupId, categoryId);
}
@Nullable
public <E extends Entry<?>> E getEntry(Identifier item, String category) {
return this.getEntry(createKey(item, category));
}
@Nullable
public <T> T getDefault(Identifier item, String category) {
return this.getDefault(createKey(item, category));
}
public String getString(Identifier item, String category, String defaultValue) {
return this.getString(createKey(item, category), defaultValue);
}
public String getString(Identifier item, String category) {
return this.getString(createKey(item, category));
}
public boolean setString(Identifier item, String category, String value) {
return this.setString(createKey(item, category), value);
}
public int getInt(Identifier item, String category, int defaultValue) {
return this.getInt(createKey(item, category), defaultValue);
}
public int getInt(Identifier item, String category) {
return this.getInt(createKey(item, category));
}
public boolean setInt(Identifier item, String category, int value) {
return this.setInt(createKey(item, category), value);
}
public <T extends Comparable<T>> boolean setRanged(Identifier item, String category, T value) {
return this.setRanged(createKey(item, category), value);
}
public float getFloat(Identifier item, String category, float defaultValue) {
return this.getFloat(createKey(item, category), defaultValue);
}
public float getFloat(Identifier item, String category) {
return this.getFloat(createKey(item, category));
}
public boolean setFloat(Identifier item, String category, float value) {
return this.setFloat(createKey(item, category), value);
}
public boolean getBoolean(Identifier item, String category, boolean defaultValue) {
return this.getBoolean(createKey(item, category), defaultValue);
}
public boolean getBoolean(Identifier item, String category) {
return this.getBoolean(createKey(item, category));
}
public boolean setBoolean(Identifier item, String category, boolean value) {
return this.setBoolean(createKey(item, category), value);
}
}