diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/copy/CopySpellTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/copy/CopySpellTest.java index bfb1a229a48..0856e2ee7ec 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/copy/CopySpellTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/copy/CopySpellTest.java @@ -78,7 +78,7 @@ public class CopySpellTest extends CardTestPlayerBase { } @Test - public void BonecrusherGiantChangeTargetsTo() { + public void BonecrusherGiantChangeTargets() { addCard(Zone.BATTLEFIELD, playerA, "Bonecrusher Giant"); addCard(Zone.BATTLEFIELD, playerA, "Grizzly Bears"); addCard(Zone.BATTLEFIELD, playerA, "Savannah Lions"); @@ -100,45 +100,6 @@ public class CopySpellTest extends CardTestPlayerBase { assertLife(playerA, 18); } - @Test - public void BonecrusherGiantChangeTargetsFrom() { - addCard(Zone.BATTLEFIELD, playerA, "Bonecrusher Giant"); - addCard(Zone.BATTLEFIELD, playerA, "Grizzly Bears"); - addCard(Zone.BATTLEFIELD, playerA, "Savannah Lions"); - addCard(Zone.BATTLEFIELD, playerA, "Plains"); - addCard(Zone.HAND, playerA, "Barkshell Blessing"); - - castSpell(1, PhaseStep.UPKEEP, playerA, "Barkshell Blessing"); - setChoice(playerA, "Yes"); - setChoice(playerA, "Yes"); - addTarget(playerA, "Bonecrusher Giant"); - addTarget(playerA, "Grizzly Bears"); - - setStopAt(1, PhaseStep.PRECOMBAT_MAIN); - execute(); - - assertPowerToughness(playerA, "Bonecrusher Giant", 6, 5); - assertPowerToughness(playerA, "Grizzly Bears", 4, 4); - assertPowerToughness(playerA, "Savannah Lions", 2, 1); - assertLife(playerA, 18); - } - - @Test - public void BonecrusherGiantControl() { - addCard(Zone.BATTLEFIELD, playerA, "Bonecrusher Giant"); - addCard(Zone.BATTLEFIELD, playerA, "Plains"); - addCard(Zone.HAND, playerA, "Barkshell Blessing"); - - castSpell(1, PhaseStep.UPKEEP, playerA, "Barkshell Blessing"); - addTarget(playerA, "Bonecrusher Giant"); - - setStopAt(1, PhaseStep.PRECOMBAT_MAIN); - execute(); - - assertPowerToughness(playerA, "Bonecrusher Giant", 6, 5); - assertLife(playerA, 18); - } - /* * Reported bug: "Silverfur Partisan and fellow wolves did not trigger off * of copies of Strength of Arms made by Zada, Hedron Grinder. Not sure diff --git a/Mage/src/main/java/mage/game/stack/StackObjImpl.java b/Mage/src/main/java/mage/game/stack/StackObjImpl.java index 6b38b76acbc..8d7130458ac 100644 --- a/Mage/src/main/java/mage/game/stack/StackObjImpl.java +++ b/Mage/src/main/java/mage/game/stack/StackObjImpl.java @@ -151,6 +151,7 @@ public abstract class StackObjImpl implements StackObject { */ private Target chooseNewTarget(Player targetController, Ability ability, Mode mode, Target target, boolean forceChange, FilterPermanent filterNewTarget, Game game) { Target newTarget = target.copy(); + newTarget.setEventReporting(false); if (!targetController.getId().equals(getControllerId())) { newTarget.setTargetController(targetController.getId()); // target controller for the change is different from spell controller newTarget.setAbilityController(getControllerId()); @@ -199,6 +200,7 @@ public abstract class StackObjImpl implements StackObject { } else { // build a target definition with exactly one possible target to select that replaces old target Target tempTarget = target.copy(); + tempTarget.setEventReporting(false); if (target instanceof TargetAmount) { ((TargetAmount) tempTarget).setAmountDefinition(StaticValue.get(target.getTargetAmount(targetId))); } @@ -215,7 +217,7 @@ public abstract class StackObjImpl implements StackObject { if (!tempTarget.chooseTarget(outcome, getControllerId(), ability, game)) { if (targetController.chooseUse(Outcome.Benefit, "No target object selected. Reset to original target?", ability, game)) { // use previous target no target was selected - newTarget.addTarget(targetId, target.getTargetAmount(targetId), ability, game, false); + newTarget.addTarget(targetId, target.getTargetAmount(targetId), ability, game, true); } else { again = true; } @@ -225,12 +227,12 @@ public abstract class StackObjImpl implements StackObject { if (targetController.isHuman()) { if (targetController.chooseUse(Outcome.Benefit, "This target was already selected from origin spell. Reset to original target?", ability, game)) { // use previous target no target was selected - newTarget.addTarget(targetId, target.getTargetAmount(targetId), ability, game, false); + newTarget.addTarget(targetId, target.getTargetAmount(targetId), ability, game, true); } else { again = true; } } else { - newTarget.addTarget(targetId, target.getTargetAmount(targetId), ability, game, false); + newTarget.addTarget(targetId, target.getTargetAmount(targetId), ability, game, true); } } else if (!target.canTarget(getControllerId(), tempTarget.getFirstTarget(), ability, game)) { if (targetController.isHuman()) { @@ -238,7 +240,7 @@ public abstract class StackObjImpl implements StackObject { again = true; } else { // keep the old - newTarget.addTarget(targetId, target.getTargetAmount(targetId), ability, game, false); + newTarget.addTarget(targetId, target.getTargetAmount(targetId), ability, game, true); } } else if (newTarget.getFirstTarget() != null && filterNewTarget != null) { Permanent newTargetPermanent = game.getPermanent(newTarget.getFirstTarget()); @@ -248,14 +250,14 @@ public abstract class StackObjImpl implements StackObject { } } else { // valid target was selected, add it to the new target definition - newTarget.addTarget(tempTarget.getFirstTarget(), target.getTargetAmount(targetId), ability, game, false); + newTarget.addTarget(tempTarget.getFirstTarget(), target.getTargetAmount(targetId), ability, game, true); } } } while (again && targetController.canRespond()); } } // keep the target else { - newTarget.addTarget(targetId, target.getTargetAmount(targetId), ability, game, false); + newTarget.addTarget(targetId, target.getTargetAmount(targetId), ability, game, true); } } return newTarget; diff --git a/Mage/src/main/java/mage/target/Target.java b/Mage/src/main/java/mage/target/Target.java index a9b7d45ec04..ec2a5aa573c 100644 --- a/Mage/src/main/java/mage/target/Target.java +++ b/Mage/src/main/java/mage/target/Target.java @@ -136,4 +136,6 @@ public interface Target extends Serializable { void setTargetAmount(UUID targetId, int amount, Game game); Target withChooseHint(String chooseHint); + + void setEventReporting(boolean shouldReport); } diff --git a/Mage/src/main/java/mage/target/TargetImpl.java b/Mage/src/main/java/mage/target/TargetImpl.java index 438bbb35ada..bbd85908cfe 100644 --- a/Mage/src/main/java/mage/target/TargetImpl.java +++ b/Mage/src/main/java/mage/target/TargetImpl.java @@ -37,6 +37,7 @@ public abstract class TargetImpl implements Target { protected int targetTag; // can be set if other target check is needed (AnotherTargetPredicate) protected String chooseHint = null; // UI choose hints after target name + protected boolean shouldReportEvents = true; @Override public abstract TargetImpl copy(); @@ -65,6 +66,7 @@ public abstract class TargetImpl implements Target { this.abilityController = target.abilityController; this.targetTag = target.targetTag; this.chooseHint = target.chooseHint; + this.shouldReportEvents = target.shouldReportEvents; } @Override @@ -213,12 +215,12 @@ public abstract class TargetImpl implements Target { //20100423 - 113.3 if (getMaxNumberOfTargets() == 0 || targets.size() < getMaxNumberOfTargets()) { if (!targets.containsKey(id)) { - if (source != null && !skipEvent) { + if (source != null && !skipEvent && shouldReportEvents) { if (!game.replaceEvent(GameEvent.getEvent(EventType.TARGET, id, source.getSourceId(), source.getControllerId()))) { targets.put(id, 0); rememberZoneChangeCounter(id, game); chosen = targets.size() >= getNumberOfTargets(); - if (!skipEvent) { + if (!skipEvent && shouldReportEvents) { game.addSimultaneousEvent(GameEvent.getEvent(EventType.TARGETED, id, source.getSourceId(), source.getControllerId())); } } @@ -251,12 +253,12 @@ public abstract class TargetImpl implements Target { if (targets.containsKey(id)) { amount += targets.get(id); } - if (source != null && !skipEvent) { + if (source != null && !skipEvent && shouldReportEvents) { if (!game.replaceEvent(GameEvent.getEvent(EventType.TARGET, id, source.getSourceId(), source.getControllerId()))) { targets.put(id, amount); rememberZoneChangeCounter(id, game); chosen = targets.size() >= getNumberOfTargets(); - if (!skipEvent) { + if (!skipEvent && shouldReportEvents) { game.fireEvent(GameEvent.getEvent(EventType.TARGETED, id, source.getSourceId(), source.getControllerId())); } } @@ -551,4 +553,9 @@ public abstract class TargetImpl implements Target { this.chooseHint = chooseHint; return this; } + + @Override + public void setEventReporting(boolean shouldReport) { + this.shouldReportEvents = shouldReport; + } }