From 88d66784dfdf010c3f16f27000860823c652f3bd Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Fri, 15 Jul 2016 14:25:25 +0200 Subject: [PATCH 1/4] * Crop Sigil - Fixed that it can't be activated without both a creature and land in the graveyard (fixes #2079 ). --- .../src/mage/sets/eldritchmoon/CropSigil.java | 8 +++---- .../src/main/java/mage/target/TargetCard.java | 23 ++++++++++--------- Mage/src/main/java/mage/target/Targets.java | 2 +- .../common/TargetCardInYourGraveyard.java | 7 ++---- 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/CropSigil.java b/Mage.Sets/src/mage/sets/eldritchmoon/CropSigil.java index 75c61fd210..66e8358a08 100644 --- a/Mage.Sets/src/mage/sets/eldritchmoon/CropSigil.java +++ b/Mage.Sets/src/mage/sets/eldritchmoon/CropSigil.java @@ -43,7 +43,7 @@ import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.predicate.mageobject.CardTypePredicate; import mage.game.events.GameEvent; -import mage.target.common.TargetCardInGraveyard; +import mage.target.common.TargetCardInYourGraveyard; /** * @@ -71,10 +71,10 @@ public class CropSigil extends CardImpl { Ability ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(true, true), new ManaCostsImpl<>("{2}{G}"), DeliriumCondition.getInstance(), "Delirium — {2}{G}, Sacrifice {this}: Return up to one target creature card and up to one target land card from your graveyard to your hand. " - + "Activate this ability only if there are four or more card types among cards in your graveyard"); + + "Activate this ability only if there are four or more card types among cards in your graveyard"); ability.addCost(new SacrificeSourceCost()); - ability.addTarget(new TargetCardInGraveyard(0, 1, filterCreature)); - ability.addTarget(new TargetCardInGraveyard(0, 1, filterLand)); + ability.addTarget(new TargetCardInYourGraveyard(0, 1, filterCreature)); + ability.addTarget(new TargetCardInYourGraveyard(0, 1, filterLand)); this.addAbility(ability); } diff --git a/Mage/src/main/java/mage/target/TargetCard.java b/Mage/src/main/java/mage/target/TargetCard.java index 92d0048927..04885dd42e 100644 --- a/Mage/src/main/java/mage/target/TargetCard.java +++ b/Mage/src/main/java/mage/target/TargetCard.java @@ -24,21 +24,19 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.target; -import mage.constants.Zone; -import mage.cards.Card; -import mage.cards.Cards; -import mage.filter.FilterCard; -import mage.game.Game; -import mage.players.Player; - import java.util.HashSet; import java.util.Set; import java.util.UUID; +import mage.cards.Card; +import mage.cards.Cards; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.game.Game; import mage.game.events.GameEvent; +import mage.players.Player; /** * @@ -87,9 +85,12 @@ public class TargetCard extends TargetObject { @Override public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) { int possibleTargets = 0; - for (UUID playerId: game.getState().getPlayersInRange(sourceControllerId, game)) { + for (UUID playerId : game.getState().getPlayersInRange(sourceControllerId, game)) { Player player = game.getPlayer(playerId); if (player != null) { + if (this.minNumberOfTargets == 0) { + return true; + } switch (zone) { case HAND: for (Card card : player.getHand().getCards(filter, sourceId, sourceControllerId, game)) { @@ -200,7 +201,7 @@ public class TargetCard extends TargetObject { public Set possibleTargets(UUID sourceControllerId, Cards cards, Game game) { Set possibleTargets = new HashSet<>(); - for (Card card: cards.getCards(filter, game)) { + for (Card card : cards.getCards(filter, game)) { possibleTargets.add(card.getId()); } return possibleTargets; diff --git a/Mage/src/main/java/mage/target/Targets.java b/Mage/src/main/java/mage/target/Targets.java index c29f1932d9..be2bbe1d6e 100644 --- a/Mage/src/main/java/mage/target/Targets.java +++ b/Mage/src/main/java/mage/target/Targets.java @@ -121,7 +121,7 @@ public class Targets extends ArrayList { } } // it is legal when either there is no target or not all targets are illegal - return this.size() == 0 || this.size() != illegalCount; + return this.isEmpty() || this.size() != illegalCount; } /** diff --git a/Mage/src/main/java/mage/target/common/TargetCardInYourGraveyard.java b/Mage/src/main/java/mage/target/common/TargetCardInYourGraveyard.java index eba50fb268..de6b386387 100644 --- a/Mage/src/main/java/mage/target/common/TargetCardInYourGraveyard.java +++ b/Mage/src/main/java/mage/target/common/TargetCardInYourGraveyard.java @@ -30,10 +30,10 @@ package mage.target.common; import java.util.HashSet; import java.util.Set; import java.util.UUID; -import mage.constants.Zone; import mage.abilities.Ability; import mage.cards.Card; import mage.cards.Cards; +import mage.constants.Zone; import mage.filter.FilterCard; import mage.game.Game; import mage.game.events.GameEvent; @@ -122,10 +122,7 @@ public class TargetCardInYourGraveyard extends TargetCard { */ @Override public boolean canChoose(UUID sourceControllerId, Game game) { - if (game.getPlayer(sourceControllerId).getGraveyard().count(filter, game) >= this.minNumberOfTargets) { - return true; - } - return false; + return game.getPlayer(sourceControllerId).getGraveyard().count(filter, game) >= this.minNumberOfTargets; } @Override From 4302186032cb5c71f016583e90228d89860e4961 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Fri, 15 Jul 2016 14:47:20 +0200 Subject: [PATCH 2/4] * Devils' Playground - Fixed name spelling bug. --- .../src/mage/sets/shadowsoverinnistrad/DevilsPlayground.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DevilsPlayground.java b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DevilsPlayground.java index 6f5bee35e3..6c04fd9812 100644 --- a/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DevilsPlayground.java +++ b/Mage.Sets/src/mage/sets/shadowsoverinnistrad/DevilsPlayground.java @@ -42,7 +42,7 @@ import mage.game.permanent.token.DevilToken; public class DevilsPlayground extends CardImpl { public DevilsPlayground(UUID ownerId) { - super(ownerId, 151, "Devil's Playground", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{4}{R}{R}"); + super(ownerId, 151, "Devils' Playground", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{4}{R}{R}"); this.expansionSetCode = "SOI"; // Put four 1/1 red Devil creature tokens onto the battlefield. They have "When this creature dies, it deals 1 damage to target creature or player." From e5117a967d8f5674fc7c9331cdb482973eaad92f Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Fri, 15 Jul 2016 18:14:38 +0200 Subject: [PATCH 3/4] * Mirrorwing Dragon - Fixed wrong target handling. --- Mage.Sets/src/mage/sets/eldritchmoon/MirrorwingDragon.java | 5 +++++ .../effects/common/CopySpellForEachItCouldTargetEffect.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/MirrorwingDragon.java b/Mage.Sets/src/mage/sets/eldritchmoon/MirrorwingDragon.java index b8e02388b7..7042247e82 100644 --- a/Mage.Sets/src/mage/sets/eldritchmoon/MirrorwingDragon.java +++ b/Mage.Sets/src/mage/sets/eldritchmoon/MirrorwingDragon.java @@ -108,7 +108,9 @@ class MirrorwingDragonCopyTriggeredAbility extends TriggeredAbilityImpl { private boolean checkSpell(Spell spell, Game game) { if (spell != null && (spell.getCardType().contains(CardType.INSTANT) || spell.getCardType().contains(CardType.SORCERY))) { + boolean noTargets = true; for (TargetAddress addr : TargetAddress.walk(spell)) { + noTargets = false; Target targetInstance = addr.getTarget(spell); for (UUID target : targetInstance.getTargets()) { Permanent permanent = game.getPermanent(target); @@ -117,6 +119,9 @@ class MirrorwingDragonCopyTriggeredAbility extends TriggeredAbilityImpl { } } } + if (noTargets) { + return false; + } getEffects().get(0).setValue("triggeringSpell", spell); return true; } diff --git a/Mage/src/main/java/mage/abilities/effects/common/CopySpellForEachItCouldTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CopySpellForEachItCouldTargetEffect.java index 543a407086..f72cb9d8bd 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CopySpellForEachItCouldTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CopySpellForEachItCouldTargetEffect.java @@ -122,7 +122,7 @@ public abstract class CopySpellForEachItCouldTargetEffect ex copy = spell.copySpell(source.getControllerId()); try { modifyCopy(copy, (T) obj, game, source); - if (!filter.match((T) obj, game)) { + if (!filter.match((T) obj, source.getSourceId(), actingPlayer.getId(), game)) { continue; } } catch (ClassCastException e) { From 09cc97dd85f51f069ac6d3b8a5e9040618a0647b Mon Sep 17 00:00:00 2001 From: spjspj Date: Sat, 16 Jul 2016 03:11:06 +1000 Subject: [PATCH 4/4] spjspj - Fix copy's owner for Mirrorwing Dragon (EMN) --- .../src/mage/sets/eldritchmoon/MirrorwingDragon.java | 11 +++++++++++ .../common/CopySpellForEachItCouldTargetEffect.java | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/MirrorwingDragon.java b/Mage.Sets/src/mage/sets/eldritchmoon/MirrorwingDragon.java index 7042247e82..5647c1e18b 100644 --- a/Mage.Sets/src/mage/sets/eldritchmoon/MirrorwingDragon.java +++ b/Mage.Sets/src/mage/sets/eldritchmoon/MirrorwingDragon.java @@ -172,6 +172,17 @@ class MirrorwingDragonCopySpellEffect extends CopySpellForEachItCouldTargetEffec @Override protected void modifyCopy(Spell copy, Game game, Ability source) { + Spell spell = getSpell(game, source); + copy.setControllerId(spell.getControllerId()); + } + + @Override + protected boolean okUUIDToCopyFor(UUID potentialTarget, Game game, Ability source, Spell spell) { + Permanent permanent = game.getPermanent(potentialTarget); + if (permanent == null || !permanent.getControllerId().equals(spell.getControllerId())) { + return false; + } + return true; } @Override diff --git a/Mage/src/main/java/mage/abilities/effects/common/CopySpellForEachItCouldTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CopySpellForEachItCouldTargetEffect.java index f72cb9d8bd..2e5c0cd6d4 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CopySpellForEachItCouldTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CopySpellForEachItCouldTargetEffect.java @@ -82,6 +82,10 @@ public abstract class CopySpellForEachItCouldTargetEffect ex modifyCopy(copy, game, source); } + protected boolean okUUIDToCopyFor(UUID potentialTarget, Game game, Ability source, Spell spell) { + return true; + } + @Override public boolean apply(Game game, Ability source) { Player actingPlayer = getPlayer(game, source); @@ -146,6 +150,7 @@ public abstract class CopySpellForEachItCouldTargetEffect ex } } + legal &= okUUIDToCopyFor(objId, game, source, spell); if (legal) { for (TargetAddress addr : targetsToBeChanged) { Target targetInstance = addr.getTarget(copy);