fix config change listener
This commit is contained in:
@@ -187,8 +187,7 @@ object Config : DelegatingConfig(BetterFoliageMod.MOD_ID, BetterFoliageMod.DOMAI
|
||||
shortGrass["saturationThreshold"]
|
||||
)
|
||||
|
||||
override fun onChange(event: ConfigChangedEvent.OnConfigChangedEvent) {
|
||||
super.onChange(event)
|
||||
override fun onChange(event: ConfigChangedEvent.PostConfigChangedEvent) {
|
||||
if (hasChanged(forceReloadOptions))
|
||||
Minecraft.getMinecraft().refreshResources()
|
||||
else
|
||||
|
||||
@@ -70,6 +70,7 @@ object Refs {
|
||||
val WeightedBakedModel = ClassRef("net.minecraft.client.renderer.block.model.WeightedBakedModel")
|
||||
val models_WBM = FieldRef(WeightedBakedModel, "models", List)
|
||||
|
||||
val resetChangedState = MethodRef(ClassRef("net.minecraftforge.common.config.Configuration"), "resetChangedState", ClassRef.void)
|
||||
|
||||
// Better Foliage
|
||||
val BetterFoliageHooks = ClassRef("mods.betterfoliage.client.Hooks")
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package mods.octarinecore.common.config
|
||||
|
||||
import com.google.common.collect.LinkedListMultimap
|
||||
import mods.betterfoliage.loader.Refs
|
||||
import mods.octarinecore.metaprog.reflectField
|
||||
import mods.octarinecore.metaprog.reflectFieldsOfType
|
||||
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.
|
||||
* Supports both categories and
|
||||
*/
|
||||
fun hasChanged(vararg elements: Any?): Boolean {
|
||||
fun hasChanged(elements: List<*>): Boolean {
|
||||
reflectNestedObjects.forEach { category ->
|
||||
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. */
|
||||
open fun onChange(event: ConfigChangedEvent.OnConfigChangedEvent) {
|
||||
save()
|
||||
forEachProperty { c, n, prop -> prop.read() }
|
||||
}
|
||||
abstract fun onChange(event: ConfigChangedEvent.PostConfigChangedEvent)
|
||||
|
||||
@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 */
|
||||
operator fun Any.get(name: String) = this.reflectField<ConfigPropertyBase>("$name\$delegate")
|
||||
|
||||
Reference in New Issue
Block a user