From 8d60ade078fc7ca488ab8fbc5a53c2c0472cbd80 Mon Sep 17 00:00:00 2001 From: "maurer.it" Date: Thu, 30 Dec 2010 09:47:10 -0500 Subject: [PATCH] Fixed Issue 23. --- .../effects/common/SacrificeEffect.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/Mage/src/mage/abilities/effects/common/SacrificeEffect.java b/Mage/src/mage/abilities/effects/common/SacrificeEffect.java index e480cd89468..606cb7ffef1 100644 --- a/Mage/src/mage/abilities/effects/common/SacrificeEffect.java +++ b/Mage/src/mage/abilities/effects/common/SacrificeEffect.java @@ -59,18 +59,25 @@ public class SacrificeEffect extends OneShotEffect{ @Override public boolean apply(Game game, Ability source) { + boolean legalTargetsExist = false; Player player = game.getPlayer(source.getTargets().getFirstTarget()); int numTargets = Math.min(1, game.getBattlefield().countAll(filter, player.getId())); + legalTargetsExist = numTargets > 0; filter.setTargetController(TargetController.YOU); TargetControlledPermanent target = new TargetControlledPermanent(numTargets, numTargets, filter, false); - while (!target.isChosen()) { - player.choose(Outcome.Sacrifice, target, game); - } - Permanent permanent = game.getPermanent(target.getFirstTarget()); + //A spell or ability could have removed the only legal target this player + //had, if thats the case this ability should fizzle. + if ( legalTargetsExist ) { + while (!target.isChosen()) { + player.choose(Outcome.Sacrifice, target, game); + } - if ( permanent != null ) { - return permanent.sacrifice(source.getId(), game); + Permanent permanent = game.getPermanent(target.getFirstTarget()); + + if ( permanent != null ) { + return permanent.sacrifice(source.getId(), game); + } } return false; }