diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java index e850041632f..fb728d47cdd 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java @@ -446,28 +446,36 @@ public class ReplacementHandler { * @return total shield amount */ public int getTotalPreventionShieldAmount(GameEntity o) { - final Map repParams = AbilityKey.mapFromAffected(o); - repParams.put(AbilityKey.Prevention, true); - repParams.put(AbilityKey.DamageAmount, 1); - List list = getReplacementList(ReplacementType.DamageDone, repParams, ReplacementLayer.Other); - if (list.isEmpty()) { - return 0; - } + final List list = Lists.newArrayList(); + game.forEachCardInGame(new Visitor() { + @Override + public boolean visit(Card c) { + for (final ReplacementEffect re : c.getReplacementEffects()) { + if (re.getMode() == ReplacementType.DamageDone + && re.getLayer() == ReplacementLayer.Other + && re.hasParam("PreventionEffect") + && re.zonesCheck(game.getZoneOf(c)) + && re.getOverridingAbility() != null + && re.getOverridingAbility().getApi() == ApiType.ReplaceDamage) { + list.add(re); + } + } + return true; + } + + }); + int totalAmount = 0; for (ReplacementEffect re : list) { - if (re.getOverridingAbility() != null) { - SpellAbility sa = re.getOverridingAbility(); - if (ApiType.ReplaceDamage == sa.getApi() && sa.hasParam("Amount")) { - String varValue = sa.getParam("Amount"); - if (StringUtils.isNumeric(varValue)) { - totalAmount += Integer.parseInt(varValue); - } else { - varValue = sa.getSVar(varValue); - if (StringUtils.isNumeric(varValue)) { - totalAmount += Integer.parseInt(varValue); - } else if (varValue.startsWith("Number$")) { - totalAmount += Integer.parseInt(varValue.substring(7)); - } + SpellAbility sa = re.getOverridingAbility(); + if (sa.hasParam("Amount")) { + String varValue = sa.getParam("Amount"); + if (StringUtils.isNumeric(varValue)) { + totalAmount += Integer.parseInt(varValue); + } else { + varValue = sa.getSVar(varValue); + if (varValue.startsWith("Number$")) { + totalAmount += Integer.parseInt(varValue.substring(7)); } } }