From f2835685e96c884f86140480ad6a563498621ee7 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Fri, 27 Apr 2018 18:22:49 -0400 Subject: [PATCH] updated how Saga abilities are added still need to fix sacrificing works (#4875) --- .../src/mage/cards/c/ChainersTorment.java | 7 ++- .../src/mage/cards/p/PhyrexianScriptures.java | 14 +++--- .../src/mage/cards/s/SongOfFreyalise.java | 12 +++-- .../src/mage/cards/t/TheEldestReborn.java | 26 ++++++---- .../src/mage/cards/t/TheMirariConjecture.java | 33 ++++++++----- Mage.Sets/src/mage/cards/t/TimeOfIce.java | 11 +++-- .../src/mage/cards/t/TriumphOfGerrard.java | 27 ++++++++--- .../mage/abilities/common/SagaAbility.java | 48 +++++++++++++++---- .../java/mage/abilities/effects/Effects.java | 4 ++ .../main/java/mage/constants/SagaChapter.java | 12 +++++ Mage/src/main/java/mage/target/Targets.java | 5 ++ 11 files changed, 147 insertions(+), 52 deletions(-) diff --git a/Mage.Sets/src/mage/cards/c/ChainersTorment.java b/Mage.Sets/src/mage/cards/c/ChainersTorment.java index 446eae23666..90bc026ed51 100644 --- a/Mage.Sets/src/mage/cards/c/ChainersTorment.java +++ b/Mage.Sets/src/mage/cards/c/ChainersTorment.java @@ -30,6 +30,7 @@ package mage.cards.c; import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SagaAbility; +import mage.abilities.effects.Effects; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DamagePlayersEffect; @@ -61,8 +62,10 @@ public class ChainersTorment extends CardImpl { SagaAbility sagaAbility = new SagaAbility(this, SagaChapter.CHAPTER_III); // I, II — Chainer's Torment deals 2 damage to each opponent and you gain 2 life. - Ability ability = sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_II, new DamagePlayersEffect(2, TargetController.OPPONENT)); - ability.addEffect(new GainLifeEffect(2).setText("and you gain 2 life")); + Effects effects = new Effects(); + effects.add(new DamagePlayersEffect(2, TargetController.OPPONENT)); + effects.add(new GainLifeEffect(2).setText("and you gain 2 life")); + sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_II, effects); // III — Create an X/X black Nightmare Horror creature token, where X is half your life total, rounded up. It deals X damage to you. sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new ChainersTormentEffect()); diff --git a/Mage.Sets/src/mage/cards/p/PhyrexianScriptures.java b/Mage.Sets/src/mage/cards/p/PhyrexianScriptures.java index 8b284cfd37b..c6c9ea787a3 100644 --- a/Mage.Sets/src/mage/cards/p/PhyrexianScriptures.java +++ b/Mage.Sets/src/mage/cards/p/PhyrexianScriptures.java @@ -28,9 +28,8 @@ package mage.cards.p; import java.util.UUID; -import mage.abilities.Ability; import mage.abilities.common.SagaAbility; -import mage.abilities.effects.Effect; +import mage.abilities.effects.Effects; import mage.abilities.effects.common.DestroyAllEffect; import mage.abilities.effects.common.ExileGraveyardAllPlayersEffect; import mage.abilities.effects.common.continuous.AddCardTypeTargetEffect; @@ -74,11 +73,12 @@ public class PhyrexianScriptures extends CardImpl { SagaAbility sagaAbility = new SagaAbility(this, SagaChapter.CHAPTER_III); // I — Put a +1/+1 counter on up to one target creature. That creature becomes an artifact in addition to its other types. - Ability ability = sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, new AddCountersTargetEffect(CounterType.P1P1.createInstance())); - ability.addTarget(new TargetCreaturePermanent(0, 1)); - Effect effect = new AddCardTypeTargetEffect(Duration.WhileOnBattlefield, CardType.ARTIFACT); - effect.setText("That creature becomes an artifact in addition to its other types"); - ability.addEffect(effect); + Effects effects = new Effects(); + effects.add(new AddCountersTargetEffect(CounterType.P1P1.createInstance())); + effects.add(new AddCardTypeTargetEffect(Duration.WhileOnBattlefield, CardType.ARTIFACT) + .setText("That creature becomes an artifact in addition to its other types") + ); + sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_I, effects, new TargetCreaturePermanent(0, 1)); // II — Destroy all nonartifact creatures. sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_II, new DestroyAllEffect(filter)); diff --git a/Mage.Sets/src/mage/cards/s/SongOfFreyalise.java b/Mage.Sets/src/mage/cards/s/SongOfFreyalise.java index 2935f0bd6fd..92965b5001d 100644 --- a/Mage.Sets/src/mage/cards/s/SongOfFreyalise.java +++ b/Mage.Sets/src/mage/cards/s/SongOfFreyalise.java @@ -28,8 +28,8 @@ package mage.cards.s; import java.util.UUID; -import mage.abilities.Ability; import mage.abilities.common.SagaAbility; +import mage.abilities.effects.Effects; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.effects.common.counter.AddCountersAllEffect; import mage.abilities.keyword.IndestructibleAbility; @@ -66,13 +66,15 @@ public class SongOfFreyalise extends CardImpl { ); // III — Put a +1/+1 counter on each creature you control. Those creatures gain vigilance, trample, and indestructible until end of turn. - Ability ability = sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new AddCountersAllEffect(CounterType.P1P1.createInstance(), FILTER_CONTROLLED_CREATURES)); - ability.addEffect(new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn, FILTER_CONTROLLED_CREATURES) + Effects effects = new Effects(); + effects.add(new AddCountersAllEffect(CounterType.P1P1.createInstance(), FILTER_CONTROLLED_CREATURES)); + effects.add(new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn, FILTER_CONTROLLED_CREATURES) .setText("Those creatures gain vigilance")); - ability.addEffect(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, FILTER_CONTROLLED_CREATURES) + effects.add(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, FILTER_CONTROLLED_CREATURES) .setText(", trample")); - ability.addEffect(new GainAbilityControlledEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, FILTER_CONTROLLED_CREATURES) + effects.add(new GainAbilityControlledEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, FILTER_CONTROLLED_CREATURES) .setText("and indestructible until end of turn")); + sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, SagaChapter.CHAPTER_III, effects); this.addAbility(sagaAbility); } diff --git a/Mage.Sets/src/mage/cards/t/TheEldestReborn.java b/Mage.Sets/src/mage/cards/t/TheEldestReborn.java index c019eb53b3a..269ff46c412 100644 --- a/Mage.Sets/src/mage/cards/t/TheEldestReborn.java +++ b/Mage.Sets/src/mage/cards/t/TheEldestReborn.java @@ -28,7 +28,6 @@ package mage.cards.t; import java.util.UUID; -import mage.abilities.Ability; import mage.abilities.common.SagaAbility; import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; import mage.abilities.effects.common.SacrificeOpponentsEffect; @@ -51,6 +50,15 @@ import mage.target.common.TargetCardInGraveyard; */ public class TheEldestReborn extends CardImpl { + private static final FilterCard filter = new FilterCard("creature or planeswalker card from a graveyard"); + + static { + filter.add(Predicates.or( + new CardTypePredicate(CardType.CREATURE), + new CardTypePredicate(CardType.PLANESWALKER) + )); + } + public TheEldestReborn(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{B}"); @@ -60,19 +68,21 @@ public class TheEldestReborn extends CardImpl { SagaAbility sagaAbility = new SagaAbility(this, SagaChapter.CHAPTER_III); // I — Each opponent sacrifices a creature or planeswalker. sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, - new SacrificeOpponentsEffect(StaticFilters.FILTER_PERMANENT_CREATURE_OR_PLANESWALKER_A)); + new SacrificeOpponentsEffect(StaticFilters.FILTER_PERMANENT_CREATURE_OR_PLANESWALKER_A) + ); // II — Each opponent discards a card. sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_II, - new DiscardEachPlayerEffect(TargetController.OPPONENT)); + new DiscardEachPlayerEffect(TargetController.OPPONENT) + ); // III — Put target creature or planeswalker card from a graveyard onto the battlefield under your control. - Ability ability = sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_III, SagaChapter.CHAPTER_III, new ReturnFromGraveyardToBattlefieldTargetEffect() - .setText("Put target creature or planeswalker card from a graveyard onto the battlefield under your control")); - FilterCard filter = new FilterCard("creature or planeswalker card from a graveyard"); - filter.add(Predicates.or(new CardTypePredicate(CardType.CREATURE), new CardTypePredicate(CardType.PLANESWALKER))); - ability.addTarget(new TargetCardInGraveyard(filter)); + .setText("Put target creature or planeswalker card from a graveyard onto the battlefield under your control"), + new TargetCardInGraveyard(filter) + ); this.addAbility(sagaAbility); } diff --git a/Mage.Sets/src/mage/cards/t/TheMirariConjecture.java b/Mage.Sets/src/mage/cards/t/TheMirariConjecture.java index c1fbcf8a47d..7cbe6a3c453 100644 --- a/Mage.Sets/src/mage/cards/t/TheMirariConjecture.java +++ b/Mage.Sets/src/mage/cards/t/TheMirariConjecture.java @@ -28,7 +28,6 @@ package mage.cards.t; import java.util.UUID; -import mage.abilities.Ability; import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.SagaAbility; import mage.abilities.effects.common.CopyTargetSpellEffect; @@ -55,6 +54,14 @@ import mage.target.targetpointer.FixedTarget; */ public class TheMirariConjecture extends CardImpl { + private static final FilterCard filterInstantCard = new FilterCard("instant card from your graveyard"); + private static final FilterCard filterSorceryCard = new FilterCard("sorcery card from your graveyard"); + + static { + filterInstantCard.add(new CardTypePredicate(CardType.INSTANT)); + filterSorceryCard.add(new CardTypePredicate(CardType.SORCERY)); + } + public TheMirariConjecture(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{U}"); @@ -62,16 +69,20 @@ public class TheMirariConjecture extends CardImpl { // (As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.) SagaAbility sagaAbility = new SagaAbility(this, SagaChapter.CHAPTER_III); - // I — Return target instant card from your graveyard to your hand. - FilterCard filterInstantCard = new FilterCard("instant card from your graveyard"); - filterInstantCard.add(new CardTypePredicate(CardType.INSTANT)); - Ability ability = sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, new ReturnFromGraveyardToHandTargetEffect()); - ability.addTarget(new TargetCardInYourGraveyard(filterInstantCard)); - // II — Return target sorcery card from your graveyard to your hand. - FilterCard filterSorceryCard = new FilterCard("sorcery card from your graveyard"); - filterSorceryCard.add(new CardTypePredicate(CardType.SORCERY)); - ability = sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_II, new ReturnFromGraveyardToHandTargetEffect()); - ability.addTarget(new TargetCardInYourGraveyard(filterSorceryCard)); + // I — Return target instant card from your graveyard to your hand. + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_I, + new ReturnFromGraveyardToHandTargetEffect(), + new TargetCardInYourGraveyard(filterInstantCard) + ); + + // II — Return target sorcery card from your graveyard to your hand. + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_II, SagaChapter.CHAPTER_II, + new ReturnFromGraveyardToHandTargetEffect(), + new TargetCardInYourGraveyard(filterSorceryCard) + ); + // III — Until end of turn, whenever you cast an instant or sorcery spell, copy it. You may choose new targets for the copy. sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new CreateDelayedTriggeredAbilityEffect(new TheMirariConjectureDelayedTriggeredAbility())); this.addAbility(sagaAbility); diff --git a/Mage.Sets/src/mage/cards/t/TimeOfIce.java b/Mage.Sets/src/mage/cards/t/TimeOfIce.java index 6b0fffbe053..86eaa24dd61 100644 --- a/Mage.Sets/src/mage/cards/t/TimeOfIce.java +++ b/Mage.Sets/src/mage/cards/t/TimeOfIce.java @@ -32,6 +32,7 @@ import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.SagaAbility; import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.abilities.effects.Effects; import mage.abilities.effects.common.ReturnToHandFromBattlefieldAllEffect; import mage.abilities.effects.common.TapTargetEffect; import mage.constants.SubType; @@ -75,9 +76,13 @@ public class TimeOfIce extends CardImpl { SagaAbility sagaAbility = new SagaAbility(this, SagaChapter.CHAPTER_III); // I, II — Tap target creature an opponent controls. It doesn't untap during its controller's untap step for as long as you control Time of Ice. - Ability ability = sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_II, new TapTargetEffect()); - ability.addEffect(new TimeOfIceEffect()); - ability.addTarget(new TargetCreaturePermanent(FILTER_OPPONENTS_PERMANENT_CREATURE)); + Effects effects = new Effects(); + effects.add(new TapTargetEffect()); + effects.add(new TimeOfIceEffect()); + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_II, effects, + new TargetCreaturePermanent(FILTER_OPPONENTS_PERMANENT_CREATURE) + ); // III — Return all tapped creatures to their owners' hands. sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new ReturnToHandFromBattlefieldAllEffect(filter)); diff --git a/Mage.Sets/src/mage/cards/t/TriumphOfGerrard.java b/Mage.Sets/src/mage/cards/t/TriumphOfGerrard.java index 432f4806f4e..f59ef3a060d 100644 --- a/Mage.Sets/src/mage/cards/t/TriumphOfGerrard.java +++ b/Mage.Sets/src/mage/cards/t/TriumphOfGerrard.java @@ -34,6 +34,7 @@ import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.SagaAbility; +import mage.abilities.effects.Effects; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.keyword.FirstStrikeAbility; @@ -48,6 +49,7 @@ import mage.constants.SubType; import mage.counters.CounterType; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.target.Targets; import mage.target.common.TargetControlledCreaturePermanent; /** @@ -64,14 +66,25 @@ public class TriumphOfGerrard extends CardImpl { // (As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.) SagaAbility sagaAbility = new SagaAbility(this, SagaChapter.CHAPTER_III); // I, II — Put a +1/+1 counter on target creature you control with the greatest power. - Ability ability = sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_II, new AddCountersTargetEffect(CounterType.P1P1.createInstance())); - ability.addTarget(new TriumphOfGerrardTargetCreature()); + sagaAbility.addChapterEffect( + this, + SagaChapter.CHAPTER_I, + SagaChapter.CHAPTER_II, + new AddCountersTargetEffect(CounterType.P1P1.createInstance()), + new TriumphOfGerrardTargetCreature() + ); // III — Target creature you control with the greatest power gains flying, first strike, and lifelink until end of turn. - ability = sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, - new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn).setText("Target creature you control with the greatest power gains flying")); - ability.addEffect(new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn).setText(", first strike")); - ability.addEffect(new GainAbilityTargetEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn).setText(", and lifelink until end of turn")); - ability.addTarget(new TriumphOfGerrardTargetCreature()); + Effects effects = new Effects(); + effects.add(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn) + .setText("Target creature you control with the greatest power gains flying")); + effects.add(new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn) + .setText(", first strike")); + effects.add(new GainAbilityTargetEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn) + .setText(", and lifelink until end of turn")); + sagaAbility.addChapterEffect( + this, SagaChapter.CHAPTER_III, SagaChapter.CHAPTER_III, + effects, new Targets(new TriumphOfGerrardTargetCreature()) + ); this.addAbility(sagaAbility); } diff --git a/Mage/src/main/java/mage/abilities/common/SagaAbility.java b/Mage/src/main/java/mage/abilities/common/SagaAbility.java index a856cd9f83e..3c71708bc12 100644 --- a/Mage/src/main/java/mage/abilities/common/SagaAbility.java +++ b/Mage/src/main/java/mage/abilities/common/SagaAbility.java @@ -30,6 +30,7 @@ package mage.abilities.common; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; +import mage.abilities.effects.Effects; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.Card; import mage.constants.SagaChapter; @@ -41,6 +42,8 @@ import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.game.stack.StackAbility; import mage.game.stack.StackObject; +import mage.target.Target; +import mage.target.Targets; /** * @@ -64,17 +67,44 @@ public class SagaAbility extends SimpleStaticAbility { this.maxChapter = ability.maxChapter; } - public Ability addChapterEffect(Card card, SagaChapter chapter, Effect effect) { - return addChapterEffect(card, chapter, chapter, effect); + public void addChapterEffect(Card card, SagaChapter chapter, Effect effect) { + addChapterEffect(card, chapter, chapter, effect); } - public Ability addChapterEffect(Card card, SagaChapter fromChapter, SagaChapter toChapter, Effect effect) { - ChapterTriggeredAbility ability = new ChapterTriggeredAbility(effect, fromChapter, toChapter); - card.addAbility(ability); + public void addChapterEffect(Card card, SagaChapter fromChapter, SagaChapter toChapter, Effect effect) { + addChapterEffect(card, fromChapter, toChapter, new Effects(effect), (Target) null); + } + + public void addChapterEffect(Card card, SagaChapter fromChapter, SagaChapter toChapter, Effects effects) { + addChapterEffect(card, fromChapter, toChapter, effects, (Target) null); + } + + public void addChapterEffect(Card card, SagaChapter fromChapter, SagaChapter toChapter, Effect effect, Target target) { + addChapterEffect(card, fromChapter, toChapter, new Effects(effect), new Targets(target)); + } + + public void addChapterEffect(Card card, SagaChapter fromChapter, SagaChapter toChapter, Effects effects, Target target) { + addChapterEffect(card, fromChapter, toChapter, effects, new Targets(target)); + } + + public void addChapterEffect(Card card, SagaChapter fromChapter, SagaChapter toChapter, Effects effects, Targets targets) { + ChapterTriggeredAbility ability; + for (int i = fromChapter.getNumber(); i <= toChapter.getNumber(); i++) { + ability = new ChapterTriggeredAbility(null, SagaChapter.getChapter(i), toChapter); + for (Effect effect : effects) { + ability.addEffect(effect); + } + for (Target target : targets) { + ability.addTarget(target); + } + if (i > fromChapter.getNumber()) { + ability.setRuleVisible(false); + } + card.addAbility(ability); + } if (maxChapter == null || toChapter.getNumber() > maxChapter.getNumber()) { maxChapter = toChapter; } - return ability; } public SagaChapter getMaxChapter() { @@ -106,7 +136,6 @@ class ChapterTriggeredAbility extends TriggeredAbilityImpl { public ChapterTriggeredAbility(Effect effect, SagaChapter chapterFrom, SagaChapter chapterTo) { super(Zone.BATTLEFIELD, effect, false); this.chapterFrom = chapterFrom; - this.chapterTo = chapterTo; } public ChapterTriggeredAbility(final ChapterTriggeredAbility ability) { @@ -123,11 +152,12 @@ class ChapterTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { if (event.getTargetId().equals(getSourceId()) && event.getData().equals(CounterType.LORE.getName())) { + int amountAdded = event.getAmount(); Permanent sourceSaga = game.getPermanentOrLKIBattlefield(getSourceId()); if (sourceSaga != null) { int loreCounters = sourceSaga.getCounters(game).getCount(CounterType.LORE); - return chapterFrom.getNumber() <= loreCounters - && chapterTo.getNumber() >= loreCounters; + return loreCounters - amountAdded < chapterFrom.getNumber() + && chapterFrom.getNumber() <= loreCounters; } } return false; diff --git a/Mage/src/main/java/mage/abilities/effects/Effects.java b/Mage/src/main/java/mage/abilities/effects/Effects.java index 5598970061e..5ac81c54852 100644 --- a/Mage/src/main/java/mage/abilities/effects/Effects.java +++ b/Mage/src/main/java/mage/abilities/effects/Effects.java @@ -44,6 +44,10 @@ public class Effects extends ArrayList { public Effects() { } + public Effects(Effect effect) { + this.add(effect); + } + public Effects(final Effects effects) { for (Effect effect : effects) { this.add(effect.copy()); diff --git a/Mage/src/main/java/mage/constants/SagaChapter.java b/Mage/src/main/java/mage/constants/SagaChapter.java index 8eb2487abb8..8afac6a674b 100644 --- a/Mage/src/main/java/mage/constants/SagaChapter.java +++ b/Mage/src/main/java/mage/constants/SagaChapter.java @@ -53,4 +53,16 @@ public enum SagaChapter { return number; } + public static SagaChapter getChapter(int number) { + switch (number) { + case 1: + return CHAPTER_I; + case 2: + return CHAPTER_II; + case 3: + return CHAPTER_III; + default: + return null; + } + } } diff --git a/Mage/src/main/java/mage/target/Targets.java b/Mage/src/main/java/mage/target/Targets.java index 43ed15e295a..502297f3c9c 100644 --- a/Mage/src/main/java/mage/target/Targets.java +++ b/Mage/src/main/java/mage/target/Targets.java @@ -46,6 +46,10 @@ public class Targets extends ArrayList { public Targets() { } + public Targets(Target target) { + this.add(target); + } + public Targets(final Targets targets) { for (Target target : targets) { this.add(target.copy()); @@ -151,6 +155,7 @@ public class Targets extends ArrayList { } return null; } + public Targets copy() { return new Targets(this); }