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) {