diff --git a/common/api/src/main/java/com/dfsek/terra/api/properties/Context.java b/common/api/src/main/java/com/dfsek/terra/api/properties/Context.java new file mode 100644 index 000000000..e9d76a6e8 --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/properties/Context.java @@ -0,0 +1,21 @@ +package com.dfsek.terra.api.properties; + +import java.util.HashMap; +import java.util.Map; + +public class Context { + private final Map, Properties> map = new HashMap<>(); + + @SuppressWarnings("unchecked") + public T get(Class clazz) { + return (T) map.computeIfAbsent(clazz, k -> { + throw new IllegalArgumentException("No properties registered for class " + clazz.getCanonicalName()); + }); + } + + public Context put(Properties properties) { + if(map.containsKey(properties.getClass())) throw new IllegalArgumentException("Property for class " + properties.getClass().getCanonicalName() + " already registered."); + map.put(properties.getClass(), properties); + return this; + } +} diff --git a/common/api/src/main/java/com/dfsek/terra/api/properties/Properties.java b/common/api/src/main/java/com/dfsek/terra/api/properties/Properties.java new file mode 100644 index 000000000..43360d347 --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/properties/Properties.java @@ -0,0 +1,4 @@ +package com.dfsek.terra.api.properties; + +public interface Properties { +} diff --git a/common/api/src/main/java/com/dfsek/terra/api/properties/PropertyHolder.java b/common/api/src/main/java/com/dfsek/terra/api/properties/PropertyHolder.java new file mode 100644 index 000000000..7fe882ab7 --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/properties/PropertyHolder.java @@ -0,0 +1,5 @@ +package com.dfsek.terra.api.properties; + +public interface PropertyHolder { + Context getContext(); +}