diff --git a/src/main/java/net/fretux/knockedback/KnockedManager.java b/src/main/java/net/fretux/knockedback/KnockedManager.java index b06cfaf..cbdb49b 100644 --- a/src/main/java/net/fretux/knockedback/KnockedManager.java +++ b/src/main/java/net/fretux/knockedback/KnockedManager.java @@ -226,14 +226,27 @@ public class KnockedManager { private static void applyKnockedEffects(Player player) { List configured = Config.COMMON.knockedPotionEffects.get(); - if (configured.isEmpty()) { - return; - } + Map desiredEffects = new HashMap<>(); for (String entry : configured) { MobEffectInstance instance = parseEffect(entry); if (instance == null) { continue; } + MobEffect effect = instance.getEffect(); + MobEffectInstance existing = desiredEffects.get(effect); + if (existing == null || existing.getAmplifier() < instance.getAmplifier()) { + desiredEffects.put(effect, instance); + } + } + if (Config.COMMON.removeOtherPotionEffectsWhileKnocked.get()) { + for (MobEffectInstance current : new ArrayList<>(player.getActiveEffects())) { + MobEffect currentEffect = current.getEffect(); + if (!desiredEffects.containsKey(currentEffect)) { + player.removeEffect(currentEffect); + } + } + } + for (MobEffectInstance instance : desiredEffects.values()) { MobEffect effect = instance.getEffect(); MobEffectInstance existing = player.getEffect(effect); if (existing == null || existing.getDuration() < 20 || existing.getAmplifier() < instance.getAmplifier()) { diff --git a/src/main/java/net/fretux/knockedback/config/Config.java b/src/main/java/net/fretux/knockedback/config/Config.java index 85e58a9..d0ae1a2 100644 --- a/src/main/java/net/fretux/knockedback/config/Config.java +++ b/src/main/java/net/fretux/knockedback/config/Config.java @@ -21,6 +21,7 @@ public class Config { public final ForgeConfigSpec.BooleanValue totemPreventsKnockdown; public final ForgeConfigSpec.ConfigValue> mobExecutionAllowlist; public final ForgeConfigSpec.ConfigValue> knockedPotionEffects; + public final ForgeConfigSpec.BooleanValue removeOtherPotionEffectsWhileKnocked; public Common(ForgeConfigSpec.Builder builder) { builder.push("general"); @@ -49,6 +50,10 @@ public class Config { "Example: [\"minecraft:slowness,200,1\", \"minecraft:weakness,200,0,true,false,false\"]") .defineListAllowEmpty("knockedPotionEffects", List.of(), o -> o instanceof String); + removeOtherPotionEffectsWhileKnocked = builder + .comment("If true, remove any potion effects not listed in knockedPotionEffects while knocked. Default: false.") + .define("removeOtherPotionEffectsWhileKnocked", false); + builder.pop().push("damage_behavior"); totemPreventsKnockdown = builder