From b4894f5564ab0d9322baed947d419ff09a1361a9 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 7 Mar 2015 16:42:11 +0100 Subject: [PATCH] * Fixed a bug that could cause endless loop of applying replacement/prevention effects (e.g. prevent effect of Hedron-Field Purists) locking the UI. --- Mage/src/mage/abilities/effects/ContinuousEffects.java | 9 ++++++++- .../common/continuous/GainAbilitySourceEffect.java | 2 +- Mage/src/mage/game/GameState.java | 5 +++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Mage/src/mage/abilities/effects/ContinuousEffects.java b/Mage/src/mage/abilities/effects/ContinuousEffects.java index 298aa83ee50..b88b5f5790c 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffects.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffects.java @@ -52,6 +52,7 @@ import mage.cards.CardsImpl; import mage.constants.AsThoughEffectType; import mage.constants.CostModificationType; import mage.constants.Duration; +import mage.constants.EffectType; import mage.constants.Layer; import mage.constants.Outcome; import mage.constants.SpellAbilityType; @@ -717,7 +718,12 @@ public class ContinuousEffects implements Serializable { boolean onlyOne = false; if (rEffects.size() == 1) { ReplacementEffect effect = rEffects.keySet().iterator().next(); - HashSet abilities = replacementEffects.getAbility(effect.getId()); + HashSet abilities; + if (effect.getEffectType().equals(EffectType.REPLACEMENT)) { + abilities = replacementEffects.getAbility(effect.getId()); + } else { + abilities = preventionEffects.getAbility(effect.getId()); + } if (abilities == null || abilities.size() == 1) { onlyOne = true; } @@ -788,6 +794,7 @@ public class ContinuousEffects implements Serializable { } } // Must be called here for some effects to be able to work correctly + // TODO: add info which effects that need game.applyEffects(); } while (true); return caught; diff --git a/Mage/src/mage/abilities/effects/common/continuous/GainAbilitySourceEffect.java b/Mage/src/mage/abilities/effects/common/continuous/GainAbilitySourceEffect.java index 3954415d445..5368ff61fe2 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/GainAbilitySourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/GainAbilitySourceEffect.java @@ -119,7 +119,7 @@ public class GainAbilitySourceEffect extends ContinuousEffectImpl implements Sou permanent = game.getPermanent(source.getSourceId()); } if (permanent != null) { - permanent.addAbility(ability, source.getSourceId(), game); + permanent.addAbility(ability, source.getSourceId(), game, false); return true; } } diff --git a/Mage/src/mage/game/GameState.java b/Mage/src/mage/game/GameState.java index c4d01d07bb4..3f19d3c2526 100644 --- a/Mage/src/mage/game/GameState.java +++ b/Mage/src/mage/game/GameState.java @@ -424,10 +424,11 @@ public class GameState implements Serializable, Copyable { } public void addEffect(ContinuousEffect effect, UUID sourceId, Ability source) { - if (sourceId == null) + if (sourceId == null) { effects.addEffect(effect, source); - else + } else { effects.addEffect(effect, sourceId, source); + } } // public void addMessage(String message) {