From 9b82be530d454c2e39ed97a22453db602fb68646 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Wed, 19 Mar 2014 08:29:17 +0100 Subject: [PATCH] * Thoughtseize - Fixed that game lock could happen if target player had no non land cards on hand. --- .../src/mage/sets/alarareborn/Brainbite.java | 4 +- .../sets/avacynrestored/CorpseTraders.java | 4 +- .../betrayersofkamigawa/PsychicSpear.java | 58 +++------------- .../championsofkamigawa/HeWhoHungers.java | 4 +- .../src/mage/sets/lorwyn/Thoughtseize.java | 64 +++-------------- Mage.Sets/src/mage/sets/magic2010/Duress.java | 4 +- .../mage/sets/mercadianmasques/Unmask.java | 53 ++------------ .../src/mage/sets/newphyrexia/Despise.java | 4 +- .../src/mage/sets/ravnika/NightmareVoid.java | 51 ++------------ .../InquisitionOfKozilek.java | 57 +++------------ Mage.Sets/src/mage/sets/tenth/Distress.java | 69 +++---------------- .../src/mage/sets/urzaslegacy/Ostracize.java | 4 +- Mage.Sets/src/mage/sets/visions/Coercion.java | 4 +- ... => DiscardCardYouChooseTargetEffect.java} | 57 +++++++++++---- 14 files changed, 110 insertions(+), 327 deletions(-) rename Mage/src/mage/abilities/effects/common/discard/{DiscardCardYouChooseTargetOpponentEffect.java => DiscardCardYouChooseTargetEffect.java} (61%) diff --git a/Mage.Sets/src/mage/sets/alarareborn/Brainbite.java b/Mage.Sets/src/mage/sets/alarareborn/Brainbite.java index 44f9179972d..0ab81963497 100644 --- a/Mage.Sets/src/mage/sets/alarareborn/Brainbite.java +++ b/Mage.Sets/src/mage/sets/alarareborn/Brainbite.java @@ -29,7 +29,7 @@ package mage.sets.alarareborn; import java.util.UUID; import mage.abilities.effects.common.DrawCardControllerEffect; -import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetOpponentEffect; +import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; @@ -49,7 +49,7 @@ public class Brainbite extends CardImpl { this.color.setBlack(true); // Target opponent reveals his or her hand. You choose a card from it. That player discards that card. - this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetOpponentEffect()); + this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetEffect()); // Draw a card. this.getSpellAbility().addEffect(new DrawCardControllerEffect(1)); this.getSpellAbility().addTarget(new TargetOpponent()); diff --git a/Mage.Sets/src/mage/sets/avacynrestored/CorpseTraders.java b/Mage.Sets/src/mage/sets/avacynrestored/CorpseTraders.java index a3409a314bf..7084f637834 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/CorpseTraders.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/CorpseTraders.java @@ -34,7 +34,7 @@ import mage.abilities.Ability; import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetOpponentEffect; +import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; import mage.cards.CardImpl; import mage.constants.Zone; import mage.target.common.TargetControlledCreaturePermanent; @@ -58,7 +58,7 @@ public class CorpseTraders extends CardImpl { this.toughness = new MageInt(3); // {2}{B}, Sacrifice a creature: Target opponent reveals his or her hand. You choose a card from it. That player discards that card. Activate this ability only any time you could cast a sorcery. - Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new DiscardCardYouChooseTargetOpponentEffect(), new ManaCostsImpl("{2}{B}")); + Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new DiscardCardYouChooseTargetEffect(), new ManaCostsImpl("{2}{B}")); ability.addTarget(new TargetOpponent(true)); ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent())); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/PsychicSpear.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/PsychicSpear.java index 32c62a6fc80..cc52e9fad1e 100644 --- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/PsychicSpear.java +++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/PsychicSpear.java @@ -33,9 +33,11 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.Outcome; +import mage.constants.TargetController; import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.predicate.Predicates; @@ -51,6 +53,12 @@ import mage.target.TargetPlayer; */ public class PsychicSpear extends CardImpl { + private static final FilterCard filter = new FilterCard("a Spirit or Arcane card to discard"); + + static { + filter.add(Predicates.or(new SubtypePredicate("Spirit"),new SubtypePredicate("Arcane"))); + } + public PsychicSpear(UUID ownerId) { super(ownerId, 78, "Psychic Spear", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{B}"); this.expansionSetCode = "BOK"; @@ -58,8 +66,8 @@ public class PsychicSpear extends CardImpl { this.color.setBlack(true); // Target player reveals his or her hand. You choose a Spirit or Arcane card from it. That player discards that card. - this.getSpellAbility().addTarget(new TargetPlayer()); - this.getSpellAbility().addEffect(new PsychicSpearEffect()); + this.getSpellAbility().addTarget(new TargetPlayer(true)); + this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetEffect(filter, TargetController.ANY)); } public PsychicSpear(final PsychicSpear card) { @@ -71,49 +79,3 @@ public class PsychicSpear extends CardImpl { return new PsychicSpear(this); } } - -class PsychicSpearEffect extends OneShotEffect { - - private static final FilterCard filter = new FilterCard("a Spirit or Arcane card to discard"); - - static { - filter.add(Predicates.or(new SubtypePredicate("Spirit"),new SubtypePredicate("Arcane"))); - } - - public PsychicSpearEffect() { - super(Outcome.Discard); - staticText = "Target player reveals his or her hand. You choose a Spirit or Arcane card from it. That player discards that card"; - } - - public PsychicSpearEffect(final PsychicSpearEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getFirstTarget()); - if (player != null) { - player.revealCards("Psychic Spear", player.getHand(), game); - Player you = game.getPlayer(source.getControllerId()); - if (you != null) { - TargetCard target = new TargetCard(Zone.PICK, filter); - target.setRequired(true); - if (you.choose(Outcome.Benefit, player.getHand(), target, game)) { - Card card = player.getHand().get(target.getFirstTarget(), game); - if (card != null) { - return player.discard(card, source, game); - } - } - } - return true; - } - return false; - } - - @Override - public PsychicSpearEffect copy() { - return new PsychicSpearEffect(this); - } - -} - diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/HeWhoHungers.java b/Mage.Sets/src/mage/sets/championsofkamigawa/HeWhoHungers.java index 5bc1a65a4bd..730f3d26363 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/HeWhoHungers.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/HeWhoHungers.java @@ -41,7 +41,7 @@ import mage.abilities.Ability; import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetOpponentEffect; +import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.SoulshiftAbility; import mage.cards.CardImpl; @@ -77,7 +77,7 @@ public class HeWhoHungers extends CardImpl { /* {1}, Sacrifice a Spirit: Target opponent reveals his or her hand. You choose a card from it. * That player discards that card. Activate this ability only any time you could cast a sorcery. */ - Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new DiscardCardYouChooseTargetOpponentEffect(), new ManaCostsImpl("{1}")); + Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new DiscardCardYouChooseTargetEffect(), new ManaCostsImpl("{1}")); ability.addTarget(new TargetOpponent(true)); ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter))); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/sets/lorwyn/Thoughtseize.java b/Mage.Sets/src/mage/sets/lorwyn/Thoughtseize.java index 9df72d0ce7c..5dd9afe5b04 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/Thoughtseize.java +++ b/Mage.Sets/src/mage/sets/lorwyn/Thoughtseize.java @@ -28,21 +28,15 @@ package mage.sets.lorwyn; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Rarity; -import mage.constants.Zone; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.LoseLifeSourceEffect; -import mage.cards.Card; +import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; import mage.filter.FilterCard; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; -import mage.game.Game; -import mage.players.Player; -import mage.target.TargetCard; import mage.target.TargetPlayer; /** @@ -51,6 +45,12 @@ import mage.target.TargetPlayer; */ public class Thoughtseize extends CardImpl { + private static final FilterCard filter = new FilterCard("nonland card"); + + static { + filter.add(Predicates.not(new CardTypePredicate(CardType.LAND))); + } + public Thoughtseize(UUID ownerId) { super(ownerId, 145, "Thoughtseize", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{B}"); this.expansionSetCode = "LRW"; @@ -59,7 +59,7 @@ public class Thoughtseize extends CardImpl { // Target player reveals his or her hand. You choose a nonland card from it. That player discards that card. You lose 2 life. this.getSpellAbility().addTarget(new TargetPlayer(true)); - this.getSpellAbility().addEffect(new ThoughtseizeEffect()); + this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetEffect(filter, TargetController.ANY)); this.getSpellAbility().addEffect(new LoseLifeSourceEffect(2)); } @@ -73,45 +73,3 @@ public class Thoughtseize extends CardImpl { } } -class ThoughtseizeEffect extends OneShotEffect { - - private static final FilterCard filter = new FilterCard("nonland card"); - - static { - filter.add(Predicates.not(new CardTypePredicate(CardType.LAND))); - } - - public ThoughtseizeEffect() { - super(Outcome.Discard); - staticText = "Target player reveals his or her hand. You choose a nonland card from it. That player discards that card"; - } - - public ThoughtseizeEffect(final ThoughtseizeEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getFirstTarget()); - if (player != null) { - player.revealCards("Thoughtseize", player.getHand(), game); - Player you = game.getPlayer(source.getControllerId()); - if (you != null) { - TargetCard target = new TargetCard(Zone.HAND, filter); - target.setRequired(true); - if (target.canChoose(source.getControllerId(), player.getId(), game) && you.chooseTarget(outcome, player.getHand(), target, source, game)) { - Card card = player.getHand().get(target.getFirstTarget(), game); - if (card != null) { - return player.discard(card, source, game); - } - } - } - } - return false; - } - - @Override - public ThoughtseizeEffect copy() { - return new ThoughtseizeEffect(this); - } -} diff --git a/Mage.Sets/src/mage/sets/magic2010/Duress.java b/Mage.Sets/src/mage/sets/magic2010/Duress.java index 97ad353a8ff..4f279a585ec 100644 --- a/Mage.Sets/src/mage/sets/magic2010/Duress.java +++ b/Mage.Sets/src/mage/sets/magic2010/Duress.java @@ -29,7 +29,7 @@ package mage.sets.magic2010; import java.util.UUID; -import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetOpponentEffect; +import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; @@ -57,7 +57,7 @@ public class Duress extends CardImpl { // Target opponent reveals his or her hand. You choose a noncreature, nonland card from it. That player discards that card. this.getSpellAbility().addTarget(new TargetOpponent()); - this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetOpponentEffect(filter)); + this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetEffect(filter)); } public Duress(final Duress card) { diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/Unmask.java b/Mage.Sets/src/mage/sets/mercadianmasques/Unmask.java index a4f5f19a365..4ab8bd91aa7 100644 --- a/Mage.Sets/src/mage/sets/mercadianmasques/Unmask.java +++ b/Mage.Sets/src/mage/sets/mercadianmasques/Unmask.java @@ -33,11 +33,13 @@ import mage.abilities.Ability; import mage.abilities.costs.AlternativeCostSourceAbility; import mage.abilities.costs.common.ExileFromHandCost; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; +import mage.constants.TargetController; import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.predicate.Predicates; @@ -56,8 +58,10 @@ import mage.target.common.TargetCardInHand; public class Unmask extends CardImpl { private static final FilterCard filter = new FilterCard("a black card from your hand"); - + private static final FilterCard filterNonLand = new FilterCard("nonland card"); + static { + filterNonLand.add(Predicates.not(new CardTypePredicate(CardType.LAND))); filter.add(new ColorPredicate(ObjectColor.BLACK)); } @@ -72,7 +76,7 @@ public class Unmask extends CardImpl { // Target player reveals his or her hand. You choose a nonland card from it. That player discards that card. this.getSpellAbility().addTarget(new TargetPlayer(true)); - this.getSpellAbility().addEffect(new UnmaskEffect()); + this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetEffect(filterNonLand, TargetController.ANY)); } public Unmask(final Unmask card) { @@ -84,48 +88,3 @@ public class Unmask extends CardImpl { return new Unmask(this); } } - -class UnmaskEffect extends OneShotEffect { - - private static final FilterCard filter = new FilterCard("nonland card"); - - static { - filter.add(Predicates.not(new CardTypePredicate(CardType.LAND))); - } - - public UnmaskEffect() { - super(Outcome.Discard); - staticText = "Target player reveals his or her hand. You choose a nonland card from it. That player discards that card"; - } - - public UnmaskEffect(final UnmaskEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getFirstTarget()); - if (player != null) { - player.revealCards("Unmask", player.getHand(), game); - Player you = game.getPlayer(source.getControllerId()); - if (you != null) { - TargetCard target = new TargetCard(Zone.PICK, filter); - target.setRequired(true); - if (you.choose(Outcome.Benefit, player.getHand(), target, game)) { - Card card = player.getHand().get(target.getFirstTarget(), game); - if (card != null) { - return player.discard(card, source, game); - } - } - } - return true; - } - return false; - } - - @Override - public UnmaskEffect copy() { - return new UnmaskEffect(this); - } - -} diff --git a/Mage.Sets/src/mage/sets/newphyrexia/Despise.java b/Mage.Sets/src/mage/sets/newphyrexia/Despise.java index a52a255f0fb..c021bcc6e7f 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/Despise.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/Despise.java @@ -33,7 +33,7 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetOpponentEffect; +import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.Outcome; @@ -67,7 +67,7 @@ public class Despise extends CardImpl { // Target opponent reveals his or her hand. You choose a creature or planeswalker card from it. That player discards that card. this.getSpellAbility().addTarget(new TargetOpponent()); - this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetOpponentEffect(filter)); + this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetEffect(filter)); } public Despise(final Despise card) { diff --git a/Mage.Sets/src/mage/sets/ravnika/NightmareVoid.java b/Mage.Sets/src/mage/sets/ravnika/NightmareVoid.java index 477805cbcc3..4f63478250f 100644 --- a/Mage.Sets/src/mage/sets/ravnika/NightmareVoid.java +++ b/Mage.Sets/src/mage/sets/ravnika/NightmareVoid.java @@ -29,18 +29,11 @@ package mage.sets.ravnika; import java.util.UUID; import mage.constants.CardType; -import mage.constants.Outcome; import mage.constants.Rarity; -import mage.constants.Zone; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; import mage.abilities.keyword.DredgeAbility; -import mage.cards.Card; import mage.cards.CardImpl; -import mage.filter.FilterCard; -import mage.game.Game; -import mage.players.Player; -import mage.target.TargetCard; +import mage.constants.TargetController; import mage.target.TargetPlayer; /** @@ -56,8 +49,8 @@ public class NightmareVoid extends CardImpl { this.color.setBlack(true); // Target player reveals his or her hand. You choose a card from it. That player discards that card. - this.getSpellAbility().addTarget(new TargetPlayer()); - this.getSpellAbility().addEffect(new NightmareVoidEffect()); + this.getSpellAbility().addTarget(new TargetPlayer(true)); + this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetEffect(TargetController.ANY)); // Dredge 2 this.addAbility(new DredgeAbility(2)); } @@ -71,39 +64,3 @@ public class NightmareVoid extends CardImpl { return new NightmareVoid(this); } } - -class NightmareVoidEffect extends OneShotEffect { - - public NightmareVoidEffect() { - super(Outcome.Discard); - staticText = "Target player reveals his or her hand. You choose a card from it. That player discards that card"; - } - - public NightmareVoidEffect(final NightmareVoidEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getFirstTarget()); - if (player != null) { - player.revealCards("Nightmare Void", player.getHand(), game); - - Player you = game.getPlayer(source.getControllerId()); - TargetCard target = new TargetCard(Zone.PICK, new FilterCard()); - target.setRequired(true); - if (you != null && you.choose(Outcome.Benefit, player.getHand(), target, game)) { - Card card = player.getHand().get(target.getFirstTarget(), game); - if (card != null) { - return player.discard(card, source, game); - } - } - } - return false; - } - - @Override - public NightmareVoidEffect copy() { - return new NightmareVoidEffect(this); - } -} diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/InquisitionOfKozilek.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/InquisitionOfKozilek.java index 65cab8b622d..f978ab35e55 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/InquisitionOfKozilek.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/InquisitionOfKozilek.java @@ -35,8 +35,10 @@ import mage.constants.Rarity; import mage.constants.Zone; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; import mage.cards.Card; import mage.cards.CardImpl; +import mage.constants.TargetController; import mage.filter.Filter; import mage.filter.FilterCard; import mage.filter.predicate.Predicates; @@ -53,12 +55,19 @@ import mage.target.TargetPlayer; */ public class InquisitionOfKozilek extends CardImpl { + private static final FilterCard filter = new FilterCard("nonland card with converted mana cost 3 or less"); + + static { + filter.add(Predicates.not(new CardTypePredicate(CardType.LAND))); + filter.add(new ConvertedManaCostPredicate(Filter.ComparisonType.LessThan, 4)); + } + public InquisitionOfKozilek(UUID ownerId){ super(ownerId, 115, "Inquisition of Kozilek", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY},"{B}"); this.expansionSetCode = "ROE"; this.color.setBlack(true); - this.getSpellAbility().addTarget(new TargetPlayer()); - this.getSpellAbility().addEffect(new InquisitionOfKozilekEffect()); + this.getSpellAbility().addTarget(new TargetPlayer(true)); + this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetEffect(filter, TargetController.ANY)); } public InquisitionOfKozilek(final InquisitionOfKozilek card) { @@ -70,47 +79,3 @@ public class InquisitionOfKozilek extends CardImpl { return new InquisitionOfKozilek(this); } } - -class InquisitionOfKozilekEffect extends OneShotEffect { - - private static final FilterCard filter = new FilterCard("nonland card with converted mana cost 3 or less"); - - static { - filter.add(Predicates.not(new CardTypePredicate(CardType.LAND))); - filter.add(new ConvertedManaCostPredicate(Filter.ComparisonType.LessThan, 4)); - } - - public InquisitionOfKozilekEffect() { - super(Outcome.Discard); - staticText = "Target player reveals his or her hand. You choose a nonland card from it with converted mana cost 3 or less. That player discards that card"; - } - - public InquisitionOfKozilekEffect(final InquisitionOfKozilekEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getFirstTarget()); - if (player != null) { - player.revealCards("Inquisition of Kozilek", player.getHand(), game); - Player you = game.getPlayer(source.getControllerId()); - if (you != null) { - TargetCard target = new TargetCard(Zone.PICK, filter); - if (you.choose(Outcome.Benefit, player.getHand(), target, game)) { - Card card = player.getHand().get(target.getFirstTarget(), game); - if (card != null) { - return player.discard(card, source, game); - } - } - } - } - return false; - } - - @Override - public InquisitionOfKozilekEffect copy() { - return new InquisitionOfKozilekEffect(this); - } - -} diff --git a/Mage.Sets/src/mage/sets/tenth/Distress.java b/Mage.Sets/src/mage/sets/tenth/Distress.java index 9db2289cb1b..cd485d1138c 100644 --- a/Mage.Sets/src/mage/sets/tenth/Distress.java +++ b/Mage.Sets/src/mage/sets/tenth/Distress.java @@ -27,29 +27,28 @@ */ package mage.sets.tenth; +import java.util.UUID; +import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; +import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.constants.Outcome; -import mage.constants.Zone; +import mage.constants.TargetController; import mage.filter.FilterCard; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; -import mage.game.Game; -import mage.players.Player; -import mage.target.TargetCard; import mage.target.TargetPlayer; -import java.util.UUID; - /** * @author nantuko */ public class Distress extends CardImpl { + private static final FilterCard filter = new FilterCard("nonland card"); + + static { + filter.add(Predicates.not(new CardTypePredicate(CardType.LAND))); + } + public Distress(UUID ownerId) { super(ownerId, 136, "Distress", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{B}{B}"); this.expansionSetCode = "10E"; @@ -58,7 +57,7 @@ public class Distress extends CardImpl { // Target player reveals his or her hand. You choose a nonland card from it. That player discards that card. this.getSpellAbility().addTarget(new TargetPlayer(true)); - this.getSpellAbility().addEffect(new DistressEffect()); + this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetEffect(filter, TargetController.ANY)); } public Distress(final Distress card) { @@ -70,49 +69,3 @@ public class Distress extends CardImpl { return new Distress(this); } } - -class DistressEffect extends OneShotEffect { - - private static final FilterCard filter = new FilterCard("nonland card"); - - static { - filter.add(Predicates.not(new CardTypePredicate(CardType.LAND))); - } - - public DistressEffect() { - super(Outcome.Discard); - staticText = "Target player reveals his or her hand. You choose a nonland card from it. That player discards that card"; - } - - public DistressEffect(final DistressEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getFirstTarget()); - if (player != null) { - player.revealCards("Distress", player.getHand(), game); - Player you = game.getPlayer(source.getControllerId()); - if (you != null) { - TargetCard target = new TargetCard(Zone.PICK, filter); - target.setRequired(true); - if (you.choose(Outcome.Benefit, player.getHand(), target, game)) { - Card card = player.getHand().get(target.getFirstTarget(), game); - if (card != null) { - return player.discard(card, source, game); - } - } - } - return true; - } - return false; - } - - @Override - public DistressEffect copy() { - return new DistressEffect(this); - } - -} - diff --git a/Mage.Sets/src/mage/sets/urzaslegacy/Ostracize.java b/Mage.Sets/src/mage/sets/urzaslegacy/Ostracize.java index e69d0513602..15782701662 100644 --- a/Mage.Sets/src/mage/sets/urzaslegacy/Ostracize.java +++ b/Mage.Sets/src/mage/sets/urzaslegacy/Ostracize.java @@ -28,7 +28,7 @@ package mage.sets.urzaslegacy; import java.util.UUID; -import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetOpponentEffect; +import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; @@ -49,7 +49,7 @@ public class Ostracize extends CardImpl { // Target opponent reveals his or her hand. You choose a creature card from it. That player discards that card. this.getSpellAbility().addTarget(new TargetOpponent()); - this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetOpponentEffect(new FilterCreatureCard("a creature card"))); + this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetEffect(new FilterCreatureCard("a creature card"))); } public Ostracize(final Ostracize card) { diff --git a/Mage.Sets/src/mage/sets/visions/Coercion.java b/Mage.Sets/src/mage/sets/visions/Coercion.java index 12763d89f14..c43d2af8564 100644 --- a/Mage.Sets/src/mage/sets/visions/Coercion.java +++ b/Mage.Sets/src/mage/sets/visions/Coercion.java @@ -28,7 +28,7 @@ package mage.sets.visions; import java.util.UUID; -import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetOpponentEffect; +import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; @@ -48,7 +48,7 @@ public class Coercion extends CardImpl { // Target opponent reveals his or her hand. You choose a card from it. That player discards that card. this.getSpellAbility().addTarget(new TargetOpponent()); - this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetOpponentEffect()); + this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetEffect()); } public Coercion(final Coercion card) { diff --git a/Mage/src/mage/abilities/effects/common/discard/DiscardCardYouChooseTargetOpponentEffect.java b/Mage/src/mage/abilities/effects/common/discard/DiscardCardYouChooseTargetEffect.java similarity index 61% rename from Mage/src/mage/abilities/effects/common/discard/DiscardCardYouChooseTargetOpponentEffect.java rename to Mage/src/mage/abilities/effects/common/discard/DiscardCardYouChooseTargetEffect.java index 9e4c1bbd066..1619e1eef88 100644 --- a/Mage/src/mage/abilities/effects/common/discard/DiscardCardYouChooseTargetOpponentEffect.java +++ b/Mage/src/mage/abilities/effects/common/discard/DiscardCardYouChooseTargetEffect.java @@ -31,6 +31,7 @@ import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; import mage.constants.Outcome; +import mage.constants.TargetController; import mage.constants.Zone; import mage.filter.FilterCard; import mage.game.Game; @@ -41,33 +42,44 @@ import mage.target.TargetCard; * * @author noxx */ -public class DiscardCardYouChooseTargetOpponentEffect extends OneShotEffect { +public class DiscardCardYouChooseTargetEffect extends OneShotEffect { private FilterCard filter; + private TargetController targetController; - public DiscardCardYouChooseTargetOpponentEffect() { + public DiscardCardYouChooseTargetEffect() { this(new FilterCard("a card")); } - public DiscardCardYouChooseTargetOpponentEffect(FilterCard filter) { - super(Outcome.Discard); - staticText = new StringBuilder("Target opponent reveals his or her hand. You choose ") - .append(filter.getMessage()).append(" from it. That player discards that card").toString(); - this.filter = filter; + public DiscardCardYouChooseTargetEffect(TargetController targetController) { + this(new FilterCard("a card"), targetController); } - public DiscardCardYouChooseTargetOpponentEffect(final DiscardCardYouChooseTargetOpponentEffect effect) { + public DiscardCardYouChooseTargetEffect(FilterCard filter) { + this(filter, TargetController.OPPONENT); + } + + public DiscardCardYouChooseTargetEffect(FilterCard filter, TargetController targetController) { + super(Outcome.Discard); + this.targetController = targetController; + this.filter = filter; + staticText = this.setText(); + } + + public DiscardCardYouChooseTargetEffect(final DiscardCardYouChooseTargetEffect effect) { super(effect); this.filter = effect.filter; + this.targetController = effect.targetController; } @Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getFirstTarget()); - if (player != null) { - player.revealCards("Discard", player.getHand(), game); - Player you = game.getPlayer(source.getControllerId()); - if (you != null) { + Player you = game.getPlayer(source.getControllerId()); + Card sourceCard = game.getCard(source.getSourceId()); + if (player != null && you != null) { + player.revealCards(sourceCard != null ? sourceCard.getName() :"Discard", player.getHand(), game); + if (player.getHand().count(filter, source.getSourceId(), source.getControllerId(), game) > 0) { TargetCard target = new TargetCard(Zone.PICK, filter); target.setRequired(true); if (you.choose(Outcome.Benefit, player.getHand(), target, game)) { @@ -77,13 +89,30 @@ public class DiscardCardYouChooseTargetOpponentEffect extends OneShotEffect