From e5438e7ae3c0dbabe65d14af520a1cd6d47ee0b4 Mon Sep 17 00:00:00 2001 From: Sn0wStorm Date: Fri, 11 Oct 2019 15:38:29 +0200 Subject: [PATCH] Reapply potion effects to the player if he already has it Fixes #205 --- src/com/dre/brewery/BEffect.java | 2 +- src/com/dre/brewery/BPlayer.java | 10 +++++----- src/com/dre/brewery/Util.java | 22 ++++++++++++++++++++++ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/com/dre/brewery/BEffect.java b/src/com/dre/brewery/BEffect.java index 39e68f12..7339f496 100644 --- a/src/com/dre/brewery/BEffect.java +++ b/src/com/dre/brewery/BEffect.java @@ -93,7 +93,7 @@ public void apply(int quality, Player player) { if (!P.use1_14) { duration /= type.getDurationModifier(); } - type.createEffect(duration, lvl - 1).apply(player); + Util.reapplyPotionEffect(player, type.createEffect(duration, lvl - 1), true); } public int calcDuration(float quality) { diff --git a/src/com/dre/brewery/BPlayer.java b/src/com/dre/brewery/BPlayer.java index 6879b9cf..14111b4c 100644 --- a/src/com/dre/brewery/BPlayer.java +++ b/src/com/dre/brewery/BPlayer.java @@ -497,7 +497,7 @@ public static void addQualityEffects(int quality, int brewAlc, Player player) { duration *= 4; } if (duration > 0) { - PotionEffectType.POISON.createEffect(duration, 0).apply(player); + Util.reapplyPotionEffect(player, PotionEffectType.POISON.createEffect(duration, 0), true); } if (brewAlc > 10) { @@ -511,7 +511,7 @@ public static void addQualityEffects(int quality, int brewAlc, Player player) { if (!P.use1_14) { duration *= 4; } - PotionEffectType.BLINDNESS.createEffect(duration, 0).apply(player); + Util.reapplyPotionEffect(player, PotionEffectType.BLINDNESS.createEffect(duration, 0), true); } } @@ -531,12 +531,12 @@ public void hangoverEffects(final Player player) { } int amplifier = getHangoverQuality() / 3; - PotionEffectType.SLOW.createEffect(duration, amplifier).apply(player); - PotionEffectType.HUNGER.createEffect(duration, amplifier).apply(player); + Util.reapplyPotionEffect(player, PotionEffectType.SLOW.createEffect(duration, amplifier), true); + Util.reapplyPotionEffect(player, PotionEffectType.HUNGER.createEffect(duration, amplifier), true); } - // #### Sheduled #### + // #### Scheduled #### public static void drunkeness() { for (Map.Entry entry : players.entrySet()) { diff --git a/src/com/dre/brewery/Util.java b/src/com/dre/brewery/Util.java index 0743252e..bc7cf4ae 100644 --- a/src/com/dre/brewery/Util.java +++ b/src/com/dre/brewery/Util.java @@ -7,6 +7,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; import java.io.File; import java.io.FileOutputStream; @@ -54,6 +56,26 @@ public static Player getPlayerfromString(String name) { return Bukkit.getPlayerExact(name); } + // Apply a Potion Effect, if player already has this effect, overwrite the existing effect. + // Optionally only overwrite if the new one is stronger, i.e. has higher level or longer duration + public static void reapplyPotionEffect(Player player, PotionEffect effect, boolean onlyIfStronger) { + final PotionEffectType type = effect.getType(); + if (player.hasPotionEffect(type)) { + PotionEffect plEffect; + if (P.use1_11) { + plEffect = player.getPotionEffect(type); + } else { + plEffect = player.getActivePotionEffects().stream().filter(e -> e.getType().equals(type)).findAny().get(); + } + if (plEffect.getAmplifier() < effect.getAmplifier() || (plEffect.getAmplifier() == effect.getAmplifier() && plEffect.getDuration() < effect.getDuration())) { + player.removePotionEffect(type); + } else { + return; + } + } + effect.apply(player); + } + /********** Other Utils **********/ // prints a list of Strings at the specified page