handle multiple replacement effects

This commit is contained in:
BetaSteward 2011-08-19 22:17:19 -04:00
parent 9f64c00dc5
commit 2d0842f320

View file

@ -398,8 +398,16 @@ public class ContinuousEffects implements Serializable {
public boolean replaceEvent(GameEvent event, Game game) { public boolean replaceEvent(GameEvent event, Game game) {
boolean caught = false; boolean caught = false;
List<UUID> consumed = new ArrayList<UUID>();
do {
List<ReplacementEffect> rEffects = getApplicableReplacementEffects(event, game); List<ReplacementEffect> rEffects = getApplicableReplacementEffects(event, game);
if (rEffects.size() > 0) { for (Iterator<ReplacementEffect> i = rEffects.iterator(); i.hasNext();) {
ReplacementEffect entry = i.next();
if (consumed.contains(entry.getId()))
i.remove();
}
if (rEffects.isEmpty())
break;
int index; int index;
if (rEffects.size() == 1) { if (rEffects.size() == 1) {
index = 0; index = 0;
@ -411,8 +419,10 @@ public class ContinuousEffects implements Serializable {
} }
ReplacementEffect rEffect = rEffects.get(index); ReplacementEffect rEffect = rEffects.get(index);
caught = rEffect.replaceEvent(event, abilityMap.get(rEffect.getId()), game); caught = rEffect.replaceEvent(event, abilityMap.get(rEffect.getId()), game);
} if (caught)
break;
consumed.add(rEffect.getId());
} while (true);
return caught; return caught;
} }