Additional Typesafety

This commit is contained in:
Frank 2021-08-21 13:43:22 +02:00
parent edb6631768
commit 38c01b8c76
2 changed files with 75 additions and 33 deletions

View file

@ -32,15 +32,15 @@ public class AutoSync {
@Environment(EnvType.CLIENT)
public static class ClientConfig extends NamedPathConfig{
public static final ConfigToken<Boolean> ENABLED = new ConfigToken<Boolean>(true, "enabled", SYNC_CATEGORY);
public static final ConfigToken<Boolean> ENABLED = ConfigToken.Boolean(true, "enabled", SYNC_CATEGORY);
@ConfigUI(leftPadding =8)
public static final ConfigToken<Boolean> ACCEPT_CONFIGS = new DependendConfigToken<Boolean>(true,"acceptConfigs", SYNC_CATEGORY, (config)->config.get(ENABLED));
public static final DependendConfigToken<Boolean> ACCEPT_CONFIGS = DependendConfigToken.Boolean(true,"acceptConfigs", SYNC_CATEGORY, (config)->config.get(ENABLED));
@ConfigUI(leftPadding =8)
public static final ConfigToken<Boolean> ACCEPT_FILES = new DependendConfigToken<Boolean>(true,"acceptFiles", SYNC_CATEGORY, (config)->config.get(ENABLED));
public static final DependendConfigToken<Boolean> ACCEPT_FILES = DependendConfigToken.Boolean(true,"acceptFiles", SYNC_CATEGORY, (config)->config.get(ENABLED));
@ConfigUI(leftPadding =8)
public static final ConfigToken<Boolean> ACCEPT_MODS = new DependendConfigToken<Boolean>(true,"acceptMods", SYNC_CATEGORY, (config)->config.get(ENABLED));
public static final DependendConfigToken<Boolean> ACCEPT_MODS = DependendConfigToken.Boolean(true,"acceptMods", SYNC_CATEGORY, (config)->config.get(ENABLED));
@ConfigUI(topPadding = 12)
public static final ConfigToken<Boolean> DEBUG_HASHES = new ConfigToken<Boolean>(true, "debugHashes", SYNC_CATEGORY);
public static final ConfigToken<Boolean> DEBUG_HASHES = ConfigToken.Boolean(true, "debugHashes", SYNC_CATEGORY);
public ClientConfig(){
@ -56,23 +56,25 @@ public class AutoSync {
}
public boolean isAcceptingMods() {
return get(ACCEPT_MODS) && isAllowingAutoSync();
return get(ACCEPT_MODS) /*&& isAllowingAutoSync()*/;
}
public boolean isAcceptingConfigs() {
return get(ACCEPT_CONFIGS) && isAllowingAutoSync();
return get(ACCEPT_CONFIGS) /*&& isAllowingAutoSync()*/;
}
public boolean isAcceptingFiles() {
return get(ACCEPT_FILES) && isAllowingAutoSync();
return get(ACCEPT_FILES) /*&& isAllowingAutoSync()*/;
}
}
public static class ServerConfig extends NamedPathConfig {
public static final ConfigToken<Boolean> ENABLED = new ConfigToken<Boolean>(true, "enabled", SYNC_CATEGORY);
public static final ConfigToken<Boolean> OFFER_CONFIGS = new ConfigToken<Boolean>(true,"offerConfigs", SYNC_CATEGORY);
public static final ConfigToken<Boolean> OFFER_FILES = new ConfigToken<Boolean>(true,"offerFiles", SYNC_CATEGORY);
public static final ConfigToken<Boolean> OFFER_MODS = new ConfigToken<Boolean>(true,"offerMods", SYNC_CATEGORY);
public static final ConfigToken<Boolean> ENABLED = ConfigToken.Boolean(true, "enabled", SYNC_CATEGORY);
public static final DependendConfigToken<Boolean> OFFER_CONFIGS = DependendConfigToken.Boolean(true,"offerConfigs", SYNC_CATEGORY, (config)->config.get(ENABLED));
public static final DependendConfigToken<Boolean> OFFER_FILES = DependendConfigToken.Boolean(true,"offerFiles", SYNC_CATEGORY, (config)->config.get(ENABLED));
public static final DependendConfigToken<Boolean> OFFER_MODS = DependendConfigToken.Boolean(true,"offerMods", SYNC_CATEGORY, (config)->config.get(ENABLED));
public static final ConfigToken<List<String>> ADDITIONAL_MODS = ConfigToken.StringArray(new ArrayList<>(0),"additionalMods", SYNC_CATEGORY);
public ServerConfig(){
@ -84,15 +86,19 @@ public class AutoSync {
}
public boolean isOfferingConfigs() {
return get(OFFER_CONFIGS) && isAllowingAutoSync();
return get(OFFER_CONFIGS) /*&& isAllowingAutoSync()*/;
}
public boolean isOfferingFiles() {
return get(OFFER_FILES) && isAllowingAutoSync();
return get(OFFER_FILES) /*&& isAllowingAutoSync()*/;
}
public boolean isOfferingMods() {
return get(OFFER_MODS) && isAllowingAutoSync();
return get(OFFER_MODS) /*&& isAllowingAutoSync()*/;
}
public String[] additionalModsForSync() {
return new String[0];
}
}

View file

@ -2,6 +2,11 @@ package ru.bclib.config;
import net.minecraft.resources.ResourceLocation;
import ru.bclib.BCLib;
import ru.bclib.config.ConfigKeeper.BooleanEntry;
import ru.bclib.config.ConfigKeeper.FloatEntry;
import ru.bclib.config.ConfigKeeper.IntegerEntry;
import ru.bclib.config.ConfigKeeper.StringArrayEntry;
import ru.bclib.config.ConfigKeeper.StringEntry;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
@ -49,47 +54,68 @@ public class NamedPathConfig extends PathConfig{
public static class DependendConfigToken<T> extends ConfigToken<T>{
protected final Predicate<NamedPathConfig> dependenciesTrue;
public DependendConfigToken(T defaultValue, String entry, ResourceLocation path, Predicate<NamedPathConfig> dependenciesTrue) {
this(defaultValue, entry, new String[]{path.getNamespace(), path.getPath()}, dependenciesTrue);
protected DependendConfigToken(Class<?> type, T defaultValue, String entry, ResourceLocation path, Predicate<NamedPathConfig> dependenciesTrue) {
this(type, defaultValue, entry, new String[]{path.getNamespace(), path.getPath()}, dependenciesTrue);
}
public DependendConfigToken(T defaultValue, String entry, String path, Predicate<NamedPathConfig> dependenciesTrue) {
super(defaultValue, entry, path);
protected DependendConfigToken(Class<?> type, T defaultValue, String entry, String path, Predicate<NamedPathConfig> dependenciesTrue) {
super(type, defaultValue, entry, path);
this.dependenciesTrue = dependenciesTrue;
}
public DependendConfigToken(T defaultValue, String entry, String[] path, Predicate<NamedPathConfig> dependenciesTrue) {
super(defaultValue, entry, path);
protected DependendConfigToken(Class<?> type, T defaultValue, String entry, String[] path, Predicate<NamedPathConfig> dependenciesTrue) {
super(type, defaultValue, entry, path);
this.dependenciesTrue = dependenciesTrue;
}
public boolean dependenciesTrue(NamedPathConfig config){
return dependenciesTrue.test(config);
}
public static DependendConfigToken<Boolean> Boolean(boolean defaultValue, String entry, String path, Predicate<NamedPathConfig> dependenciesTrue) {
return new DependendConfigToken<Boolean>(BooleanEntry.class, defaultValue, entry, path, dependenciesTrue);
}
}
public static class ConfigToken <T> extends ConfigKey{
public final T defaultValue;
public final Class<T> type;
public final Class<?> type;
public ConfigToken(T defaultValue, String entry, ResourceLocation path) {
this(defaultValue, entry, path.getNamespace(), path.getPath());
protected ConfigToken(Class<?> type, T defaultValue, String entry, ResourceLocation path) {
this(type, defaultValue, entry, path.getNamespace(), path.getPath());
}
@SuppressWarnings("unchecked")
public ConfigToken(T defaultValue, String entry, String... path) {
protected ConfigToken(Class<?> type, T defaultValue, String entry, String... path) {
super(entry, path);
this.defaultValue = defaultValue;
if (defaultValue == null){
BCLib.LOGGER.error("[Internal Error] defaultValue should not be null (" +this.getEntry() +")");
}
this.type = defaultValue!=null?(Class<T>)defaultValue.getClass():(Class<T>)Object.class;
this.type = type;
}
public boolean dependenciesTrue(NamedPathConfig config){
return true;
}
public static ConfigToken<Boolean> Boolean(boolean defaultValue, String entry, String path) {
return new ConfigToken<Boolean>(BooleanEntry.class, defaultValue, entry, path);
}
public static ConfigToken<Integer> Int(int defaultValue, String entry, String path) {
return new ConfigToken<Integer>(IntegerEntry.class, defaultValue, entry, path);
}
public static ConfigToken<Float> Float(float defaultValue, String entry, String path) {
return new ConfigToken<Float>(FloatEntry.class, defaultValue, entry, path);
}
public static ConfigToken<String> String(String defaultValue, String entry, String path) {
return new ConfigToken<String>(StringEntry.class, defaultValue, entry, path);
}
public static ConfigToken<List<String>> StringArray(List<String> defaultValue, String entry, String path) {
return new ConfigToken<List<String>>(StringArrayEntry.class, defaultValue, entry, path);
}
}
public NamedPathConfig(String modID, String group, boolean autoSync, boolean diffContent) {
@ -157,18 +183,21 @@ public class NamedPathConfig extends PathConfig{
@SuppressWarnings("unchecked")
private <T> T _get(ConfigToken<T> what, boolean raw){
//TODO: Check if we can make config fully Generic to avoid runtime type checks...
if (Boolean.class.isAssignableFrom(what.type)){
if (BooleanEntry.class.isAssignableFrom(what.type)){
return (T)_getBoolean((ConfigToken<Boolean>)what, raw);
}
if (Integer.class.isAssignableFrom(what.type)){
if (IntegerEntry.class.isAssignableFrom(what.type)){
return (T)_getInt((ConfigToken<Integer>)what);
}
if (Float.class.isAssignableFrom(what.type)){
if (FloatEntry.class.isAssignableFrom(what.type)){
return (T)_getFloat((ConfigToken<Float>)what);
}
if (String.class.isAssignableFrom(what.type)){
if (StringEntry.class.isAssignableFrom(what.type)){
return (T)_getString((ConfigToken<String>)what);
}
if (StringArrayEntry.class.isAssignableFrom(what.type)){
return (T)_getStringArray((ConfigToken<List<String>>)what);
}
return this._get(what);
}
@ -209,5 +238,12 @@ public class NamedPathConfig extends PathConfig{
return this.getString(what, what.defaultValue);
}
public void set(ConfigToken<List<String>> what, List<String> value) {
this.setStringArray(what, value);
}
private List<String> _getStringArray(ConfigToken<List<String>> what){
return this.getStringArray(what, what.defaultValue);
}
}