From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: AlphaKR93 Date: Mon, 4 Dec 2023 23:01:32 +0900 Subject: [PATCH] Variable entity wakeup duration diff --git a/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java b/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java index bc283729cab4df2c596febf1df54241571227564..1e7c23c8851ba1d0f37d2b17fd334220e060888e 100644 --- a/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java +++ b/src/main/java/org/plazmamc/plazma/configurations/WorldConfigurations.java @@ -39,6 +39,20 @@ public class WorldConfigurations extends ConfigurationPart { } + public WakeUpDurationVariance wakeUpDurationVariance; + public class WakeUpDurationVariance extends ConfigurationPart { + + private double defaultValue() { + return OPTIMIZE ? 0.2 : 0.0; + } + + double animal = defaultValue(); public double animal() { return Math.max(this.animal, 0.0); } + double monster = defaultValue(); public double monster() { return Math.max(this.monster, 0.0); } + double flying = defaultValue(); public double flying() { return Math.max(this.flying, 0.0); } + double villager = defaultValue(); public double villager() { return Math.max(this.villager, 0.0); } + + } + } public Structure structure; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java index de2b469f06f6679aed1d20156052bfbef5e7c30b..ebd0764dde2e1d79fb41b5d881990ee07a0590b1 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -64,29 +64,36 @@ public class ActivationRange Activity.PANIC }; + // Plazma start - Variable entity wakeup duration + private static int getWakeupDuration(net.minecraft.util.RandomSource random, int duration, double deviation) { + if (deviation == 0) return duration; + return (int) Math.min(Integer.MAX_VALUE, Math.max(1, Math.round(duration * (1 + deviation * random.nextGaussian())))); + } + // Plazma end - Variable entity wakeup duration private static int checkInactiveWakeup(Entity entity) { Level world = entity.level(); SpigotWorldConfig config = world.spigotConfig; + org.plazmamc.plazma.configurations.WorldConfigurations plazmaConfig = world.plazmaConfig(); // Plazma - Variable entity wakeup duration long inactiveFor = MinecraftServer.currentTick - entity.activatedTick; if (entity.activationType == ActivationType.VILLAGER) { if (inactiveFor > config.wakeUpInactiveVillagersEvery && world.wakeupInactiveRemainingVillagers > 0) { world.wakeupInactiveRemainingVillagers--; - return config.wakeUpInactiveVillagersFor; + return getWakeupDuration(world.getRandom(), config.wakeUpInactiveVillagersFor, plazmaConfig.entity.wakeUpDurationVariance.villager()); // Plazma - Variable entity wakeup duration } } else if (entity.activationType == ActivationType.ANIMAL) { if (inactiveFor > config.wakeUpInactiveAnimalsEvery && world.wakeupInactiveRemainingAnimals > 0) { world.wakeupInactiveRemainingAnimals--; - return config.wakeUpInactiveAnimalsFor; + return getWakeupDuration(world.getRandom(), config.wakeUpInactiveAnimalsFor, plazmaConfig.entity.wakeUpDurationVariance.animal()); // Plazma - Variable entity wakeup duration } } else if (entity.activationType == ActivationType.FLYING_MONSTER) { if (inactiveFor > config.wakeUpInactiveFlyingEvery && world.wakeupInactiveRemainingFlying > 0) { world.wakeupInactiveRemainingFlying--; - return config.wakeUpInactiveFlyingFor; + return getWakeupDuration(world.getRandom(), config.wakeUpInactiveFlyingFor, plazmaConfig.entity.wakeUpDurationVariance.flying()); // Plazma - Variable entity wakeup duration } } else if (entity.activationType == ActivationType.MONSTER || entity.activationType == ActivationType.RAIDER) { if (inactiveFor > config.wakeUpInactiveMonstersEvery && world.wakeupInactiveRemainingMonsters > 0) { world.wakeupInactiveRemainingMonsters--; - return config.wakeUpInactiveMonstersFor; + return getWakeupDuration(world.getRandom(), config.wakeUpInactiveMonstersFor, plazmaConfig.entity.wakeUpDurationVariance.monster()); // Plazma - Variable entity wakeup duration } } return -1;