From 4f38338fa64cdfcc23df33ff63f564859f3be76a Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Wed, 30 Jun 2021 08:51:46 -0400 Subject: [PATCH] [AFR] Implemented You Come to a River --- .../src/mage/cards/y/YouComeToARiver.java | 45 +++++++++++++++++++ .../mage/cards/y/YouFindTheVillainsLair.java | 2 +- .../mage/cards/y/YouHearSomethingOnWatch.java | 2 +- .../mage/cards/y/YouSeeAGuardApproach.java | 2 +- .../mage/cards/y/YouSeeAPairOfGoblins.java | 2 +- .../sets/AdventuresInTheForgottenRealms.java | 1 + .../src/main/java/mage/abilities/Ability.java | 10 ++++- .../main/java/mage/abilities/AbilityImpl.java | 6 +++ .../java/mage/game/stack/StackAbility.java | 5 +++ 9 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/y/YouComeToARiver.java diff --git a/Mage.Sets/src/mage/cards/y/YouComeToARiver.java b/Mage.Sets/src/mage/cards/y/YouComeToARiver.java new file mode 100644 index 00000000000..b38791588ab --- /dev/null +++ b/Mage.Sets/src/mage/cards/y/YouComeToARiver.java @@ -0,0 +1,45 @@ +package mage.cards.y; + +import mage.abilities.Mode; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.combat.CantBeBlockedTargetEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.target.common.TargetCreaturePermanent; +import mage.target.common.TargetNonlandPermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class YouComeToARiver extends CardImpl { + + public YouComeToARiver(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}"); + + // Choose one — + // • Fight the Current — Return target nonland permanent top its owner's hand. + this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); + this.getSpellAbility().addTarget(new TargetNonlandPermanent()); + this.getSpellAbility().withFirstModeFlavorWord("Fight the Current"); + + // • Find a Crossing — Target creature gets +1/+0 until end of turn and can't be blocked this turn. + Mode mode = new Mode(new BoostTargetEffect(1, 0, Duration.EndOfTurn)); + mode.addEffect(new CantBeBlockedTargetEffect(Duration.EndOfTurn).setText("and can't be blocked this turn")); + mode.addTarget(new TargetCreaturePermanent()); + this.getSpellAbility().addMode(mode.withFlavorWord("Find a Crossing")); + } + + private YouComeToARiver(final YouComeToARiver card) { + super(card); + } + + @Override + public YouComeToARiver copy() { + return new YouComeToARiver(this); + } +} diff --git a/Mage.Sets/src/mage/cards/y/YouFindTheVillainsLair.java b/Mage.Sets/src/mage/cards/y/YouFindTheVillainsLair.java index 35ab91ef3b8..e6c63acf11a 100644 --- a/Mage.Sets/src/mage/cards/y/YouFindTheVillainsLair.java +++ b/Mage.Sets/src/mage/cards/y/YouFindTheVillainsLair.java @@ -22,7 +22,7 @@ public final class YouFindTheVillainsLair extends CardImpl { // • Foil Their Scheme — Counter target spell. this.getSpellAbility().addEffect(new CounterTargetEffect()); this.getSpellAbility().addTarget(new TargetSpell()); - this.getSpellAbility().getModes().getMode().withFlavorWord("Foil Their Scheme"); + this.getSpellAbility().withFirstModeFlavorWord("Foil Their Scheme"); // • Learn Their Secrets — Draw two cards, then discard two cards. this.getSpellAbility().addMode(new Mode( diff --git a/Mage.Sets/src/mage/cards/y/YouHearSomethingOnWatch.java b/Mage.Sets/src/mage/cards/y/YouHearSomethingOnWatch.java index e3a7e3c3a85..479af4bb83d 100644 --- a/Mage.Sets/src/mage/cards/y/YouHearSomethingOnWatch.java +++ b/Mage.Sets/src/mage/cards/y/YouHearSomethingOnWatch.java @@ -22,7 +22,7 @@ public final class YouHearSomethingOnWatch extends CardImpl { // Choose one — // • Rouse the Party — Creatures you control get +1/+1 until end of turn. this.getSpellAbility().addEffect(new BoostControlledEffect(1, 1, Duration.EndOfTurn)); - this.getSpellAbility().getModes().getMode().withFlavorWord("Rouse the Party"); + this.getSpellAbility().withFirstModeFlavorWord("Rouse the Party"); // • Set Off Traps — This spell deals 5 damage to target attacking creature. Mode mode = new Mode(new DamageTargetEffect(5, "this spell")); diff --git a/Mage.Sets/src/mage/cards/y/YouSeeAGuardApproach.java b/Mage.Sets/src/mage/cards/y/YouSeeAGuardApproach.java index 51a8a698f14..fabea05ded1 100644 --- a/Mage.Sets/src/mage/cards/y/YouSeeAGuardApproach.java +++ b/Mage.Sets/src/mage/cards/y/YouSeeAGuardApproach.java @@ -25,7 +25,7 @@ public final class YouSeeAGuardApproach extends CardImpl { // • Distract the Guard — Tap target creature. this.getSpellAbility().addEffect(new TapTargetEffect()); this.getSpellAbility().addTarget(new TargetCreaturePermanent()); - this.getSpellAbility().getModes().getMode().withFlavorWord("Distract the Guard"); + this.getSpellAbility().withFirstModeFlavorWord("Distract the Guard"); // • Hide — Target creature you control gains hexproof until end of turn. Mode mode = new Mode(new GainAbilityTargetEffect(HexproofAbility.getInstance(), Duration.EndOfTurn)); diff --git a/Mage.Sets/src/mage/cards/y/YouSeeAPairOfGoblins.java b/Mage.Sets/src/mage/cards/y/YouSeeAPairOfGoblins.java index b29928beb2e..045b13bf899 100644 --- a/Mage.Sets/src/mage/cards/y/YouSeeAPairOfGoblins.java +++ b/Mage.Sets/src/mage/cards/y/YouSeeAPairOfGoblins.java @@ -22,7 +22,7 @@ public final class YouSeeAPairOfGoblins extends CardImpl { // Choose one — // • Charge Them — Creatures you control get +2/+0 until end of turn. this.getSpellAbility().addEffect(new BoostControlledEffect(2, 0, Duration.EndOfTurn)); - this.getSpellAbility().getModes().getMode().withFlavorWord("Charge Them"); + this.getSpellAbility().withFirstModeFlavorWord("Charge Them"); // • Befriend Them — Create two 1/1 red Goblin creature tokens. this.getSpellAbility().addMode(new Mode( diff --git a/Mage.Sets/src/mage/sets/AdventuresInTheForgottenRealms.java b/Mage.Sets/src/mage/sets/AdventuresInTheForgottenRealms.java index c16ee52dcc8..1208bc73048 100644 --- a/Mage.Sets/src/mage/sets/AdventuresInTheForgottenRealms.java +++ b/Mage.Sets/src/mage/sets/AdventuresInTheForgottenRealms.java @@ -67,6 +67,7 @@ public final class AdventuresInTheForgottenRealms extends ExpansionSet { cards.add(new SetCardInfo("Tiamat", 235, Rarity.MYTHIC, mage.cards.t.Tiamat.class)); cards.add(new SetCardInfo("Trelasarra Moon Dancer", 236, Rarity.UNCOMMON, mage.cards.t.TrelasarraMoonDancer.class)); cards.add(new SetCardInfo("Vorpal Sword", 124, Rarity.RARE, mage.cards.v.VorpalSword.class)); + cards.add(new SetCardInfo("You Come to a River", 83, Rarity.COMMON, mage.cards.y.YouComeToARiver.class)); cards.add(new SetCardInfo("You Find the Villains' Lair", 84, Rarity.COMMON, mage.cards.y.YouFindTheVillainsLair.class)); cards.add(new SetCardInfo("You Hear Something on Watch", 42, Rarity.COMMON, mage.cards.y.YouHearSomethingOnWatch.class)); cards.add(new SetCardInfo("You See a Guard Approach", 85, Rarity.COMMON, mage.cards.y.YouSeeAGuardApproach.class)); diff --git a/Mage/src/main/java/mage/abilities/Ability.java b/Mage/src/main/java/mage/abilities/Ability.java index a4b936fee98..610d8785130 100644 --- a/Mage/src/main/java/mage/abilities/Ability.java +++ b/Mage/src/main/java/mage/abilities/Ability.java @@ -467,13 +467,21 @@ public interface Ability extends Controllable, Serializable { Ability setAbilityWord(AbilityWord abilityWord); /** - * Set flavor word for whole ability (if you need flavor word for choices then call it from mode) + * Sets flavor word for whole ability * * @param flavorWord * @return */ Ability withFlavorWord(String flavorWord); + /** + * Sets flavor word for first mode + * + * @param flavorWord + * @return + */ + Ability withFirstModeFlavorWord(String flavorWord); + /** * Creates the message about the ability casting/triggering/activating to * post in the game log before the ability resolves. diff --git a/Mage/src/main/java/mage/abilities/AbilityImpl.java b/Mage/src/main/java/mage/abilities/AbilityImpl.java index efd10a55f83..9578c535bb9 100644 --- a/Mage/src/main/java/mage/abilities/AbilityImpl.java +++ b/Mage/src/main/java/mage/abilities/AbilityImpl.java @@ -1078,6 +1078,12 @@ public abstract class AbilityImpl implements Ability { return this; } + @Override + public Ability withFirstModeFlavorWord(String flavorWord) { + this.modes.getMode().withFlavorWord(flavorWord); + return this; + } + @Override public String getGameLogMessage(Game game) { if (game.isSimulation()) { diff --git a/Mage/src/main/java/mage/game/stack/StackAbility.java b/Mage/src/main/java/mage/game/stack/StackAbility.java index 1a4601ed93f..5cc7332f066 100644 --- a/Mage/src/main/java/mage/game/stack/StackAbility.java +++ b/Mage/src/main/java/mage/game/stack/StackAbility.java @@ -501,6 +501,11 @@ public class StackAbility extends StackObjectImpl implements Ability { throw new UnsupportedOperationException("Not supported."); } + @Override + public Ability withFirstModeFlavorWord(String flavorWord) { + throw new UnsupportedOperationException("Not supported."); + } + @Override public boolean activateAlternateOrAdditionalCosts(MageObject sourceObject, boolean noMana, Player controller, Game game) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.