Skip to content

Commit

Permalink
Reapply potion effects to the player if he already has it
Browse files Browse the repository at this point in the history
Fixes #205
  • Loading branch information
Sn0wStorm committed Oct 11, 2019
1 parent fc66ed6 commit e5438e7
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 6 deletions.
2 changes: 1 addition & 1 deletion src/com/dre/brewery/BEffect.java
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
10 changes: 5 additions & 5 deletions src/com/dre/brewery/BPlayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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);
}
}

Expand All @@ -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<String, BPlayer> entry : players.entrySet()) {
Expand Down
22 changes: 22 additions & 0 deletions src/com/dre/brewery/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit e5438e7

Please sign in to comment.