diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/ServerConfig.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/ServerConfig.kt index a87d520f6..c343c6897 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/ServerConfig.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/ServerConfig.kt @@ -141,6 +141,13 @@ object ServerConfig { specBuilder.comment("Tweaking of android players").push("androidPlayer") } + val REGENERATE_ENERGY: Boolean by specBuilder + .comment("If (technically) hunger is above threshold, it turns into energy") + .comment("This setting controls whenever to regenerate small amount of energy while eating as Android") + .comment("And also whenever to regenerate energy while in peaceful") + .comment("If this is disabled, any (technically) excess hunger will be nullified, unless playing on peaceful difficulty.") + .define("regenerateEnergy", true) + val ANDROID_ENERGY_PER_HUNGER_POINT by specBuilder.defineImpreciseFraction("energyPerHunger", ImpreciseFraction(1000), ImpreciseFraction.ZERO) val ANDROID_MAX_ENERGY by specBuilder.comment("Internal battery of every android has this much storage").defineImpreciseFraction("capacity", ImpreciseFraction(80_000), ImpreciseFraction.ZERO) val NIGHT_VISION_POWER_DRAW by specBuilder.defineImpreciseFraction("nightVisionPowerDraw", ImpreciseFraction(8), ImpreciseFraction.ZERO) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt index 99d5f5a1a..99bc0b40e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt @@ -11,6 +11,7 @@ import net.minecraft.network.chat.Component import net.minecraft.resources.ResourceLocation import net.minecraft.server.level.ServerPlayer import net.minecraft.tags.TagKey +import net.minecraft.world.Difficulty import net.minecraft.world.effect.MobEffect import net.minecraft.world.entity.Entity import net.minecraft.world.entity.MobSpawnType @@ -631,9 +632,13 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial // "block" quick regeneration // also cause power to generate while in peaceful - while (stats.foodLevel > 18 && androidEnergy.receiveEnergyInner(ServerConfig.ANDROID_ENERGY_PER_HUNGER_POINT, true) >= ServerConfig.ANDROID_ENERGY_PER_HUNGER_POINT) { - androidEnergy.receiveEnergyInner(ServerConfig.ANDROID_ENERGY_PER_HUNGER_POINT, false) - stats.foodLevel = stats.foodLevel - 1 + if (ServerConfig.REGENERATE_ENERGY) { + while (stats.foodLevel > 18 && androidEnergy.receiveEnergyInner(ServerConfig.ANDROID_ENERGY_PER_HUNGER_POINT, true) >= ServerConfig.ANDROID_ENERGY_PER_HUNGER_POINT) { + androidEnergy.receiveEnergyInner(ServerConfig.ANDROID_ENERGY_PER_HUNGER_POINT, false) + stats.foodLevel = stats.foodLevel - 1 + } + } else if (ply.level.server?.worldData?.difficulty != Difficulty.PEACEFUL) { + stats.foodLevel = stats.foodLevel.coerceAtMost(18) } val foodLevel = stats.foodLevel.toFloat()