From 40ed66d76ebafd4a6515325a0eb79e5cb1a27cc2 Mon Sep 17 00:00:00 2001 From: xtex Date: Sun, 30 Jul 2023 20:52:46 +0800 Subject: [PATCH] feat: more configurations --- .../src/main/kotlin/quaedam/config/QuaedamConfig.kt | 4 ++++ .../quaedam/projection/misc/NoiseProjection.kt | 12 ++++++++---- .../quaedam/projection/misc/SkylightProjection.kt | 7 +++++-- .../quaedam/projection/misc/SoundProjection.kt | 7 +++++-- .../quaedam/projection/music/MusicProjection.kt | 13 ++++++++++--- .../projection/swarm/SwarmProjectionEffect.kt | 7 +++++-- 6 files changed, 37 insertions(+), 13 deletions(-) diff --git a/common/src/main/kotlin/quaedam/config/QuaedamConfig.kt b/common/src/main/kotlin/quaedam/config/QuaedamConfig.kt index 7488ed8..ac3b7c5 100644 --- a/common/src/main/kotlin/quaedam/config/QuaedamConfig.kt +++ b/common/src/main/kotlin/quaedam/config/QuaedamConfig.kt @@ -20,6 +20,7 @@ data class QuaedamConfig( val valuesInt: Map = mapOf(), val valuesFloat: Map = mapOf(), val valuesDouble: Map = mapOf(), + val valuesBoolean: Map = mapOf(), ) { companion object { @@ -80,12 +81,14 @@ data class QuaedamConfig( const val TAG_VALUES_INT = "ValuesInt" const val TAG_VALUES_FLOAT = "ValuesFloat" const val TAG_VALUES_DOUBLE = "ValuesDouble" + const val TAG_VALUES_BOOLEAN = "ValuesBoolean" fun fromPushNbt(tag: CompoundTag): QuaedamConfig { return QuaedamConfig( valuesInt = pushJson.decodeFromString(tag.getString(TAG_VALUES_INT)), valuesFloat = pushJson.decodeFromString(tag.getString(TAG_VALUES_FLOAT)), valuesDouble = pushJson.decodeFromString(tag.getString(TAG_VALUES_DOUBLE)), + valuesBoolean = pushJson.decodeFromString(tag.getString(TAG_VALUES_BOOLEAN)), ) } } @@ -94,6 +97,7 @@ data class QuaedamConfig( tag.putString(TAG_VALUES_INT, pushJson.encodeToString(valuesInt)) tag.putString(TAG_VALUES_FLOAT, pushJson.encodeToString(valuesFloat)) tag.putString(TAG_VALUES_DOUBLE, pushJson.encodeToString(valuesDouble)) + tag.putString(TAG_VALUES_BOOLEAN, pushJson.encodeToString(valuesBoolean)) } fun toPushNbt() = CompoundTag().also { toPushNbt(it) } diff --git a/common/src/main/kotlin/quaedam/projection/misc/NoiseProjection.kt b/common/src/main/kotlin/quaedam/projection/misc/NoiseProjection.kt index 975bd3d..b135e10 100644 --- a/common/src/main/kotlin/quaedam/projection/misc/NoiseProjection.kt +++ b/common/src/main/kotlin/quaedam/projection/misc/NoiseProjection.kt @@ -13,6 +13,7 @@ import net.minecraft.util.RandomSource import net.minecraft.world.item.BlockItem import net.minecraft.world.item.Item import quaedam.Quaedam +import quaedam.config.QuaedamConfig import quaedam.projection.EntityProjectionBlock import quaedam.projection.ProjectionEffect import quaedam.projection.ProjectionEffectType @@ -107,6 +108,9 @@ data class NoiseProjectionEffect(var rate: Int = 250, var amount: Int = 3) : Pro companion object { const val TAG_RATE = "Rate" const val TAG_AMOUNT = "Amount" + + val maxAmount get() = QuaedamConfig.current.valuesInt["projection.noise.max_amount"] ?: 8 + val maxRate get() = QuaedamConfig.current.valuesInt["projection.noise.max_rate"] ?: 300 } override val type @@ -121,14 +125,14 @@ data class NoiseProjectionEffect(var rate: Int = 250, var amount: Int = 3) : Pro rate = tag.getInt(TAG_RATE) amount = tag.getInt(TAG_AMOUNT) if (!trusted) { - amount = min(amount, 8) - rate = min(rate, 500) + amount = min(amount, maxAmount) + rate = min(rate, maxRate) } } override fun createShell() = buildProjectionEffectShell(this) { - intSlider("quaedam.shell.noise.rate", ::rate, 0..300 step 5) - intSlider("quaedam.shell.noise.amount", ::amount, 0..8) + intSlider("quaedam.shell.noise.rate", ::rate, 0..maxRate step 5) + intSlider("quaedam.shell.noise.amount", ::amount, 0..maxAmount) } } diff --git a/common/src/main/kotlin/quaedam/projection/misc/SkylightProjection.kt b/common/src/main/kotlin/quaedam/projection/misc/SkylightProjection.kt index f1492f4..7683535 100644 --- a/common/src/main/kotlin/quaedam/projection/misc/SkylightProjection.kt +++ b/common/src/main/kotlin/quaedam/projection/misc/SkylightProjection.kt @@ -4,6 +4,7 @@ import net.minecraft.nbt.CompoundTag import net.minecraft.world.item.BlockItem import net.minecraft.world.item.Item import quaedam.Quaedam +import quaedam.config.QuaedamConfig import quaedam.projection.EntityProjectionBlock import quaedam.projection.ProjectionEffect import quaedam.projection.ProjectionEffectType @@ -46,6 +47,8 @@ data class SkylightProjectionEffect(var factor: Double = 2.0) : ProjectionEffect companion object { const val TAG_FACTOR = "Factor" + + val maxFactor get() = QuaedamConfig.current.valuesDouble["projection.skylight.max_factor"] ?: 5.0 } override val type @@ -58,12 +61,12 @@ data class SkylightProjectionEffect(var factor: Double = 2.0) : ProjectionEffect override fun fromNbt(tag: CompoundTag, trusted: Boolean) { factor = tag.getDouble(TAG_FACTOR) if (!trusted) { - factor = min(factor, 5.0) + factor = min(factor, maxFactor) } } override fun createShell() = buildProjectionEffectShell(this) { - doubleSlider("quaedam.shell.skylight.factor", ::factor, 0.0..5.0, 0.1) + doubleSlider("quaedam.shell.skylight.factor", ::factor, 0.0..maxFactor, 0.1) } } diff --git a/common/src/main/kotlin/quaedam/projection/misc/SoundProjection.kt b/common/src/main/kotlin/quaedam/projection/misc/SoundProjection.kt index aceb21a..d507518 100644 --- a/common/src/main/kotlin/quaedam/projection/misc/SoundProjection.kt +++ b/common/src/main/kotlin/quaedam/projection/misc/SoundProjection.kt @@ -4,6 +4,7 @@ import net.minecraft.nbt.CompoundTag import net.minecraft.world.item.BlockItem import net.minecraft.world.item.Item import quaedam.Quaedam +import quaedam.config.QuaedamConfig import quaedam.projection.EntityProjectionBlock import quaedam.projection.ProjectionEffect import quaedam.projection.ProjectionEffectType @@ -46,6 +47,8 @@ data class SoundProjectionEffect(var rate: Int = 60) : ProjectionEffect(), Proje companion object { const val TAG_RATE = "Rate" + + val maxRate get() = QuaedamConfig.current.valuesInt["projection.sound.max_rate"] ?: 210 } override val type @@ -58,12 +61,12 @@ data class SoundProjectionEffect(var rate: Int = 60) : ProjectionEffect(), Proje override fun fromNbt(tag: CompoundTag, trusted: Boolean) { rate = tag.getInt(TAG_RATE) if (!trusted) { - rate = min(rate, 210) + rate = min(rate, maxRate) } } override fun createShell() = buildProjectionEffectShell(this) { - intSlider("quaedam.shell.sound.rate", ::rate, 0..210) + intSlider("quaedam.shell.sound.rate", ::rate, 0..maxRate) } } diff --git a/common/src/main/kotlin/quaedam/projection/music/MusicProjection.kt b/common/src/main/kotlin/quaedam/projection/music/MusicProjection.kt index 4c5207f..bbd8ab8 100644 --- a/common/src/main/kotlin/quaedam/projection/music/MusicProjection.kt +++ b/common/src/main/kotlin/quaedam/projection/music/MusicProjection.kt @@ -4,6 +4,7 @@ import net.minecraft.nbt.CompoundTag import net.minecraft.world.item.BlockItem import net.minecraft.world.item.Item import quaedam.Quaedam +import quaedam.config.QuaedamConfig import quaedam.projection.EntityProjectionBlock import quaedam.projection.ProjectionEffect import quaedam.projection.ProjectionEffectType @@ -52,6 +53,9 @@ data class MusicProjectionEffect(var volumeFactor: Float = 1.0f, var particle: B companion object { const val TAG_VOLUME_FACTOR = "VolumeFactor" const val TAG_PARTICLE = "Particle" + + val maxVolumeFactor get() = QuaedamConfig.current.valuesFloat["projection.music.max_volume_factor"] ?: 5.0f + val enforceParticle get() = QuaedamConfig.current.valuesBoolean["projection.music.enforce_particle"] } override val type @@ -66,13 +70,16 @@ data class MusicProjectionEffect(var volumeFactor: Float = 1.0f, var particle: B volumeFactor = tag.getFloat(TAG_VOLUME_FACTOR) particle = tag.getBoolean(TAG_PARTICLE) if (!trusted) { - volumeFactor = min(volumeFactor, 5.0f) + volumeFactor = min(volumeFactor, maxVolumeFactor) + particle = enforceParticle ?: particle } } override fun createShell() = buildProjectionEffectShell(this) { - floatSlider("quaedam.shell.music.volume_factor", ::volumeFactor, 0.0f..5.0f, 0.1f) - boolean("quaedam.shell.music.particle", ::particle) + floatSlider("quaedam.shell.music.volume_factor", ::volumeFactor, 0.0f..maxVolumeFactor, 0.1f) + if (enforceParticle == null) { + boolean("quaedam.shell.music.particle", ::particle) + } } } diff --git a/common/src/main/kotlin/quaedam/projection/swarm/SwarmProjectionEffect.kt b/common/src/main/kotlin/quaedam/projection/swarm/SwarmProjectionEffect.kt index 24ccfb6..ab95190 100644 --- a/common/src/main/kotlin/quaedam/projection/swarm/SwarmProjectionEffect.kt +++ b/common/src/main/kotlin/quaedam/projection/swarm/SwarmProjectionEffect.kt @@ -5,6 +5,7 @@ import net.minecraft.nbt.CompoundTag import net.minecraft.server.level.ServerLevel import net.minecraft.world.entity.MobSpawnType import net.minecraft.world.level.levelgen.Heightmap +import quaedam.config.QuaedamConfig import quaedam.projection.ProjectionEffect import quaedam.projector.Projector import quaedam.projector.ProjectorBlockEntity @@ -18,6 +19,8 @@ data class SwarmProjectionEffect( companion object { const val TAG_MAX_COUNT = "MaxCount" + + val maxMaxCount get() = QuaedamConfig.current.valuesInt["projection.swarm.max_max_count"] ?: 250 } override val type @@ -30,7 +33,7 @@ data class SwarmProjectionEffect( override fun fromNbt(tag: CompoundTag, trusted: Boolean) { maxCount = tag.getInt(TAG_MAX_COUNT) if (!trusted) { - maxCount = min(maxCount, 250) + maxCount = min(maxCount, maxMaxCount) } } @@ -60,7 +63,7 @@ data class SwarmProjectionEffect( } override fun createShell() = buildProjectionEffectShell(this) { - intSlider("quaedam.shell.swarm.max_count", ::maxCount, 0..250 step 5) + intSlider("quaedam.shell.swarm.max_count", ::maxCount, 0..maxMaxCount step 5) } }