From 2d0842f320be9ac106ea1ffc8c5d3bbf72345ef5 Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Fri, 19 Aug 2011 22:17:19 -0400 Subject: [PATCH] handle multiple replacement effects --- .../abilities/effects/ContinuousEffects.java | 40 ++++++++++++------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/Mage/src/mage/abilities/effects/ContinuousEffects.java b/Mage/src/mage/abilities/effects/ContinuousEffects.java index 30431938d73..34417b534bf 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffects.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffects.java @@ -398,21 +398,31 @@ public class ContinuousEffects implements Serializable { public boolean replaceEvent(GameEvent event, Game game) { boolean caught = false; - List rEffects = getApplicableReplacementEffects(event, game); - if (rEffects.size() > 0) { - int index; - if (rEffects.size() == 1) { - index = 0; - } - else { - //20100716 - 616.1c - Player player = game.getPlayer(event.getPlayerId()); - index = player.chooseEffect(rEffects, game); - } - ReplacementEffect rEffect = rEffects.get(index); - caught = rEffect.replaceEvent(event, abilityMap.get(rEffect.getId()), game); - } - + List consumed = new ArrayList(); + do { + List rEffects = getApplicableReplacementEffects(event, game); + for (Iterator i = rEffects.iterator(); i.hasNext();) { + ReplacementEffect entry = i.next(); + if (consumed.contains(entry.getId())) + i.remove(); + } + if (rEffects.isEmpty()) + break; + int index; + if (rEffects.size() == 1) { + index = 0; + } + else { + //20100716 - 616.1c + Player player = game.getPlayer(event.getPlayerId()); + index = player.chooseEffect(rEffects, game); + } + ReplacementEffect rEffect = rEffects.get(index); + caught = rEffect.replaceEvent(event, abilityMap.get(rEffect.getId()), game); + if (caught) + break; + consumed.add(rEffect.getId()); + } while (true); return caught; }