diff --git a/Mage.Sets/src/mage/cards/a/AmuletOfVigor.java b/Mage.Sets/src/mage/cards/a/AmuletOfVigor.java index 03058860c2..383366fa4f 100644 --- a/Mage.Sets/src/mage/cards/a/AmuletOfVigor.java +++ b/Mage.Sets/src/mage/cards/a/AmuletOfVigor.java @@ -13,6 +13,7 @@ import mage.game.permanent.Permanent; import mage.target.targetpointer.FixedTarget; import mage.util.GameLog; +import java.util.Optional; import java.util.UUID; /** @@ -75,10 +76,12 @@ class AmuletOfVigorTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { // that triggers depends on stack order, so make each trigger unique with extra info - String triggeredInfo = ""; - if (this.getEffects().get(0).getTargetPointer() != null) { - triggeredInfo = " Triggered permanent: " + this.getEffects().get(0).getTargetPointer().getData("triggeredName") + "."; - } - return "Whenever a permanent enters the battlefield tapped and under your control, untap it." + triggeredInfo; + return "Whenever a permanent enters the battlefield tapped and under your control, untap it." + + Optional + .of(this.getEffects().get(0).getTargetPointer()) + .map(targetPointer -> targetPointer.getData("triggeredName")) + .filter(s -> s != null && !s.isEmpty()) + .map(s -> " Triggered permanent: " + s) + .orElse(""); } } diff --git a/Mage.Sets/src/mage/cards/g/GrimTutor.java b/Mage.Sets/src/mage/cards/g/GrimTutor.java index 4ca8bd99de..bb8c3f5d68 100644 --- a/Mage.Sets/src/mage/cards/g/GrimTutor.java +++ b/Mage.Sets/src/mage/cards/g/GrimTutor.java @@ -1,7 +1,5 @@ - package mage.cards.g; -import java.util.UUID; import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; import mage.cards.CardImpl; @@ -9,22 +7,21 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.target.common.TargetCardInLibrary; +import java.util.UUID; + /** - * * @author emerald000 */ public final class GrimTutor extends CardImpl { public GrimTutor(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{B}{B}"); - + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}{B}"); // Search your library for a card and put that card into your hand, then shuffle your library. - TargetCardInLibrary target = new TargetCardInLibrary(); - this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(target).setText("search your library for a card and put that card into your hand, then shuffle")); + this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary())); + // You lose 3 life. this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(3)); - } private GrimTutor(final GrimTutor card) { diff --git a/Mage.Sets/src/mage/cards/k/KayaBaneOfTheDead.java b/Mage.Sets/src/mage/cards/k/KayaBaneOfTheDead.java index f939d91fc7..542a24cbce 100644 --- a/Mage.Sets/src/mage/cards/k/KayaBaneOfTheDead.java +++ b/Mage.Sets/src/mage/cards/k/KayaBaneOfTheDead.java @@ -49,7 +49,7 @@ class KayaBaneOfTheDeadEffect extends AsThoughEffectImpl { KayaBaneOfTheDeadEffect() { super(AsThoughEffectType.HEXPROOF, Duration.WhileOnBattlefield, Outcome.Benefit); - staticText = "your opponents and permanents with hexproof your oppponents control " + + staticText = "your opponents and permanents your opponents control with hexproof " + "can be the targets of spells and abilities you control as though they didn't have hexproof"; } diff --git a/Mage.Sets/src/mage/cards/m/MeanderingTowershell.java b/Mage.Sets/src/mage/cards/m/MeanderingTowershell.java index a70162003a..1baeccec20 100644 --- a/Mage.Sets/src/mage/cards/m/MeanderingTowershell.java +++ b/Mage.Sets/src/mage/cards/m/MeanderingTowershell.java @@ -72,7 +72,7 @@ class MeanderingTowershellEffect extends OneShotEffect { public MeanderingTowershellEffect() { super(Outcome.Detriment); - this.staticText = "exile it. Return it to the battlefield under your control tapped and attacking at the beginning of the next declare attackers step on your next turn"; + this.staticText = "exile it. Return it to the battlefield under your control tapped and attacking at the beginning of the declare attackers step on your next turn"; } public MeanderingTowershellEffect(final MeanderingTowershellEffect effect) { diff --git a/Mage.Sets/src/mage/cards/p/PathOfAncestry.java b/Mage.Sets/src/mage/cards/p/PathOfAncestry.java index fd248b9970..f825b9bbd0 100644 --- a/Mage.Sets/src/mage/cards/p/PathOfAncestry.java +++ b/Mage.Sets/src/mage/cards/p/PathOfAncestry.java @@ -120,7 +120,7 @@ class PathOfAncestryTriggeredAbility extends DelayedTriggeredAbility { @Override public String getRule() { - return "When that mana is spent to cast a creature spell that shares a creature type with your commander," + + return "When that mana is spent to cast a creature spell that shares a creature type with your commander, " + "scry 1. " + "(Look at the top card of your library. You may put that card on the bottom of your library.)"; } diff --git a/Mage.Sets/src/mage/cards/s/SanctumPrelate.java b/Mage.Sets/src/mage/cards/s/SanctumPrelate.java index b7e04f22e9..dc4e809109 100644 --- a/Mage.Sets/src/mage/cards/s/SanctumPrelate.java +++ b/Mage.Sets/src/mage/cards/s/SanctumPrelate.java @@ -1,8 +1,5 @@ - package mage.cards.s; -import java.util.UUID; - import mage.MageInt; import mage.MageObject; import mage.abilities.Ability; @@ -19,6 +16,8 @@ import mage.game.permanent.Permanent; import mage.game.stack.Spell; import mage.players.Player; +import java.util.UUID; + /** * @author maxlebedev */ @@ -52,7 +51,7 @@ class ChooseNumberEffect extends OneShotEffect { public ChooseNumberEffect() { super(Outcome.Detriment); - staticText = setText(); + staticText = "choose a number"; } public ChooseNumberEffect(final ChooseNumberEffect effect) { @@ -67,7 +66,7 @@ class ChooseNumberEffect extends OneShotEffect { game.getState().setValue(source.getSourceId().toString(), numberChoice); Permanent permanent = game.getPermanentEntering(source.getSourceId()); - if(permanent != null) { + if (permanent != null) { permanent.addInfo("chosen players", "Chosen Number: " + numberChoice + "", game); game.informPlayers(permanent.getLogName() + ", chosen number: " + numberChoice); @@ -80,10 +79,6 @@ class ChooseNumberEffect extends OneShotEffect { public ChooseNumberEffect copy() { return new ChooseNumberEffect(this); } - - private String setText() { - return "Choose a number. Noncreature spells with mana value equal to the chosen number can't be cast"; - } } class SanctumPrelateReplacementEffect extends ContinuousRuleModifyingEffectImpl { diff --git a/Mage.Sets/src/mage/cards/s/SliverOverlord.java b/Mage.Sets/src/mage/cards/s/SliverOverlord.java index bbbb935432..5fedf523a9 100644 --- a/Mage.Sets/src/mage/cards/s/SliverOverlord.java +++ b/Mage.Sets/src/mage/cards/s/SliverOverlord.java @@ -42,7 +42,7 @@ public final class SliverOverlord extends CardImpl { this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true), new ManaCostsImpl("{3}"))); // {3}: Gain control of target Sliver. - Ability ability = (new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainControlTargetEffect(Duration.EndOfGame), new ManaCostsImpl("{3}"))); + Ability ability = (new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainControlTargetEffect(Duration.Custom), new ManaCostsImpl("{3}"))); Target target = new TargetPermanent(new FilterCreaturePermanent(SubType.SLIVER,"Sliver")); ability.addTarget(target); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/t/TamiyoCollectorOfTales.java b/Mage.Sets/src/mage/cards/t/TamiyoCollectorOfTales.java index ccabdb0fc4..cd7a1539c8 100644 --- a/Mage.Sets/src/mage/cards/t/TamiyoCollectorOfTales.java +++ b/Mage.Sets/src/mage/cards/t/TamiyoCollectorOfTales.java @@ -6,7 +6,7 @@ import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ChooseACardNameEffect; -import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.*; import mage.constants.*; import mage.game.Game; @@ -39,7 +39,7 @@ public final class TamiyoCollectorOfTales extends CardImpl { this.addAbility(new LoyaltyAbility(new TamiyoCollectorOfTalesEffect(), 1)); // -3: Return target card from your graveyard to your hand. - Ability ability = new LoyaltyAbility(new ReturnToHandTargetEffect(), -3); + Ability ability = new LoyaltyAbility(new ReturnFromGraveyardToHandTargetEffect(), -3); ability.addTarget(new TargetCardInYourGraveyard()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WrexialTheRisenDeep.java b/Mage.Sets/src/mage/cards/w/WrexialTheRisenDeep.java index 2acdaa7622..94e598b784 100644 --- a/Mage.Sets/src/mage/cards/w/WrexialTheRisenDeep.java +++ b/Mage.Sets/src/mage/cards/w/WrexialTheRisenDeep.java @@ -108,7 +108,7 @@ class WrexialTheRisenDeepTriggeredAbility extends TriggeredAbilityImpl { return "Whenever {this} deals combat damage to a player, " + "you may cast target instant or sorcery card " + "from that player's graveyard without paying its mana cost. " - + "If that spell would be put into a graveyard this turn, exile it instead"; + + "If that spell would be put into a graveyard this turn, exile it instead."; } } diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 347a068678..c26b756402 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -84,7 +84,8 @@ public class VerifyCardDataTest { private static final String SKIP_LIST_SAMPLE_DECKS = "SAMPLE_DECKS"; private static final List evergreenKeywords = Arrays.asList( "flying", "lifelink", "menace", "trample", "haste", "first strike", "hexproof", - "deathtouch", "double strike", "indestructible", "reach", "flash", "defender", "vigilance" + "deathtouch", "double strike", "indestructible", "reach", "flash", "defender", "vigilance", + "plainswalk", "islandwalk", "swampwalk", "mountainwalk", "forestwalk" ); static { diff --git a/Mage/src/main/java/mage/abilities/effects/common/DontUntapInControllersUntapStepAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/DontUntapInControllersUntapStepAllEffect.java index 72fa0bee8b..075d5614c4 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/DontUntapInControllersUntapStepAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/DontUntapInControllersUntapStepAllEffect.java @@ -93,7 +93,7 @@ public class DontUntapInControllersUntapStepAllEffect extends ContinuousRuleModi StringBuilder sb = new StringBuilder(filter.getMessage()).append(" don't untap during "); switch(targetController) { case ANY: - sb.append("their controller's "); + sb.append("their controllers' "); break; default: throw new RuntimeException("Type of TargetController not supported yet!"); diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllEffect.java index 428111ff9d..52c35b7c41 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllEffect.java @@ -7,6 +7,8 @@ import mage.abilities.Mode; import mage.abilities.TriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.mana.ActivatedManaAbilityImpl; +import mage.abilities.mana.SimpleManaAbility; import mage.constants.*; import mage.filter.FilterPermanent; import mage.game.Game; @@ -136,7 +138,10 @@ public class GainAbilityAllEffect extends ContinuousEffectImpl { StringBuilder sb = new StringBuilder(); - boolean quotes = forceQuotes || (ability instanceof SimpleActivatedAbility) || (ability instanceof TriggeredAbility); + boolean quotes = forceQuotes + || ability instanceof SimpleActivatedAbility + ||ability instanceof ActivatedManaAbilityImpl + || ability instanceof TriggeredAbility; boolean each = filter.getMessage().toLowerCase(Locale.ENGLISH).startsWith("each"); if (excludeSource && !each) { sb.append("other "); diff --git a/Mage/src/main/java/mage/abilities/effects/common/enterAttribute/EnterAttributeAddChosenSubtypeEffect.java b/Mage/src/main/java/mage/abilities/effects/common/enterAttribute/EnterAttributeAddChosenSubtypeEffect.java index 84a0bc0751..a2f288faff 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/enterAttribute/EnterAttributeAddChosenSubtypeEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/enterAttribute/EnterAttributeAddChosenSubtypeEffect.java @@ -18,7 +18,6 @@ public class EnterAttributeAddChosenSubtypeEffect extends OneShotEffect { public EnterAttributeAddChosenSubtypeEffect() { super(Outcome.Benefit); - this.staticText = "{this} is the chosen type in addition to its other types"; } public EnterAttributeAddChosenSubtypeEffect(final EnterAttributeAddChosenSubtypeEffect effect) {