fix config change listener
This commit is contained in:
@@ -187,8 +187,7 @@ object Config : DelegatingConfig(BetterFoliageMod.MOD_ID, BetterFoliageMod.DOMAI
|
|||||||
shortGrass["saturationThreshold"]
|
shortGrass["saturationThreshold"]
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun onChange(event: ConfigChangedEvent.OnConfigChangedEvent) {
|
override fun onChange(event: ConfigChangedEvent.PostConfigChangedEvent) {
|
||||||
super.onChange(event)
|
|
||||||
if (hasChanged(forceReloadOptions))
|
if (hasChanged(forceReloadOptions))
|
||||||
Minecraft.getMinecraft().refreshResources()
|
Minecraft.getMinecraft().refreshResources()
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ object Refs {
|
|||||||
val WeightedBakedModel = ClassRef("net.minecraft.client.renderer.block.model.WeightedBakedModel")
|
val WeightedBakedModel = ClassRef("net.minecraft.client.renderer.block.model.WeightedBakedModel")
|
||||||
val models_WBM = FieldRef(WeightedBakedModel, "models", List)
|
val models_WBM = FieldRef(WeightedBakedModel, "models", List)
|
||||||
|
|
||||||
|
val resetChangedState = MethodRef(ClassRef("net.minecraftforge.common.config.Configuration"), "resetChangedState", ClassRef.void)
|
||||||
|
|
||||||
// Better Foliage
|
// Better Foliage
|
||||||
val BetterFoliageHooks = ClassRef("mods.betterfoliage.client.Hooks")
|
val BetterFoliageHooks = ClassRef("mods.betterfoliage.client.Hooks")
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package mods.octarinecore.common.config
|
package mods.octarinecore.common.config
|
||||||
|
|
||||||
import com.google.common.collect.LinkedListMultimap
|
import com.google.common.collect.LinkedListMultimap
|
||||||
|
import mods.betterfoliage.loader.Refs
|
||||||
import mods.octarinecore.metaprog.reflectField
|
import mods.octarinecore.metaprog.reflectField
|
||||||
import mods.octarinecore.metaprog.reflectFieldsOfType
|
import mods.octarinecore.metaprog.reflectFieldsOfType
|
||||||
import mods.octarinecore.metaprog.reflectNestedObjects
|
import mods.octarinecore.metaprog.reflectNestedObjects
|
||||||
@@ -86,7 +87,7 @@ abstract class DelegatingConfig(val modId: String, val langPrefix: String) {
|
|||||||
* Returns true if any of the given configuration elements have changed.
|
* Returns true if any of the given configuration elements have changed.
|
||||||
* Supports both categories and
|
* Supports both categories and
|
||||||
*/
|
*/
|
||||||
fun hasChanged(vararg elements: Any?): Boolean {
|
fun hasChanged(elements: List<*>): Boolean {
|
||||||
reflectNestedObjects.forEach { category ->
|
reflectNestedObjects.forEach { category ->
|
||||||
if (category.second in elements && config?.getCategory(category.first)?.hasChanged() ?: false) return true
|
if (category.second in elements && config?.getCategory(category.first)?.hasChanged() ?: false) return true
|
||||||
}
|
}
|
||||||
@@ -97,13 +98,22 @@ abstract class DelegatingConfig(val modId: String, val langPrefix: String) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Called when the configuration for the mod changes. */
|
/** Called when the configuration for the mod changes. */
|
||||||
open fun onChange(event: ConfigChangedEvent.OnConfigChangedEvent) {
|
abstract fun onChange(event: ConfigChangedEvent.PostConfigChangedEvent)
|
||||||
save()
|
|
||||||
forEachProperty { c, n, prop -> prop.read() }
|
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
fun handleConfigChange(event: ConfigChangedEvent.OnConfigChangedEvent) { if (event.modID == modId) onChange(event) }
|
fun handleConfigChange(event: ConfigChangedEvent.PostConfigChangedEvent) {
|
||||||
|
if (event.modID == modId) {
|
||||||
|
// refresh values
|
||||||
|
forEachProperty { c, n, prop -> prop.read() }
|
||||||
|
|
||||||
|
// call mod-specific handler
|
||||||
|
onChange(event)
|
||||||
|
|
||||||
|
// save to file
|
||||||
|
save()
|
||||||
|
Refs.resetChangedState.invoke(config!!)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Extension to get the underlying delegate of a field */
|
/** Extension to get the underlying delegate of a field */
|
||||||
operator fun Any.get(name: String) = this.reflectField<ConfigPropertyBase>("$name\$delegate")
|
operator fun Any.get(name: String) = this.reflectField<ConfigPropertyBase>("$name\$delegate")
|
||||||
|
|||||||
Reference in New Issue
Block a user