ExtraHoppers-forge/src/main/kotlin/net/shadowfacts/extrahoppers/EHConfig.kt

71 lines
2.2 KiB
Kotlin

package net.shadowfacts.extrahoppers
import net.minecraftforge.common.config.Configuration
import net.minecraftforge.common.config.Property
import java.io.File
import kotlin.reflect.KProperty
/**
* @author shadowfacts
*/
object EHConfig {
internal lateinit var config: Configuration
private set
// Config values
// Fluid Hopper
var fhSize: Int by ConfigInt("fluidHopper", "size", 1000, 1000, 64000, "The size (in millibuckets) of the Fluid Hopper")
var fhPickupWorldFluids: Boolean by ConfigBool("fluidHopper", "fhPickupWorldFluids", true, "If the Fluid Hopper should pickup fluids placed in the world directly above it.")
var fhPlaceFluidsInWorld: Boolean by ConfigBool("fluidHopper", "fhPlaceFluidsInWorld", true, "If the Fluid Hopper should place fluids in the world directly in front of it.")
fun init(configDir: File) {
config = Configuration(File(configDir, "shadowfacts/ExtraHoppers.cfg"))
val legacy = File(configDir, "shadowfacts/Funnels.cfg")
if (legacy.exists()) {
migrateLegacy(Configuration(legacy))
}
}
private fun migrateLegacy(legacy: Configuration) {
fhSize = legacy.get("general", "size", 1000, "").int
fhPickupWorldFluids = legacy.get("general", "pickupWorldFluids", true, "").boolean
fhPlaceFluidsInWorld = legacy.get("general", "placeFluidsInWorld", true, "").boolean
}
fun save() {
if (config.hasChanged()) {
config.save()
}
}
private class ConfigInt(val category: String, val name: String, val default: Int, val minValue: Int, val maxValue: Int, val comment: String) {
private val prop: Property
get() = config.get(category, name, default, comment, minValue, maxValue)
operator fun getValue(instance: Any, property: KProperty<*>): Int {
return prop.int
}
operator fun setValue(instance: Any, property: KProperty<*>, value: Int) {
prop.set(value)
}
}
private class ConfigBool(val category: String, val name: String, val default: Boolean, val comment: String) {
private val prop: Property
get() = config.get(category, name, default, comment)
operator fun getValue(instance: Any, property: KProperty<*>): Boolean {
return prop.boolean
}
operator fun setValue(instance: Any, property: KProperty<*>, value: Boolean) {
prop.set(value)
}
}
}