diff --git a/core/pom.xml b/core/pom.xml
index 14a1add..dda1d65 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -5,7 +5,7 @@
configured-parent
cc.carm.lib
- 4.1.8
+ 4.2.0
4.0.0
diff --git a/core/src/main/java/cc/carm/lib/configuration/builder/collection/SectionCollectionBuilder.java b/core/src/main/java/cc/carm/lib/configuration/builder/collection/SectionCollectionBuilder.java
new file mode 100644
index 0000000..dc029d5
--- /dev/null
+++ b/core/src/main/java/cc/carm/lib/configuration/builder/collection/SectionCollectionBuilder.java
@@ -0,0 +1,55 @@
+package cc.carm.lib.configuration.builder.collection;
+
+import cc.carm.lib.configuration.adapter.ValueType;
+import cc.carm.lib.configuration.builder.impl.AbstractSectionBuilder;
+import cc.carm.lib.configuration.function.ValueHandler;
+import cc.carm.lib.configuration.source.section.ConfigureSection;
+import cc.carm.lib.configuration.value.impl.CollectionConfigValue;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Map;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+
+public abstract class SectionCollectionBuilder<
+ V, C extends Collection,
+ RESULT extends CollectionConfigValue,
+ SELF extends SectionCollectionBuilder
+ > extends AbstractSectionBuilder {
+
+ protected @NotNull Supplier extends C> constructor;
+
+ public SectionCollectionBuilder(@NotNull Supplier extends C> constructor,
+ @NotNull ValueType paramType,
+ @NotNull ValueHandler parser,
+ @NotNull ValueHandler> serializer) {
+ super(new ValueType() {
+ }, paramType, parser, serializer);
+ this.constructor = constructor;
+ }
+
+ @SafeVarargs
+ public final @NotNull SELF defaults(@NotNull V... values) {
+ return defaults(c -> c.addAll(Arrays.asList(values)));
+ }
+
+ public final @NotNull SELF defaults(@NotNull Consumer constructor) {
+ return defaults(() -> {
+ C collection = this.constructor.get();
+ constructor.accept(collection);
+ return collection;
+ });
+ }
+
+ public SELF constructor(@NotNull Supplier extends C> constructor) {
+ this.constructor = constructor;
+ return self();
+ }
+
+ public SELF construct(@NotNull C collection) {
+ return constructor(() -> collection);
+ }
+
+}
diff --git a/core/src/main/java/cc/carm/lib/configuration/builder/collection/SimpleCollectionCreator.java b/core/src/main/java/cc/carm/lib/configuration/builder/collection/SimpleCollectionCreator.java
new file mode 100644
index 0000000..cab84c1
--- /dev/null
+++ b/core/src/main/java/cc/carm/lib/configuration/builder/collection/SimpleCollectionCreator.java
@@ -0,0 +1,138 @@
+package cc.carm.lib.configuration.builder.collection;
+
+import cc.carm.lib.configuration.adapter.ValueAdapter;
+import cc.carm.lib.configuration.adapter.ValueType;
+import cc.carm.lib.configuration.function.ValueHandler;
+import cc.carm.lib.configuration.source.section.ConfigureSection;
+import cc.carm.lib.configuration.value.ValueManifest;
+import cc.carm.lib.configuration.value.impl.CollectionConfigValue;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.function.Supplier;
+
+public class SimpleCollectionCreator, RESULT extends CollectionConfigValue> {
+
+ public static , RESULT extends CollectionConfigValue>
+ @NotNull SimpleCollectionCreator create(
+ @NotNull ValueType type,
+ @NotNull Supplier extends C> defaultConstructor,
+ @NotNull CollectionValueFactory factory) {
+ return new SimpleCollectionCreator<>(type, defaultConstructor, factory);
+ }
+
+ protected final @NotNull Supplier extends C> defaultConstructor;
+ protected final @NotNull ValueType type;
+
+ protected final @NotNull CollectionValueFactory factory;
+
+ public SimpleCollectionCreator(@NotNull ValueType type,
+ @NotNull Supplier extends C> defaultConstructor,
+ @NotNull CollectionValueFactory factory) {
+ this.defaultConstructor = defaultConstructor;
+ this.type = type;
+ this.factory = factory;
+ }
+
+ public @NotNull Source from(@NotNull Class sourceType) {
+ return from(ValueType.of(sourceType));
+ }
+
+ public @NotNull Source from(@NotNull ValueType sourceType) {
+ return new Source(
+ defaultConstructor, sourceType, type,
+ ValueHandler.required(type),
+ ValueHandler.required(sourceType),
+ factory
+ );
+ }
+
+ public @NotNull SimpleCollectionCreator.Source