diff --git a/Mage.Sets/src/mage/sets/commander2015/GraspOfFate.java b/Mage.Sets/src/mage/sets/commander2015/GraspOfFate.java index 2849a7d5c53..f3c787d3a70 100644 --- a/Mage.Sets/src/mage/sets/commander2015/GraspOfFate.java +++ b/Mage.Sets/src/mage/sets/commander2015/GraspOfFate.java @@ -38,6 +38,7 @@ import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; +import mage.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; @@ -69,18 +70,18 @@ public class GraspOfFate extends CardImpl { public GraspOfFate(final GraspOfFate card) { super(card); } - + @Override public void adjustTargets(Ability ability, Game game) { if (ability instanceof EntersBattlefieldTriggeredAbility) { ability.getTargets().clear(); - for(UUID opponentId : game.getOpponents(ability.getControllerId())) { + for (UUID opponentId : game.getOpponents(ability.getControllerId())) { Player opponent = game.getPlayer(opponentId); if (opponent != null) { FilterPermanent filter = new FilterPermanent("nonland permanent from opponent " + opponent.getLogName()); filter.add(new ControllerIdPredicate(opponentId)); filter.add(Predicates.not(new CardTypePredicate(CardType.LAND))); - TargetPermanent target = new TargetPermanent(0, 1, filter,false); + TargetPermanent target = new TargetPermanent(0, 1, filter, false); ability.addTarget(target); } } @@ -113,7 +114,7 @@ class GraspOfFateExileEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { - return new ExileTargetEffect(CardUtil.getCardExileZoneId(game, source), permanent.getIdName()).apply(game, source); + return new ExileTargetEffect(CardUtil.getCardExileZoneId(game, source), permanent.getIdName(), Zone.BATTLEFIELD, true).apply(game, source); } return false; } diff --git a/Mage/src/main/java/mage/abilities/effects/common/ExileTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ExileTargetEffect.java index 0cd80c15af0..29c311eca62 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ExileTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ExileTargetEffect.java @@ -39,6 +39,8 @@ import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; +import mage.target.Target; +import mage.target.targetpointer.FirstTargetPointer; /** * @@ -49,6 +51,7 @@ public class ExileTargetEffect extends OneShotEffect { private Zone onlyFromZone; private String exileZone = null; private UUID exileId = null; + protected boolean multitargetHandling; public ExileTargetEffect(String effectText) { this(); @@ -64,10 +67,15 @@ public class ExileTargetEffect extends OneShotEffect { } public ExileTargetEffect(UUID exileId, String exileZone, Zone onlyFromZone) { + this(exileId, exileZone, onlyFromZone, false); + } + + public ExileTargetEffect(UUID exileId, String exileZone, Zone onlyFromZone, boolean multitargetHandling) { super(Outcome.Exile); this.exileZone = exileZone; this.exileId = exileId; this.onlyFromZone = onlyFromZone; + this.multitargetHandling = multitargetHandling; } public ExileTargetEffect(final ExileTargetEffect effect) { @@ -75,6 +83,7 @@ public class ExileTargetEffect extends OneShotEffect { this.exileZone = effect.exileZone; this.exileId = effect.exileId; this.onlyFromZone = effect.onlyFromZone; + this.multitargetHandling = effect.multitargetHandling; } @Override @@ -87,19 +96,41 @@ public class ExileTargetEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { Set toExile = new LinkedHashSet<>(); - for (UUID targetId : getTargetPointer().getTargets(game, source)) { - Permanent permanent = game.getPermanent(targetId); - if (permanent != null) { - Zone currentZone = game.getState().getZone(permanent.getId()); - if (!currentZone.equals(Zone.EXILED) && (onlyFromZone == null || onlyFromZone.equals(Zone.BATTLEFIELD))) { - toExile.add(permanent); + if (multitargetHandling && source.getTargets().size() > 1 && targetPointer instanceof FirstTargetPointer) { // Decimate + for (Target target : source.getTargets()) { + for (UUID targetId : target.getTargets()) { + Permanent permanent = game.getPermanent(targetId); + if (permanent != null) { + Zone currentZone = game.getState().getZone(permanent.getId()); + if (!currentZone.equals(Zone.EXILED) && (onlyFromZone == null || onlyFromZone.equals(Zone.BATTLEFIELD))) { + toExile.add(permanent); + } + } else { + Card card = game.getCard(targetId); + if (card != null) { + Zone currentZone = game.getState().getZone(card.getId()); + if (!currentZone.equals(Zone.EXILED) && (onlyFromZone == null || onlyFromZone.equals(currentZone))) { + toExile.add(card); + } + } + } } - } else { - Card card = game.getCard(targetId); - if (card != null) { - Zone currentZone = game.getState().getZone(card.getId()); - if (!currentZone.equals(Zone.EXILED) && (onlyFromZone == null || onlyFromZone.equals(currentZone))) { - toExile.add(card); + } + } else { + for (UUID targetId : getTargetPointer().getTargets(game, source)) { + Permanent permanent = game.getPermanent(targetId); + if (permanent != null) { + Zone currentZone = game.getState().getZone(permanent.getId()); + if (!currentZone.equals(Zone.EXILED) && (onlyFromZone == null || onlyFromZone.equals(Zone.BATTLEFIELD))) { + toExile.add(permanent); + } + } else { + Card card = game.getCard(targetId); + if (card != null) { + Zone currentZone = game.getState().getZone(card.getId()); + if (!currentZone.equals(Zone.EXILED) && (onlyFromZone == null || onlyFromZone.equals(currentZone))) { + toExile.add(card); + } } } }