diff --git a/Mage.Sets/src/mage/cards/c/CarrionBeetles.java b/Mage.Sets/src/mage/cards/c/CarrionBeetles.java index beb63b63669..a8eb3bd5703 100644 --- a/Mage.Sets/src/mage/cards/c/CarrionBeetles.java +++ b/Mage.Sets/src/mage/cards/c/CarrionBeetles.java @@ -1,40 +1,36 @@ - package mage.cards.c; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; +import mage.abilities.effects.common.ExileTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.Outcome; import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.game.Game; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInASingleGraveyard; +import java.util.UUID; + /** - * * @author fireshoes */ public final class CarrionBeetles extends CardImpl { public CarrionBeetles(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}"); this.subtype.add(SubType.INSECT); this.power = new MageInt(1); this.toughness = new MageInt(1); - // {2}{B}, {tap}: Exile up to three target cards from a single graveyard. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CarrionBeetlesExileEffect(), new ManaCostsImpl("{2}{B}")); + // {2}{B}, {T}: Exile up to three target cards from a single graveyard. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new ManaCostsImpl("{2}{B}")); ability.addCost(new TapSourceCost()); - ability.addTarget(new TargetCardInASingleGraveyard(0, 3, new FilterCard("up to three target cards from a single graveyard"))); + ability.addTarget(new TargetCardInASingleGraveyard(0, 3, StaticFilters.FILTER_CARD_CARDS)); this.addAbility(ability); } @@ -47,31 +43,3 @@ public final class CarrionBeetles extends CardImpl { return new CarrionBeetles(this); } } - -class CarrionBeetlesExileEffect extends OneShotEffect { - - public CarrionBeetlesExileEffect() { - super(Outcome.Exile); - this.staticText = "Exile up to three target cards from a single graveyard"; - } - - public CarrionBeetlesExileEffect(final CarrionBeetlesExileEffect effect) { - super(effect); - } - - @Override - public CarrionBeetlesExileEffect copy() { - return new CarrionBeetlesExileEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - for (UUID targetID : source.getTargets().get(0).getTargets()) { - Card card = game.getCard(targetID); - if (card != null) { - card.moveToExile(null, "", source.getSourceId(), game); - } - } - return true; - } -} diff --git a/Mage.Sets/src/mage/cards/d/Decompose.java b/Mage.Sets/src/mage/cards/d/Decompose.java index c3cf1b5d0cb..4989f1075ae 100644 --- a/Mage.Sets/src/mage/cards/d/Decompose.java +++ b/Mage.Sets/src/mage/cards/d/Decompose.java @@ -1,26 +1,25 @@ - package mage.cards.d; -import java.util.UUID; import mage.abilities.effects.common.ExileTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInASingleGraveyard; +import java.util.UUID; + /** - * * @author ilcartographer */ public final class Decompose extends CardImpl { public Decompose(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}"); // Exile up to three target cards from a single graveyard. this.getSpellAbility().addEffect(new ExileTargetEffect()); - this.getSpellAbility().addTarget(new TargetCardInASingleGraveyard(0, 3, new FilterCard("cards from a single graveyard"))); + this.getSpellAbility().addTarget(new TargetCardInASingleGraveyard(0, 3, StaticFilters.FILTER_CARD_CARDS)); } public Decompose(final Decompose card) { diff --git a/Mage.Sets/src/mage/cards/f/FamishedGhoul.java b/Mage.Sets/src/mage/cards/f/FamishedGhoul.java index 984bafd6106..83277c20645 100644 --- a/Mage.Sets/src/mage/cards/f/FamishedGhoul.java +++ b/Mage.Sets/src/mage/cards/f/FamishedGhoul.java @@ -1,7 +1,5 @@ - package mage.cards.f; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -13,17 +11,18 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.FilterCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInASingleGraveyard; +import java.util.UUID; + /** - * * @author cbt33 */ public final class FamishedGhoul extends CardImpl { public FamishedGhoul(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); this.subtype.add(SubType.ZOMBIE); this.power = new MageInt(3); @@ -32,7 +31,7 @@ public final class FamishedGhoul extends CardImpl { // {1}{B}, Sacrifice Famished Ghoul: Exile up to two target cards from a single graveyard. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new ManaCostsImpl("{1}{B}")); ability.addCost(new SacrificeSourceCost()); - ability.addTarget(new TargetCardInASingleGraveyard(0, 2, new FilterCard("cards from a single graveyard"))); + ability.addTarget(new TargetCardInASingleGraveyard(0, 2, StaticFilters.FILTER_CARD_CARDS)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/Gravegouger.java b/Mage.Sets/src/mage/cards/g/Gravegouger.java index 57f99373d06..ea67ffe5193 100644 --- a/Mage.Sets/src/mage/cards/g/Gravegouger.java +++ b/Mage.Sets/src/mage/cards/g/Gravegouger.java @@ -4,7 +4,6 @@ import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.LeavesBattlefieldTriggeredAbility; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.ExileTargetForSourceEffect; import mage.abilities.effects.common.ReturnFromExileForSourceEffect; import mage.cards.CardImpl; @@ -12,7 +11,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.FilterCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInASingleGraveyard; import java.util.UUID; @@ -30,9 +29,8 @@ public final class Gravegouger extends CardImpl { this.toughness = new MageInt(2); // When Gravegouger enters the battlefield, exile up to two target cards from a single graveyard. - Effect effect = new ExileTargetForSourceEffect(); - Ability ability = new EntersBattlefieldTriggeredAbility(effect, false); - ability.addTarget(new TargetCardInASingleGraveyard(0, 2, new FilterCard("cards from a single graveyard"))); + Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetForSourceEffect(), false); + ability.addTarget(new TargetCardInASingleGraveyard(0, 2, StaticFilters.FILTER_CARD_CARDS)); this.addAbility(ability); // When Gravegouger leaves the battlefield, return the exiled cards to their owner's graveyard. diff --git a/Mage.Sets/src/mage/cards/m/MartyrOfBones.java b/Mage.Sets/src/mage/cards/m/MartyrOfBones.java index a90e986f1b8..dd47c908df9 100644 --- a/Mage.Sets/src/mage/cards/m/MartyrOfBones.java +++ b/Mage.Sets/src/mage/cards/m/MartyrOfBones.java @@ -1,4 +1,3 @@ - package mage.cards.m; import mage.MageInt; @@ -11,7 +10,6 @@ import mage.abilities.costs.VariableCostImpl; import mage.abilities.costs.common.RevealTargetFromHandCost; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.ExileTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -19,6 +17,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; import mage.filter.FilterCard; +import mage.filter.StaticFilters; import mage.filter.predicate.mageobject.ColorPredicate; import mage.game.Game; import mage.players.Player; @@ -41,13 +40,12 @@ public final class MartyrOfBones extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(1); - //TODO: Make ability properly copiable + // TODO: Make ability properly copiable // {1}, Reveal X black cards from your hand, Sacrifice Martyr of Bones: Exile up to X target cards from a single graveyard. - Effect effect = new ExileTargetEffect(null, null, Zone.GRAVEYARD); - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new GenericManaCost(1)); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new GenericManaCost(1)); ability.addCost(new RevealVariableBlackCardsFromHandCost()); ability.addCost(new SacrificeSourceCost()); - ability.addTarget(new TargetCardInASingleGraveyard(0, 1, new FilterCard("cards in a single graveyard"))); + ability.addTarget(new TargetCardInASingleGraveyard(0, 1, StaticFilters.FILTER_CARD_CARDS)); ability.setTargetAdjuster(MartyrOfBonesAdjuster.instance); this.addAbility(ability); } @@ -74,7 +72,7 @@ enum MartyrOfBonesAdjuster implements TargetAdjuster { } } ability.getTargets().clear(); - ability.addTarget(new TargetCardInASingleGraveyard(0, amount, new FilterCard())); + ability.addTarget(new TargetCardInASingleGraveyard(0, amount, StaticFilters.FILTER_CARD_CARDS)); } } diff --git a/Mage.Sets/src/mage/cards/n/NightSoil.java b/Mage.Sets/src/mage/cards/n/NightSoil.java index 7817ea9b166..4e72c20f7e3 100644 --- a/Mage.Sets/src/mage/cards/n/NightSoil.java +++ b/Mage.Sets/src/mage/cards/n/NightSoil.java @@ -1,7 +1,5 @@ - package mage.cards.n; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.ExileFromGraveCost; @@ -15,19 +13,19 @@ import mage.filter.common.FilterCreatureCard; import mage.game.permanent.token.SaprolingToken; import mage.target.common.TargetCardInASingleGraveyard; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class NightSoil extends CardImpl { public NightSoil(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{G}{G}"); - + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}{G}"); // {1}, Exile two creature cards from a single graveyard: Create a 1/1 green Saproling creature token. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SaprolingToken()), new GenericManaCost(1)); - ability.addCost(new ExileFromGraveCost(new TargetCardInASingleGraveyard(2,2, new FilterCreatureCard("two creature cards from a single graveyard")))); + ability.addCost(new ExileFromGraveCost(new TargetCardInASingleGraveyard(2, 2, new FilterCreatureCard("two creature cards")))); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/r/RagDealer.java b/Mage.Sets/src/mage/cards/r/RagDealer.java index a10c1d4138f..0f97076fede 100644 --- a/Mage.Sets/src/mage/cards/r/RagDealer.java +++ b/Mage.Sets/src/mage/cards/r/RagDealer.java @@ -1,7 +1,5 @@ - package mage.cards.r; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -13,11 +11,12 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.FilterCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInASingleGraveyard; +import java.util.UUID; + /** - * * @author LevelX, North */ public final class RagDealer extends CardImpl { @@ -33,7 +32,7 @@ public final class RagDealer extends CardImpl { // {2}{B}, {T}: Exile up to three target cards from a single graveyard. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new ManaCostsImpl("{2}{B}")); ability.addCost(new TapSourceCost()); - ability.addTarget(new TargetCardInASingleGraveyard(0, 3, new FilterCard("cards from a single graveyard"))); + ability.addTarget(new TargetCardInASingleGraveyard(0, 3, StaticFilters.FILTER_CARD_CARDS)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/r/RapidDecay.java b/Mage.Sets/src/mage/cards/r/RapidDecay.java index 459a1d05964..f83aeca414c 100644 --- a/Mage.Sets/src/mage/cards/r/RapidDecay.java +++ b/Mage.Sets/src/mage/cards/r/RapidDecay.java @@ -1,18 +1,17 @@ - package mage.cards.r; -import java.util.UUID; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.ExileTargetEffect; import mage.abilities.keyword.CyclingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInASingleGraveyard; +import java.util.UUID; + /** - * * @author fireshoes */ public final class RapidDecay extends CardImpl { @@ -22,7 +21,7 @@ public final class RapidDecay extends CardImpl { // Exile up to three target cards from a single graveyard. this.getSpellAbility().addEffect(new ExileTargetEffect()); - this.getSpellAbility().addTarget(new TargetCardInASingleGraveyard(0, 3, new FilterCard("cards from a single graveyard"))); + this.getSpellAbility().addTarget(new TargetCardInASingleGraveyard(0, 3, StaticFilters.FILTER_CARD_CARDS)); // Cycling {2} this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}"))); diff --git a/Mage.Sets/src/mage/cards/r/RatsFeast.java b/Mage.Sets/src/mage/cards/r/RatsFeast.java index 395650b520e..38bc8555ebc 100644 --- a/Mage.Sets/src/mage/cards/r/RatsFeast.java +++ b/Mage.Sets/src/mage/cards/r/RatsFeast.java @@ -22,7 +22,7 @@ public final class RatsFeast extends CardImpl { // Exile X target cards from a single graveyard. this.getSpellAbility().addEffect(new ExileTargetEffect( - "Exile X target cards from a single graveyard.", true + "Exile X target cards from a single graveyard", true )); this.getSpellAbility().setTargetAdjuster(RatsFeastAdjuster.instance); } @@ -44,6 +44,6 @@ enum RatsFeastAdjuster implements TargetAdjuster { public void adjustTargets(Ability ability, Game game) { int xValue = ability.getManaCostsToPay().getX(); ability.getTargets().clear(); - ability.addTarget(new TargetCardInASingleGraveyard(xValue, xValue, StaticFilters.FILTER_CARD)); + ability.addTarget(new TargetCardInASingleGraveyard(xValue, xValue, StaticFilters.FILTER_CARD_CARDS)); } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/s/ScarabFeast.java b/Mage.Sets/src/mage/cards/s/ScarabFeast.java index 8e8b1dfa6b8..6a3e02693ca 100644 --- a/Mage.Sets/src/mage/cards/s/ScarabFeast.java +++ b/Mage.Sets/src/mage/cards/s/ScarabFeast.java @@ -1,25 +1,26 @@ package mage.cards.s; -import java.util.UUID; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.ExileTargetEffect; import mage.abilities.keyword.CyclingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInASingleGraveyard; +import java.util.UUID; + /** * @author Stravant */ public final class ScarabFeast extends CardImpl { public ScarabFeast(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{B}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{B}"); // Exile up to three target cards from a single graveyard. getSpellAbility().addEffect(new ExileTargetEffect()); - getSpellAbility().addTarget(new TargetCardInASingleGraveyard(0, 3, new FilterCard("cards from a single graveyard"))); + getSpellAbility().addTarget(new TargetCardInASingleGraveyard(0, 3, StaticFilters.FILTER_CARD_CARDS)); // Cycling {B} addAbility(new CyclingAbility(new ManaCostsImpl("{B}"))); diff --git a/Mage.Sets/src/mage/cards/s/SereneRemembrance.java b/Mage.Sets/src/mage/cards/s/SereneRemembrance.java index 441fd9d807e..d674b47ff88 100644 --- a/Mage.Sets/src/mage/cards/s/SereneRemembrance.java +++ b/Mage.Sets/src/mage/cards/s/SereneRemembrance.java @@ -8,7 +8,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Zone; -import mage.filter.FilterCard; +import mage.filter.StaticFilters; import mage.game.Game; import mage.players.Player; import mage.target.common.TargetCardInASingleGraveyard; @@ -23,10 +23,9 @@ public final class SereneRemembrance extends CardImpl { public SereneRemembrance(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{G}"); - // Shuffle Serene Remembrance and up to three target cards from a single graveyard into their owners' libraries. this.getSpellAbility().addEffect(new SereneRemembranceEffect()); - this.getSpellAbility().addTarget(new TargetCardInASingleGraveyard(0, 3, new FilterCard("up to three target cards from a single graveyard"))); + this.getSpellAbility().addTarget(new TargetCardInASingleGraveyard(0, 3, StaticFilters.FILTER_CARD_CARDS)); } diff --git a/Mage.Sets/src/mage/cards/s/ShredMemory.java b/Mage.Sets/src/mage/cards/s/ShredMemory.java index b90c52d4312..d3005cd6300 100644 --- a/Mage.Sets/src/mage/cards/s/ShredMemory.java +++ b/Mage.Sets/src/mage/cards/s/ShredMemory.java @@ -1,27 +1,27 @@ - package mage.cards.s; -import java.util.UUID; import mage.abilities.effects.common.ExileTargetEffect; import mage.abilities.keyword.TransmuteAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInASingleGraveyard; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class ShredMemory extends CardImpl { public ShredMemory(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}"); // Exile up to four target cards from a single graveyard. this.getSpellAbility().addEffect(new ExileTargetEffect()); - this.getSpellAbility().addTarget(new TargetCardInASingleGraveyard(0, 4, new FilterCard("cards from a single graveyard"))); + this.getSpellAbility().addTarget(new TargetCardInASingleGraveyard(0, 4, StaticFilters.FILTER_CARD_CARDS)); + // Transmute {1}{B}{B} this.addAbility(new TransmuteAbility("{1}{B}{B}")); } diff --git a/Mage.Sets/src/mage/cards/s/SpellweaverHelix.java b/Mage.Sets/src/mage/cards/s/SpellweaverHelix.java index 25c5b0f25f3..cc3f0bbd386 100644 --- a/Mage.Sets/src/mage/cards/s/SpellweaverHelix.java +++ b/Mage.Sets/src/mage/cards/s/SpellweaverHelix.java @@ -1,12 +1,12 @@ package mage.cards.s; -import java.util.UUID; import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ExileTargetForSourceEffect; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -21,15 +21,15 @@ import mage.game.stack.Spell; import mage.players.Player; import mage.target.common.TargetCardInASingleGraveyard; import mage.target.targetpointer.FixedTarget; -import mage.util.CardUtil; + +import java.util.UUID; /** - * * @author emerald000 */ public final class SpellweaverHelix extends CardImpl { - private static final FilterCard filter = new FilterCard("sorcery cards from a single graveyard"); + private static final FilterCard filter = new FilterCard("sorcery cards"); static { filter.add(CardType.SORCERY.getPredicate()); @@ -39,7 +39,7 @@ public final class SpellweaverHelix extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); // Imprint - When Spellweaver Helix enters the battlefield, you may exile two target sorcery cards from a single graveyard. - Ability ability = new EntersBattlefieldTriggeredAbility(new SpellweaverHelixImprintEffect(), true, "Imprint — "); + Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetForSourceEffect(), true, "Imprint — "); ability.addTarget(new TargetCardInASingleGraveyard(2, 2, filter)); this.addAbility(ability); @@ -57,42 +57,6 @@ public final class SpellweaverHelix extends CardImpl { } } -class SpellweaverHelixImprintEffect extends OneShotEffect { - - SpellweaverHelixImprintEffect() { - super(Outcome.Exile); - this.staticText = "you may exile two target sorcery cards from a single graveyard"; - } - - SpellweaverHelixImprintEffect(final SpellweaverHelixImprintEffect effect) { - super(effect); - } - - @Override - public SpellweaverHelixImprintEffect copy() { - return new SpellweaverHelixImprintEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - Permanent sourcePermanent = game.getPermanent(source.getSourceId()); - for (UUID targetId : this.getTargetPointer().getTargets(game, source)) { - Card card = game.getCard(targetId); - if (card != null) { - controller.moveCardsToExile(card, source, game, true, CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()), source.getSourceObject(game).getIdName()); - if (sourcePermanent != null) { - sourcePermanent.imprint(targetId, game); - } - } - } - return true; - } - return false; - } -} - class SpellweaverHelixTriggeredAbility extends TriggeredAbilityImpl { SpellweaverHelixTriggeredAbility() { 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 0d1285a3f91..7978af7f734 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ExileTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ExileTargetEffect.java @@ -1,8 +1,5 @@ package mage.abilities.effects.common; -import java.util.LinkedHashSet; -import java.util.Set; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.Mode; @@ -20,13 +17,16 @@ import mage.target.targetpointer.FirstTargetPointer; import mage.target.targetpointer.SecondTargetPointer; import mage.util.CardUtil; +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.UUID; + /** - * * @author BetaSteward_at_googlemail.com */ public class ExileTargetEffect extends OneShotEffect { - private Zone onlyFromZone; + private final Zone onlyFromZone; private String exileZone = null; private UUID exileId = null; protected boolean multitargetHandling; @@ -42,6 +42,9 @@ public class ExileTargetEffect extends OneShotEffect { this.multitargetHandling = multitargetHandling; } + /** + * Exile cards to normal exile window (but it can exile to source's exile window after toSourceExileZone change) + */ public ExileTargetEffect() { this(null, ""); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/ExileTargetForSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ExileTargetForSourceEffect.java index bee973d5546..6be4f531248 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ExileTargetForSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ExileTargetForSourceEffect.java @@ -21,6 +21,10 @@ import java.util.UUID; */ public class ExileTargetForSourceEffect extends OneShotEffect { + /** + * Exile cards to source's exile window (e.g. if it have another effect like return from exile later) + * TODO: delete that effect and replace it by ExileTargetEffect (it have special param for same purpose) + */ public ExileTargetForSourceEffect() { super(Outcome.Exile); } diff --git a/Mage/src/main/java/mage/filter/FilterCard.java b/Mage/src/main/java/mage/filter/FilterCard.java index b9c3e18fa61..f5560b493fc 100644 --- a/Mage/src/main/java/mage/filter/FilterCard.java +++ b/Mage/src/main/java/mage/filter/FilterCard.java @@ -1,14 +1,15 @@ package mage.filter; +import mage.cards.Card; +import mage.constants.TargetController; +import mage.filter.predicate.*; +import mage.game.Game; + import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; -import mage.cards.Card; -import mage.constants.TargetController; -import mage.filter.predicate.*; -import mage.game.Game; /** * @author BetaSteward_at_googlemail.com @@ -95,4 +96,9 @@ public class FilterCard extends FilterObject { throw new IllegalArgumentException("Card filter doesn't support controller predicate"); } } + + public FilterCard withMessage(String message) { + this.setMessage(message); + return this; + } } diff --git a/Mage/src/main/java/mage/filter/FilterImpl.java b/Mage/src/main/java/mage/filter/FilterImpl.java index b30a61f4f48..704acf389e7 100644 --- a/Mage/src/main/java/mage/filter/FilterImpl.java +++ b/Mage/src/main/java/mage/filter/FilterImpl.java @@ -1,16 +1,16 @@ package mage.filter; -import java.util.ArrayList; -import java.util.List; import mage.filter.predicate.Predicate; import mage.filter.predicate.Predicates; import mage.game.Game; +import java.util.ArrayList; +import java.util.List; + /** - * + * @param * @author BetaSteward_at_googlemail.com * @author North - * @param */ public abstract class FilterImpl implements Filter { @@ -78,5 +78,4 @@ public abstract class FilterImpl implements Filter { public List> getPredicates() { return predicates; } - } diff --git a/Mage/src/main/java/mage/target/common/TargetCardInASingleGraveyard.java b/Mage/src/main/java/mage/target/common/TargetCardInASingleGraveyard.java index 86721777d32..88e0f66386e 100644 --- a/Mage/src/main/java/mage/target/common/TargetCardInASingleGraveyard.java +++ b/Mage/src/main/java/mage/target/common/TargetCardInASingleGraveyard.java @@ -1,8 +1,5 @@ - - package mage.target.common; -import java.util.UUID; import mage.abilities.Ability; import mage.cards.Card; import mage.constants.Zone; @@ -10,17 +7,17 @@ import mage.filter.FilterCard; import mage.game.Game; import mage.target.TargetCard; +import java.util.UUID; /** - * * @author LevelX2 */ - public class TargetCardInASingleGraveyard extends TargetCard { public TargetCardInASingleGraveyard(int minNumTargets, int maxNumTargets, FilterCard filter) { - super(minNumTargets, maxNumTargets, Zone.GRAVEYARD, filter); + // workaround to add extra message to final ability text + super(minNumTargets, maxNumTargets, Zone.GRAVEYARD, filter.copy().withMessage(filter.getMessage() + " from a single graveyard")); } public TargetCardInASingleGraveyard(final TargetCardInASingleGraveyard target) { @@ -41,9 +38,9 @@ public class TargetCardInASingleGraveyard extends TargetCard { return super.canTarget(id, source, game); } - @Override public TargetCardInASingleGraveyard copy() { return new TargetCardInASingleGraveyard(this); } + }