diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/ConfigTypeHandlers.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/ConfigTypeHandlers.kt index 1169e58e..1c8e802e 100644 --- a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/ConfigTypeHandlers.kt +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/ConfigTypeHandlers.kt @@ -13,6 +13,28 @@ import org.yaml.snakeyaml.representer.Representer val ConfigType.handler: ConfigTypeHandler get() = if (this == ConfigType.JSON) JSONConfigTypeHandler else YamlConfigTypeHandler +fun Map<*, *>.ensureTypesForConfig(): Map { + val building = mutableMapOf() + + for (entry in this.entries) { + val value = entry.value?.let { + if (it is Map<*, *>) { + it.ensureTypesForConfig() + } else { + it + } + } + + if (entry.key == null || value == null) { + continue + } + + building[entry.key.toString()] = value + } + + return building +} + abstract class ConfigTypeHandler( val type: ConfigType ) { @@ -21,29 +43,7 @@ abstract class ConfigTypeHandler( return emptyMap() } - return ensureMapTypes(parseToMap(input)) - } - - private fun ensureMapTypes(map: Map<*, *>): Map { - val building = mutableMapOf() - - for (entry in map.entries) { - val value = entry.value?.let { - if (it is Map<*, *>) { - ensureMapTypes(it.toMutableMap()) - } else { - it - } - } - - if (entry.key == null) { - continue - } - - building[entry.key.toString()] = value - } - - return building + return parseToMap(input).ensureTypesForConfig() } protected abstract fun parseToMap(input: String): Map<*, *> diff --git a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoConfig.kt b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoConfig.kt index 8c6dbf65..33729aae 100644 --- a/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoConfig.kt +++ b/eco-core/core-backend/src/main/kotlin/com/willfp/eco/internal/config/EcoConfig.kt @@ -16,7 +16,7 @@ open class EcoConfig( fun init(values: Map) { this.values.clear() - this.values.putAll(values) + this.values.putAll(values.ensureTypesForConfig()) } override fun clearCache() {