@@ -4,6 +4,7 @@ import org.spongepowered.configurate.CommentedConfigurationNode
44import org.spongepowered.configurate.ConfigurationOptions
55import org.spongepowered.configurate.kotlin.objectMapperFactory
66import org.spongepowered.configurate.serialize.TypeSerializerCollection
7+ import org.spongepowered.configurate.util.MapFactories
78import org.spongepowered.configurate.yaml.NodeStyle
89import org.spongepowered.configurate.yaml.YamlConfigurationLoader
910import java.io.File
@@ -16,6 +17,10 @@ abstract class Config(
1617 @Transient val serializers : TypeSerializerCollection = generateOptions(null).serializers()
1718) {
1819
20+ init {
21+ register(this )
22+ }
23+
1924 @Transient val file = File (directory, name)
2025
2126 constructor (directory: File , name: String , serializers: TypeSerializerCollection ? ) : this (
@@ -27,13 +32,13 @@ abstract class Config(
2732 constructor (directory: File , name: String ) : this (directory, name, null )
2833 constructor (directoryPath: Path , name: String ) : this (directoryPath.toFile(), name, null )
2934
30- @Transient var yaml = builder.build()
35+ @Transient var yaml = builder.defaultOptions(generateOptions(serializers)). build()
3136 @Transient var config = yaml.load(generateOptions(serializers))
3237
3338 open fun save () {
3439 createFile()
3540
36- updateSerializers ()
41+ update ()
3742 config.set(this )
3843 yaml.save(config)
3944 }
@@ -47,12 +52,22 @@ abstract class Config(
4752 return false
4853 }
4954
50- open fun updateSerializers () {
55+ open fun update () {
5156 yaml = builder.defaultOptions(generateOptions(serializers)).build()
5257 config = yaml.load(generateOptions(serializers))
5358 }
5459
5560 companion object {
61+ val registeredConfigurations = mutableMapOf<String , Config >()
62+
63+ fun register (config : Config ) {
64+ registeredConfigurations[config.name] = config
65+ }
66+
67+ fun unregister (config : Config ) {
68+ registeredConfigurations.remove(config.name)
69+ }
70+
5671 @JvmStatic
5772 fun generateOptions (serializers : TypeSerializerCollection ? ): ConfigurationOptions {
5873 return ConfigurationOptions .defaults()
@@ -71,9 +86,7 @@ abstract class Config(
7186 fun getConfigBuilder (file : File , serializers : TypeSerializerCollection ? ): YamlConfigurationLoader .Builder {
7287 val yaml = YamlConfigurationLoader .builder()
7388 .nodeStyle(NodeStyle .BLOCK )
74- .defaultOptions { defaultOptions ->
75- generateOptions(serializers)
76- }
89+ .defaultOptions(generateOptions(serializers))
7790 .commentsEnabled(true )
7891 .file(file)
7992 return yaml
@@ -82,7 +95,12 @@ abstract class Config(
8295 @JvmStatic
8396 inline fun <reified T > fromConfig (file : File , serializers : TypeSerializerCollection ? ): T ? {
8497 if (! file.exists()) return null
85- return getConfigBuilder(file, serializers).build().load().get(T ::class .java)
98+ val yaml = getConfigBuilder(file, serializers).build()
99+ val config = yaml.load()
100+ val result = config.get(T ::class .java)
101+ config.set(result)
102+ yaml.save(config)
103+ return result
86104 }
87105
88106 @JvmStatic
0 commit comments