diff --git a/common/src/main/java/com/dfsek/terra/api/config/meta/MetaContext.java b/common/src/main/java/com/dfsek/terra/api/config/meta/MetaContext.java index bee5b7c82..4535c3f09 100644 --- a/common/src/main/java/com/dfsek/terra/api/config/meta/MetaContext.java +++ b/common/src/main/java/com/dfsek/terra/api/config/meta/MetaContext.java @@ -4,5 +4,15 @@ package com.dfsek.terra.api.config.meta; * Context from which to pull {@link MetaValue}s */ public interface MetaContext { - T load(Object metaCandidate); + T load(Object in, Class clazz); + + /** + * Load method for when class is unknown. + * + * @param in Object to load/load metavalue for + * @return Loaded object + */ + default Object load(Object in) { + return load(in, in.getClass()); + } } diff --git a/common/src/main/java/com/dfsek/terra/api/config/meta/MetaValue.java b/common/src/main/java/com/dfsek/terra/api/config/meta/MetaValue.java index 0e27efe24..6e2f3d23b 100644 --- a/common/src/main/java/com/dfsek/terra/api/config/meta/MetaValue.java +++ b/common/src/main/java/com/dfsek/terra/api/config/meta/MetaValue.java @@ -1,5 +1,6 @@ package com.dfsek.terra.api.config.meta; -public interface MetaValue { - T load(MetaContext context); +import java.util.function.Supplier; + +public interface MetaValue extends Supplier { } diff --git a/common/src/main/java/com/dfsek/terra/api/config/meta/specific/number/MetaNumber.java b/common/src/main/java/com/dfsek/terra/api/config/meta/specific/number/MetaNumber.java new file mode 100644 index 000000000..ecb49cc90 --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/api/config/meta/specific/number/MetaNumber.java @@ -0,0 +1,6 @@ +package com.dfsek.terra.api.config.meta.specific.number; + +import com.dfsek.terra.api.config.meta.MetaValue; + +public interface MetaNumber extends MetaValue { +} diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/meta/GenericMetaValueLoader.java b/common/src/main/java/com/dfsek/terra/config/loaders/meta/GenericMetaValueLoader.java new file mode 100644 index 000000000..cdf88fab4 --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/config/loaders/meta/GenericMetaValueLoader.java @@ -0,0 +1,24 @@ +package com.dfsek.terra.config.loaders.meta; + +import com.dfsek.tectonic.exception.LoadException; +import com.dfsek.tectonic.loading.ConfigLoader; +import com.dfsek.terra.api.config.meta.MetaContext; +import com.dfsek.terra.api.config.meta.MetaValue; + +import java.lang.reflect.Type; + +public class GenericMetaValueLoader extends MetaValueLoader, Object> { + protected GenericMetaValueLoader(MetaContext context) { + super(context); + } + + @Override + public MetaValue load(Type t, Object c, ConfigLoader loader) throws LoadException { + return null; + } + + @Override + public Object get() { + return null; + } +} diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/meta/MetaValueLoader.java b/common/src/main/java/com/dfsek/terra/config/loaders/meta/MetaValueLoader.java index d554f6297..014ee4a6b 100644 --- a/common/src/main/java/com/dfsek/terra/config/loaders/meta/MetaValueLoader.java +++ b/common/src/main/java/com/dfsek/terra/config/loaders/meta/MetaValueLoader.java @@ -7,7 +7,7 @@ import com.dfsek.terra.api.config.meta.MetaValue; import java.util.function.Supplier; public abstract class MetaValueLoader, T> implements TypeLoader, Supplier { - private final MetaContext context; + protected final MetaContext context; protected MetaValueLoader(MetaContext context) { this.context = context;