diff --git a/Mage.Sets/src/mage/cards/a/ArcBlade.java b/Mage.Sets/src/mage/cards/a/ArcBlade.java
index c39b9abd343..283dbb551a2 100644
--- a/Mage.Sets/src/mage/cards/a/ArcBlade.java
+++ b/Mage.Sets/src/mage/cards/a/ArcBlade.java
@@ -30,7 +30,7 @@ public final class ArcBlade extends CardImpl {
this.getSpellAbility().addEffect(ExileSpellEffect.getInstance());
// with three time counters on it.
Effect effect = new AddCountersSourceEffect(CounterType.TIME.createInstance(), StaticValue.get(3), false, true);
- effect.setText("with 3 time counters on it");
+ effect.setText("with three time counters on it");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addTarget(new TargetAnyTarget());
diff --git a/Mage.Sets/src/mage/cards/a/ArcadesTheStrategist.java b/Mage.Sets/src/mage/cards/a/ArcadesTheStrategist.java
index 0dbc363239b..c632eb2b98b 100644
--- a/Mage.Sets/src/mage/cards/a/ArcadesTheStrategist.java
+++ b/Mage.Sets/src/mage/cards/a/ArcadesTheStrategist.java
@@ -25,7 +25,7 @@ import java.util.UUID;
public final class ArcadesTheStrategist extends CardImpl {
private static final FilterControlledCreaturePermanent filter
- = new FilterControlledCreaturePermanent("creature with defender");
+ = new FilterControlledCreaturePermanent("a creature with defender");
private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent();
static {
diff --git a/Mage.Sets/src/mage/cards/b/BedlamReveler.java b/Mage.Sets/src/mage/cards/b/BedlamReveler.java
index 5e4a2b29cc6..3ced1749e1a 100644
--- a/Mage.Sets/src/mage/cards/b/BedlamReveler.java
+++ b/Mage.Sets/src/mage/cards/b/BedlamReveler.java
@@ -32,10 +32,10 @@ public final class BedlamReveler extends CardImpl {
this.toughness = new MageInt(4);
// This spell costs {1} less to cast for each instant and sorcery card in your graveyard.
- DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY);
+ DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_INSTANT_AND_SORCERY);
Ability ability = new SimpleStaticAbility(Zone.ALL, new SpellCostReductionForEachSourceEffect(1, xValue));
ability.setRuleAtTheTop(true);
- ability.addHint(new ValueHint("Instant or sourcery card in your graveyard", xValue));
+ ability.addHint(new ValueHint("Instant and sorcery card in your graveyard", xValue));
this.addAbility(ability);
// Prowess
diff --git a/Mage.Sets/src/mage/cards/c/CauterySliver.java b/Mage.Sets/src/mage/cards/c/CauterySliver.java
index 4a44395bd0a..e3a443e068e 100644
--- a/Mage.Sets/src/mage/cards/c/CauterySliver.java
+++ b/Mage.Sets/src/mage/cards/c/CauterySliver.java
@@ -5,7 +5,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
-import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.PreventDamageToTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
@@ -14,7 +14,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
-import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePlayerOrPlaneswalker;
import mage.target.common.TargetAnyTarget;
@@ -27,6 +26,8 @@ import java.util.UUID;
public final class CauterySliver extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent(SubType.SLIVER, "All Slivers");
+ private static final FilterCreaturePlayerOrPlaneswalker filter2
+ = new FilterCreaturePlayerOrPlaneswalker("player, planeswalker, or Sliver creature", SubType.SLIVER);
public CauterySliver(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{W}");
@@ -35,21 +36,27 @@ public final class CauterySliver extends CardImpl {
this.toughness = new MageInt(2);
// All Slivers have "{1}, Sacrifice this permanent: This permanent deals 1 damage to any target."
- Ability ability1 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl("1"));
- ability1.addCost(new SacrificeSourceCost());
- ability1.addTarget(new TargetAnyTarget());
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
- new GainAbilityAllEffect(ability1, Duration.WhileOnBattlefield, filter,
- "All Slivers have \"{1}, Sacrifice this permanent: This permanent deals 1 damage to any target.\"")));
+ Ability ability = new SimpleActivatedAbility(
+ new DamageTargetEffect(1, "this permanent"), new GenericManaCost(1)
+ );
+ ability.addCost(new SacrificeSourceCost());
+ ability.addTarget(new TargetAnyTarget());
+ this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(
+ ability, Duration.WhileOnBattlefield, filter, "All Slivers have \"{1}, " +
+ "Sacrifice this permanent: This permanent deals 1 damage to any target.\""
+ )));
- // All Slivers have "{1}, Sacrifice this permanent: Prevent the next 1 damage that would be dealt to target Sliver creature or player this turn."
// All Slivers have "{1}, Sacrifice this permanent: Prevent the next 1 damage that would be dealt to target player, planeswalker, or Sliver creature this turn."
- Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventDamageToTargetEffect(Duration.EndOfTurn, 1), new ManaCostsImpl("1"));
- ability2.addCost(new SacrificeSourceCost());
- ability2.addTarget(new TargetAnyTarget(new FilterCreatureOrPlayerByType(SubType.SLIVER, "Sliver creature or player")));
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
- new GainAbilityAllEffect(ability2, Duration.WhileOnBattlefield, filter,
- "All Slivers have \"{1}, Sacrifice this permanent: Prevent the next 1 damage that would be dealt to target Sliver creature or player this turn.\"")));
+ ability = new SimpleActivatedAbility(
+ new PreventDamageToTargetEffect(Duration.EndOfTurn, 1), new GenericManaCost(1)
+ );
+ ability.addCost(new SacrificeSourceCost());
+ ability.addTarget(new TargetAnyTarget(filter2));
+ this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(
+ ability, Duration.WhileOnBattlefield, filter, "All Slivers have " +
+ "\"{1}, Sacrifice this permanent: Prevent the next 1 damage " +
+ "that would be dealt to target player, planeswalker, or Sliver creature this turn.\""
+ )));
}
private CauterySliver(final CauterySliver card) {
@@ -61,11 +68,3 @@ public final class CauterySliver extends CardImpl {
return new CauterySliver(this);
}
}
-
-class FilterCreatureOrPlayerByType extends FilterCreaturePlayerOrPlaneswalker {
-
- public FilterCreatureOrPlayerByType(SubType subType, String name) {
- super(name);
- this.getPermanentFilter().add(subType.getPredicate());
- }
-}
diff --git a/Mage.Sets/src/mage/cards/c/CloudshredderSliver.java b/Mage.Sets/src/mage/cards/c/CloudshredderSliver.java
index a0a1e6f56e9..15a194d3a3a 100644
--- a/Mage.Sets/src/mage/cards/c/CloudshredderSliver.java
+++ b/Mage.Sets/src/mage/cards/c/CloudshredderSliver.java
@@ -31,7 +31,7 @@ public final class CloudshredderSliver extends CardImpl {
Ability ability = new SimpleStaticAbility(new GainAbilityControlledEffect(
FlyingAbility.getInstance(), Duration.WhileOnBattlefield,
StaticFilters.FILTER_PERMANENT_CREATURE_SLIVERS
- ));
+ ).setText("Sliver creatures you control have flying"));
ability.addEffect(new GainAbilityControlledEffect(
HasteAbility.getInstance(), Duration.WhileOnBattlefield,
StaticFilters.FILTER_PERMANENT_CREATURE_SLIVERS
diff --git a/Mage.Sets/src/mage/cards/d/DreamscapeArtist.java b/Mage.Sets/src/mage/cards/d/DreamscapeArtist.java
index fbb6bbd5f69..ac2d6b15a71 100644
--- a/Mage.Sets/src/mage/cards/d/DreamscapeArtist.java
+++ b/Mage.Sets/src/mage/cards/d/DreamscapeArtist.java
@@ -36,7 +36,7 @@ public final class DreamscapeArtist extends CardImpl {
this.toughness = new MageInt(1);
// {2}{U}, {tap}, Discard a card, Sacrifice a land: Search your library for up to two basic land cards and put them onto the battlefield. Then shuffle your library.
- TargetCardInLibrary target = new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LAND);
+ TargetCardInLibrary target = new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS);
Ability ability = new SimpleActivatedAbility(
Zone.BATTLEFIELD,
new SearchLibraryPutInPlayEffect(target, false, Outcome.PutLandInPlay),
diff --git a/Mage.Sets/src/mage/cards/e/ExquisiteFirecraft.java b/Mage.Sets/src/mage/cards/e/ExquisiteFirecraft.java
index d67f2dc52aa..19ca998c294 100644
--- a/Mage.Sets/src/mage/cards/e/ExquisiteFirecraft.java
+++ b/Mage.Sets/src/mage/cards/e/ExquisiteFirecraft.java
@@ -31,7 +31,7 @@ public final class ExquisiteFirecraft extends CardImpl {
// Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, Exquisite Firecraft can't be countered.
ContinuousRuleModifyingEffect cantBeCountered = new CantBeCounteredSourceEffect();
ConditionalContinuousRuleModifyingEffect conditionalCantBeCountered = new ConditionalContinuousRuleModifyingEffect(cantBeCountered, SpellMasteryCondition.instance);
- conditionalCantBeCountered.setText("
If there are two or more instant and/or sorcery cards in your graveyard, this spell can't be countered");
+ conditionalCantBeCountered.setText("
Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, this spell can't be countered");
Ability ability = new SimpleStaticAbility(Zone.STACK, conditionalCantBeCountered);
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/f/FiremawKavu.java b/Mage.Sets/src/mage/cards/f/FiremawKavu.java
index 1ed03c1ef1d..d5609726691 100644
--- a/Mage.Sets/src/mage/cards/f/FiremawKavu.java
+++ b/Mage.Sets/src/mage/cards/f/FiremawKavu.java
@@ -35,7 +35,7 @@ public final class FiremawKavu extends CardImpl {
this.addAbility(ability);
// When Firemaw Kavu leaves the battlefield, it deals 4 damage to target creature.
- ability = new LeavesBattlefieldTriggeredAbility(new DamageTargetEffect(4), false);
+ ability = new LeavesBattlefieldTriggeredAbility(new DamageTargetEffect(4, "it"), false);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/g/GaeasAnthem.java b/Mage.Sets/src/mage/cards/g/GaeasAnthem.java
index e7c256048f5..ae5a52b1fb4 100644
--- a/Mage.Sets/src/mage/cards/g/GaeasAnthem.java
+++ b/Mage.Sets/src/mage/cards/g/GaeasAnthem.java
@@ -1,18 +1,16 @@
-
package mage.cards.g;
-import java.util.UUID;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
-import mage.constants.Zone;
import mage.filter.StaticFilters;
+import java.util.UUID;
+
/**
- *
* @author dustinconrad
*/
public final class GaeasAnthem extends CardImpl {
@@ -21,7 +19,10 @@ public final class GaeasAnthem extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}{G}");
// Creatures you control get +1/+1.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE, false)));
+ this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(
+ 1, 1, Duration.WhileOnBattlefield,
+ StaticFilters.FILTER_PERMANENT_CREATURES, false
+ )));
}
private GaeasAnthem(final GaeasAnthem card) {
diff --git a/Mage.Sets/src/mage/cards/g/GauntletOfPower.java b/Mage.Sets/src/mage/cards/g/GauntletOfPower.java
index 5ca8d54ccde..858b4af2805 100644
--- a/Mage.Sets/src/mage/cards/g/GauntletOfPower.java
+++ b/Mage.Sets/src/mage/cards/g/GauntletOfPower.java
@@ -1,11 +1,9 @@
package mage.cards.g;
-import java.util.ArrayList;
-import java.util.List;
import mage.Mana;
import mage.ObjectColor;
import mage.abilities.Ability;
-import mage.abilities.common.EntersBattlefieldAbility;
+import mage.abilities.common.AsEntersBattlefieldAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.Effect;
@@ -20,12 +18,13 @@ import mage.filter.common.FilterCreaturePermanent;
import mage.filter.common.FilterLandPermanent;
import mage.game.Game;
import mage.game.events.GameEvent;
-import mage.game.events.GameEvent.EventType;
import mage.game.events.ManaEvent;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.targetpointer.FixedTarget;
+import java.util.ArrayList;
+import java.util.List;
import java.util.UUID;
/**
@@ -43,7 +42,7 @@ public final class GauntletOfPower extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
// As Gauntlet of Power enters the battlefield, choose a color.
- this.addAbility(new EntersBattlefieldAbility(new ChooseColorEffect(Outcome.Neutral)));
+ this.addAbility(new AsEntersBattlefieldAbility(new ChooseColorEffect(Outcome.Neutral)));
// Creatures of the chosen color get +1/+1.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GauntletOfPowerBoostEffect()));
diff --git a/Mage.Sets/src/mage/cards/g/GoblinEngineer.java b/Mage.Sets/src/mage/cards/g/GoblinEngineer.java
index 5ba01844c45..9f3cb9b6f0d 100644
--- a/Mage.Sets/src/mage/cards/g/GoblinEngineer.java
+++ b/Mage.Sets/src/mage/cards/g/GoblinEngineer.java
@@ -53,7 +53,7 @@ public final class GoblinEngineer extends CardImpl {
// {R}, {T}, Sacrifice an artifact: Return target artifact card with converted mana cost 3 or less from your graveyard to the battlefield.
Ability ability = new SimpleActivatedAbility(
- new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl("{R}")
+ new ReturnFromGraveyardToBattlefieldTargetEffect(false, false), new ManaCostsImpl("{R}")
);
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter)));
diff --git a/Mage.Sets/src/mage/cards/h/HollowOne.java b/Mage.Sets/src/mage/cards/h/HollowOne.java
index 0dfbd1af58d..8ba2e0b81cf 100644
--- a/Mage.Sets/src/mage/cards/h/HollowOne.java
+++ b/Mage.Sets/src/mage/cards/h/HollowOne.java
@@ -57,7 +57,7 @@ class HollowOneReductionEffect extends CostModificationEffectImpl {
public HollowOneReductionEffect() {
super(Duration.WhileOnStack, Outcome.Benefit, CostModificationType.REDUCE_COST);
- staticText = "{this} costs {2} less to cast for each card you've cycled or discarded this turn";
+ staticText = "this spell costs {2} less to cast for each card you've cycled or discarded this turn";
}
protected HollowOneReductionEffect(HollowOneReductionEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/i/Imperiosaur.java b/Mage.Sets/src/mage/cards/i/Imperiosaur.java
index f98024e3354..0a82b2ddba9 100644
--- a/Mage.Sets/src/mage/cards/i/Imperiosaur.java
+++ b/Mage.Sets/src/mage/cards/i/Imperiosaur.java
@@ -64,7 +64,7 @@ class ImperiosaurStaticAbility extends StaticAbility {
@Override
public String getRule() {
- return "Spend only mana produced by basic lands to cast {this}.";
+ return "Spend only mana produced by basic lands to cast this spell.";
}
}
diff --git a/Mage.Sets/src/mage/cards/j/JhoiraOfTheGhitu.java b/Mage.Sets/src/mage/cards/j/JhoiraOfTheGhitu.java
index ceb59859821..bfc7e937e9d 100644
--- a/Mage.Sets/src/mage/cards/j/JhoiraOfTheGhitu.java
+++ b/Mage.Sets/src/mage/cards/j/JhoiraOfTheGhitu.java
@@ -58,7 +58,7 @@ class JhoiraOfTheGhituSuspendEffect extends OneShotEffect {
public JhoiraOfTheGhituSuspendEffect() {
super(Outcome.PutCardInPlay);
- this.staticText = "Put four time counters on the exiled card. If it doesn't have suspend, it gains suspend (At the beginning of your upkeep, remove a time counter from that card. When the last is removed, cast it without paying its mana cost. If it's a creature, it has haste.)";
+ this.staticText = "Put four time counters on the exiled card. If it doesn't have suspend, it gains suspend. (At the beginning of your upkeep, remove a time counter from that card. When the last is removed, cast it without paying its mana cost. If it's a creature, it has haste.)";
}
public JhoiraOfTheGhituSuspendEffect(final JhoiraOfTheGhituSuspendEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java b/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java
index d3396f289e9..8fe6a6c0146 100644
--- a/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java
+++ b/Mage.Sets/src/mage/cards/k/KaervekTheMerciless.java
@@ -31,7 +31,7 @@ public final class KaervekTheMerciless extends CardImpl {
this.toughness = new MageInt(4);
// Whenever an opponent casts a spell, Kaervek the Merciless deals damage to any target equal to that spell's converted mana cost.
- Ability ability = new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new KaervekTheMercilessEffect(), StaticFilters.FILTER_SPELL, false, SetTargetPointer.SPELL);
+ Ability ability = new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new KaervekTheMercilessEffect(), StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.SPELL);
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java b/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java
index f65102a3dd7..5e65d312e3b 100644
--- a/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java
+++ b/Mage.Sets/src/mage/cards/l/LaviniaAzoriusRenegade.java
@@ -153,6 +153,6 @@ class LaviniaAzoriusRenegadeTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
- return "Whenever an opponent casts a spell, if no mana was spent to cast it, counter that spell";
+ return "Whenever an opponent casts a spell, if no mana was spent to cast it, counter that spell.";
}
}
\ No newline at end of file
diff --git a/Mage.Sets/src/mage/cards/n/NantukoShaman.java b/Mage.Sets/src/mage/cards/n/NantukoShaman.java
index 4952cf9a2d3..13317b0a2d0 100644
--- a/Mage.Sets/src/mage/cards/n/NantukoShaman.java
+++ b/Mage.Sets/src/mage/cards/n/NantukoShaman.java
@@ -41,7 +41,7 @@ public final class NantukoShaman extends CardImpl {
Ability ability = new ConditionalInterveningIfTriggeredAbility(
new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)),
new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0),
- "When {this} enters the battlefield, if you control no tapped lands, draw a card");
+ "When {this} enters the battlefield, if you control no tapped lands, draw a card.");
this.addAbility(ability);
// Suspend 1-{2}{G}{G}
diff --git a/Mage.Sets/src/mage/cards/s/SecretPlans.java b/Mage.Sets/src/mage/cards/s/SecretPlans.java
index de84fb8b472..be1ca35e0d5 100644
--- a/Mage.Sets/src/mage/cards/s/SecretPlans.java
+++ b/Mage.Sets/src/mage/cards/s/SecretPlans.java
@@ -1,7 +1,5 @@
-
package mage.cards.s;
-import java.util.UUID;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.TurnedFaceUpAllTriggeredAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
@@ -10,13 +8,13 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
-import mage.constants.Zone;
-import mage.filter.common.FilterControlledPermanent;
+import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.card.FaceDownPredicate;
+import java.util.UUID;
+
/**
- *
* @author LevelX2
*/
public final class SecretPlans extends CardImpl {
@@ -28,15 +26,18 @@ public final class SecretPlans extends CardImpl {
}
public SecretPlans(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{G}{U}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}{U}");
// Face-down creatures you control get +0/+1.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(0,1, Duration.WhileOnBattlefield, filter)));
+ this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(
+ 0, 1, Duration.WhileOnBattlefield, filter
+ )));
// Whenever a permanent you control is turned face up, draw a card.
- this.addAbility(new TurnedFaceUpAllTriggeredAbility(new DrawCardSourceControllerEffect(1), new FilterControlledPermanent()));
-
+ this.addAbility(new TurnedFaceUpAllTriggeredAbility(
+ new DrawCardSourceControllerEffect(1),
+ StaticFilters.FILTER_CONTROLLED_A_PERMANENT
+ ));
}
private SecretPlans(final SecretPlans card) {
diff --git a/Mage.Sets/src/mage/cards/s/ShivanSandMage.java b/Mage.Sets/src/mage/cards/s/ShivanSandMage.java
index f1e5c3c2091..eca0d7e3fe6 100644
--- a/Mage.Sets/src/mage/cards/s/ShivanSandMage.java
+++ b/Mage.Sets/src/mage/cards/s/ShivanSandMage.java
@@ -1,7 +1,5 @@
-
package mage.cards.s;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.Mode;
@@ -13,21 +11,30 @@ import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.SubType;
import mage.constants.Outcome;
+import mage.constants.SubType;
import mage.counters.CounterType;
+import mage.filter.common.FilterPermanentOrSuspendedCard;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetPermanentOrSuspendedCard;
+import java.util.UUID;
+
/**
- *
* @author L_J
*/
public final class ShivanSandMage extends CardImpl {
+ private static final FilterPermanentOrSuspendedCard filter
+ = new FilterPermanentOrSuspendedCard("permanent with a time counter on it or suspended card");
+
+ static {
+ filter.getPermanentFilter().add(CounterType.TIME.getPredicate());
+ }
+
public ShivanSandMage(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}");
this.subtype.add(SubType.VIASHINO);
this.subtype.add(SubType.SHAMAN);
this.power = new MageInt(3);
@@ -39,9 +46,8 @@ public final class ShivanSandMage extends CardImpl {
ability.addTarget(new TargetPermanentOrSuspendedCard());
// Put two time counters on target permanent with a time counter on it or suspended card.
- Mode mode = new Mode();
- mode.addEffect(new ShivanSandMageEffect(true));
- mode.addTarget(new TargetPermanentOrSuspendedCard());
+ Mode mode = new Mode(new ShivanSandMageEffect(true));
+ mode.addTarget(new TargetPermanentOrSuspendedCard(filter, false));
ability.addMode(mode);
ability.getModes().addMode(mode);
this.addAbility(ability);
@@ -61,20 +67,20 @@ public final class ShivanSandMage extends CardImpl {
}
class ShivanSandMageEffect extends OneShotEffect {
-
+
private final boolean addCounters;
- public ShivanSandMageEffect(boolean addCounters) {
+ ShivanSandMageEffect(boolean addCounters) {
super(Outcome.Benefit);
this.addCounters = addCounters;
if (addCounters) {
- this.staticText = "put two time counters on target permanent or suspended card";
+ this.staticText = "put two time counters on target permanent with a time counter on it or suspended card";
} else {
this.staticText = "remove two time counters from target permanent or suspended card";
}
}
- public ShivanSandMageEffect(final ShivanSandMageEffect effect) {
+ private ShivanSandMageEffect(final ShivanSandMageEffect effect) {
super(effect);
this.addCounters = effect.addCounters;
}
diff --git a/Mage.Sets/src/mage/cards/s/SidewinderSliver.java b/Mage.Sets/src/mage/cards/s/SidewinderSliver.java
index cebb60974ee..2ffb7a4ff66 100644
--- a/Mage.Sets/src/mage/cards/s/SidewinderSliver.java
+++ b/Mage.Sets/src/mage/cards/s/SidewinderSliver.java
@@ -36,7 +36,7 @@ public final class SidewinderSliver extends CardImpl {
// All Sliver creatures have flanking.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
new GainAbilityAllEffect(new FlankingAbility(), Duration.WhileOnBattlefield, filter, false)
- .setText("all Slivers have flanking")
+ .setText("all Sliver creatures have flanking")
));
}
diff --git a/Mage.Sets/src/mage/cards/s/SkitteringMonstrosity.java b/Mage.Sets/src/mage/cards/s/SkitteringMonstrosity.java
index 25a20ef5c47..be920cadcad 100644
--- a/Mage.Sets/src/mage/cards/s/SkitteringMonstrosity.java
+++ b/Mage.Sets/src/mage/cards/s/SkitteringMonstrosity.java
@@ -1,7 +1,5 @@
-
package mage.cards.s;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.SacrificeSourceEffect;
@@ -11,8 +9,9 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.StaticFilters;
+import java.util.UUID;
+
/**
- *
* @author nigelzor
*/
public final class SkitteringMonstrosity extends CardImpl {
@@ -24,7 +23,10 @@ public final class SkitteringMonstrosity extends CardImpl {
this.toughness = new MageInt(5);
// When you cast a creature spell, sacrifice Skittering Monstrosity.
- this.addAbility(new SpellCastControllerTriggeredAbility(new SacrificeSourceEffect(), StaticFilters.FILTER_SPELL_A_CREATURE, false));
+ this.addAbility(new SpellCastControllerTriggeredAbility(
+ new SacrificeSourceEffect(), StaticFilters.FILTER_SPELL_A_CREATURE,
+ false, "When you cast a creature spell, sacrifice {this}."
+ ));
}
private SkitteringMonstrosity(final SkitteringMonstrosity card) {
diff --git a/Mage.Sets/src/mage/cards/s/SlimefootTheStowaway.java b/Mage.Sets/src/mage/cards/s/SlimefootTheStowaway.java
index 5cf4db8334d..72f5a00063a 100644
--- a/Mage.Sets/src/mage/cards/s/SlimefootTheStowaway.java
+++ b/Mage.Sets/src/mage/cards/s/SlimefootTheStowaway.java
@@ -1,7 +1,5 @@
-
package mage.cards.s;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DiesCreatureTriggeredAbility;
@@ -10,27 +8,24 @@ import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DamagePlayersEffect;
import mage.abilities.effects.common.GainLifeEffect;
-import mage.constants.SubType;
-import mage.constants.SuperType;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.constants.SuperType;
import mage.constants.TargetController;
-import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.game.permanent.token.SaprolingToken;
+import java.util.UUID;
+
/**
- *
* @author TheElk801
*/
public final class SlimefootTheStowaway extends CardImpl {
- private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Saproling you control");
-
- static {
- filter.add(SubType.SAPROLING.getPredicate());
- }
+ private static final FilterControlledPermanent filter
+ = new FilterControlledPermanent(SubType.SAPROLING, "a Saproling you control");
public SlimefootTheStowaway(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{G}");
@@ -41,12 +36,14 @@ public final class SlimefootTheStowaway extends CardImpl {
this.toughness = new MageInt(3);
// Whenever a Saproling you control dies, Slimefoot, the Stowaway deals 1 damage to each opponent and you gain 1 life.
- Ability ability = new DiesCreatureTriggeredAbility(new DamagePlayersEffect(1, TargetController.OPPONENT), false, filter);
- ability.addEffect(new GainLifeEffect(1));
+ Ability ability = new DiesCreatureTriggeredAbility(
+ new DamagePlayersEffect(1, TargetController.OPPONENT), false, filter
+ );
+ ability.addEffect(new GainLifeEffect(1).concatBy("and"));
this.addAbility(ability);
// {4}: Create a 1/1 green Saproling creature token.
- this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SaprolingToken()), new ManaCostsImpl("{4}")));
+ this.addAbility(new SimpleActivatedAbility(new CreateTokenEffect(new SaprolingToken()), new ManaCostsImpl("{4}")));
}
private SlimefootTheStowaway(final SlimefootTheStowaway card) {
diff --git a/Mage.Sets/src/mage/cards/s/StrengthInNumbers.java b/Mage.Sets/src/mage/cards/s/StrengthInNumbers.java
index 0f9517387ad..e855988473f 100644
--- a/Mage.Sets/src/mage/cards/s/StrengthInNumbers.java
+++ b/Mage.Sets/src/mage/cards/s/StrengthInNumbers.java
@@ -1,7 +1,6 @@
-
package mage.cards.s;
-import java.util.UUID;
+import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.AttackingCreatureCount;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
@@ -12,18 +11,25 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.target.common.TargetCreaturePermanent;
+import java.util.UUID;
+
/**
- *
* @author escplan9 (Derek Monturo - dmontur1 at gmail dot com)
*/
public final class StrengthInNumbers extends CardImpl {
+ private static final DynamicValue xValue = new AttackingCreatureCount();
+
public StrengthInNumbers(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{G}");
+ super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}");
// Until end of turn, target creature gains trample and gets +X/+X, where X is the number of attacking creatures.
- this.getSpellAbility().addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn));
- this.getSpellAbility().addEffect(new BoostTargetEffect(new AttackingCreatureCount("the number of attacking creatures"), new AttackingCreatureCount(), Duration.EndOfTurn, true));
+ this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
+ TrampleAbility.getInstance(), Duration.EndOfTurn
+ ).setText("Until end of turn, target creature gains trample"));
+ this.getSpellAbility().addEffect(new BoostTargetEffect(
+ xValue, xValue, Duration.EndOfTurn, true
+ ).setText("and gets +X/+X, where X is the number of attacking creatures"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
}
diff --git a/Mage.Sets/src/mage/cards/t/TemurAscendancy.java b/Mage.Sets/src/mage/cards/t/TemurAscendancy.java
index 808d0fda8c8..e2a327fa73e 100644
--- a/Mage.Sets/src/mage/cards/t/TemurAscendancy.java
+++ b/Mage.Sets/src/mage/cards/t/TemurAscendancy.java
@@ -23,7 +23,7 @@ import mage.filter.predicate.mageobject.PowerPredicate;
*/
public final class TemurAscendancy extends CardImpl {
- final private static FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with power 4 or greater");
+ final private static FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature with power 4 or greater");
static {
filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 3));
}
diff --git a/Mage.Sets/src/mage/cards/t/ThelonOfHavenwood.java b/Mage.Sets/src/mage/cards/t/ThelonOfHavenwood.java
index e60794c90af..b87598f205f 100644
--- a/Mage.Sets/src/mage/cards/t/ThelonOfHavenwood.java
+++ b/Mage.Sets/src/mage/cards/t/ThelonOfHavenwood.java
@@ -47,7 +47,7 @@ public final class ThelonOfHavenwood extends CardImpl {
// {B}{G}, Exile a Fungus card from a graveyard: Put a spore counter on each Fungus on the battlefield.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersAllEffect(CounterType.SPORE.createInstance(), filterPermanent), new ManaCostsImpl<>("{B}{G}"));
- ability.addCost(new ExileFromGraveCost(new TargetCardInASingleGraveyard(1, 1, filterCard)));
+ ability.addCost(new ExileFromGraveCost(new TargetCardInASingleGraveyard(1, 1, filterCard), "exile a Fungus card from a graveyard"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/t/TheloniteHermit.java b/Mage.Sets/src/mage/cards/t/TheloniteHermit.java
index 87a25f7ae25..7f78ecf9f1b 100644
--- a/Mage.Sets/src/mage/cards/t/TheloniteHermit.java
+++ b/Mage.Sets/src/mage/cards/t/TheloniteHermit.java
@@ -24,7 +24,7 @@ import mage.game.permanent.token.SaprolingToken;
*/
public final class TheloniteHermit extends CardImpl {
- private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Saproling creatures");
+ private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("All Saprolings");
static {
filter.add(SubType.SAPROLING.getPredicate());
diff --git a/Mage.Sets/src/mage/cards/t/Timebender.java b/Mage.Sets/src/mage/cards/t/Timebender.java
index 75ab3efbd60..6fba549bd17 100644
--- a/Mage.Sets/src/mage/cards/t/Timebender.java
+++ b/Mage.Sets/src/mage/cards/t/Timebender.java
@@ -1,7 +1,5 @@
-
package mage.cards.t;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.Mode;
@@ -13,21 +11,30 @@ import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.SubType;
import mage.constants.Outcome;
+import mage.constants.SubType;
import mage.counters.CounterType;
+import mage.filter.common.FilterPermanentOrSuspendedCard;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetPermanentOrSuspendedCard;
+import java.util.UUID;
+
/**
- *
* @author L_J
*/
public final class Timebender extends CardImpl {
+ private static final FilterPermanentOrSuspendedCard filter
+ = new FilterPermanentOrSuspendedCard("permanent with a time counter on it or suspended card");
+
+ static {
+ filter.getPermanentFilter().add(CounterType.TIME.getPredicate());
+ }
+
public Timebender(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.WIZARD);
this.power = new MageInt(1);
@@ -42,9 +49,8 @@ public final class Timebender extends CardImpl {
ability.addTarget(new TargetPermanentOrSuspendedCard());
// Put two time counters on target permanent with a time counter on it or suspended card.
- Mode mode = new Mode();
- mode.addEffect(new TimebenderEffect(true));
- mode.addTarget(new TargetPermanentOrSuspendedCard());
+ Mode mode = new Mode(new TimebenderEffect(true));
+ mode.addTarget(new TargetPermanentOrSuspendedCard(filter, false));
ability.addMode(mode);
ability.getModes().addMode(mode);
this.addAbility(ability);
@@ -62,20 +68,20 @@ public final class Timebender extends CardImpl {
}
class TimebenderEffect extends OneShotEffect {
-
+
private final boolean addCounters;
- public TimebenderEffect(boolean addCounters) {
+ TimebenderEffect(boolean addCounters) {
super(Outcome.Benefit);
this.addCounters = addCounters;
if (addCounters) {
- this.staticText = "put two time counters on target permanent or suspended card";
+ this.staticText = "put two time counters on target permanent with a time counter on it or suspended card";
} else {
this.staticText = "remove two time counters from target permanent or suspended card";
}
}
- public TimebenderEffect(final TimebenderEffect effect) {
+ private TimebenderEffect(final TimebenderEffect effect) {
super(effect);
this.addCounters = effect.addCounters;
}
diff --git a/Mage.Sets/src/mage/cards/t/TrompTheDomains.java b/Mage.Sets/src/mage/cards/t/TrompTheDomains.java
index 99a06632f4d..7c221891994 100644
--- a/Mage.Sets/src/mage/cards/t/TrompTheDomains.java
+++ b/Mage.Sets/src/mage/cards/t/TrompTheDomains.java
@@ -25,7 +25,7 @@ public final class TrompTheDomains extends CardImpl {
// Domain - Until end of turn, creatures you control gain trample and get +1/+1 for each basic land type among lands you control.
Effect effect = new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn);
- effect.setText("Domain — Until end of turn, creatures you control gain Trample");
+ effect.setText("Domain — Until end of turn, creatures you control gain trample");
this.getSpellAbility().addEffect(effect);
DynamicValue domain = new DomainValue();
effect = new BoostControlledEffect(domain, domain, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false);
diff --git a/Mage/src/main/java/mage/abilities/CompoundAbility.java b/Mage/src/main/java/mage/abilities/CompoundAbility.java
index e07d9349804..9e4afc1b203 100644
--- a/Mage/src/main/java/mage/abilities/CompoundAbility.java
+++ b/Mage/src/main/java/mage/abilities/CompoundAbility.java
@@ -7,9 +7,9 @@ import java.util.List;
* @author noxx
*/
public class CompoundAbility extends AbilitiesImpl {
-
+
private String ruleText;
-
+
public CompoundAbility(Ability... abilities) {
this(null, abilities);
}
@@ -31,11 +31,13 @@ public class CompoundAbility extends AbilitiesImpl {
}
StringBuilder sb = new StringBuilder();
- List rules = super.getRules(null,false);
+ List rules = super.getRules(null, false);
for (int index = 0; index < rules.size(); index++) {
if (index > 0) {
if (index < rules.size() - 1) {
sb.append(", ");
+ } else if (rules.size() > 2) {
+ sb.append(", and ");
} else {
sb.append(" and ");
}
diff --git a/Mage/src/main/java/mage/abilities/costs/common/ExileFromGraveCost.java b/Mage/src/main/java/mage/abilities/costs/common/ExileFromGraveCost.java
index af8299e18eb..5a9377fe137 100644
--- a/Mage/src/main/java/mage/abilities/costs/common/ExileFromGraveCost.java
+++ b/Mage/src/main/java/mage/abilities/costs/common/ExileFromGraveCost.java
@@ -1,9 +1,6 @@
package mage.abilities.costs.common;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl;
@@ -19,8 +16,11 @@ import mage.target.common.TargetCardInYourGraveyard;
import mage.target.targetpointer.FixedTargets;
import mage.util.CardUtil;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
- *
* @author nantuko
*/
public class ExileFromGraveCost extends CostImpl {
@@ -39,7 +39,7 @@ public class ExileFromGraveCost extends CostImpl {
+ ' ' + target.getTargetName();
} else {
this.text = "exile "
- + (target.getTargetName().startsWith("card ") ? "a ":"")
+ + (target.getTargetName().startsWith("card ") ? "a " : "")
+ target.getTargetName();
}
if (!this.text.endsWith(" from your graveyard")) {
@@ -53,6 +53,12 @@ public class ExileFromGraveCost extends CostImpl {
this.text = text;
}
+ public ExileFromGraveCost(TargetCardInASingleGraveyard target, String text) {
+ target.setNotTarget(true);
+ this.addTarget(target);
+ this.text = text;
+ }
+
public ExileFromGraveCost(TargetCardInASingleGraveyard target) {
target.setNotTarget(true);
this.addTarget(target);
diff --git a/Mage/src/main/java/mage/abilities/effects/common/SacrificeOpponentsEffect.java b/Mage/src/main/java/mage/abilities/effects/common/SacrificeOpponentsEffect.java
index f866c26fc76..e86bae36b4c 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/SacrificeOpponentsEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/SacrificeOpponentsEffect.java
@@ -1,8 +1,5 @@
package mage.abilities.effects.common;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.StaticValue;
@@ -16,6 +13,10 @@ import mage.players.Player;
import mage.target.TargetPermanent;
import mage.util.CardUtil;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
* All opponents have to sacrifice [amount] permanents that match the [filter].
*
@@ -82,17 +83,16 @@ public class SacrificeOpponentsEffect extends OneShotEffect {
StringBuilder sb = new StringBuilder();
sb.append("each opponent sacrifices ");
if (amount.toString().equals("X")) {
- sb.append(amount.toString());
+ sb.append(amount.toString()).append(' ');
} else {
if (amount.toString().equals("1")) {
if (!filter.getMessage().startsWith("a ") && !filter.getMessage().startsWith("an ")) {
- sb.append('a');
+ sb.append("a ");
}
} else {
- sb.append(CardUtil.numberToText(amount.toString()));
+ sb.append(CardUtil.numberToText(amount.toString())).append(' ');
}
}
- sb.append(' ');
sb.append(filter.getMessage());
staticText = sb.toString();
}
diff --git a/Mage/src/main/java/mage/abilities/keyword/CyclingAbility.java b/Mage/src/main/java/mage/abilities/keyword/CyclingAbility.java
index e236cd7fb94..83fb2c1071a 100644
--- a/Mage/src/main/java/mage/abilities/keyword/CyclingAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/CyclingAbility.java
@@ -9,6 +9,7 @@ import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.target.common.TargetCardInLibrary;
+import mage.util.CardUtil;
/**
* @author BetaSteward_at_googlemail.com
@@ -47,11 +48,11 @@ public class CyclingAbility extends ActivatedAbilityImpl {
public String getRule() {
StringBuilder rule = new StringBuilder(this.text);
if (cost instanceof ManaCost) {
- rule.append(' ');
+ rule.append(' ').append(cost.getText());
} else {
- rule.append("—");
+ rule.append("—").append(CardUtil.getTextWithFirstCharUpperCase(cost.getText())).append('.');
}
- rule.append(cost.getText()).append(" (").append(super.getRule(true)).append(")");
+ rule.append(" (").append(super.getRule(true)).append(")");
return rule.toString();
}
}
diff --git a/Mage/src/main/java/mage/abilities/keyword/EchoAbility.java b/Mage/src/main/java/mage/abilities/keyword/EchoAbility.java
index afdda45c0de..451fa864ca4 100644
--- a/Mage/src/main/java/mage/abilities/keyword/EchoAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/EchoAbility.java
@@ -1,4 +1,3 @@
-
package mage.abilities.keyword;
import mage.abilities.TriggeredAbilityImpl;
@@ -15,7 +14,6 @@ import mage.game.events.GameEvent;
import java.util.UUID;
/**
- *
* @author Backfir3
*/
public class EchoAbility extends TriggeredAbilityImpl {
@@ -117,6 +115,9 @@ public class EchoAbility extends TriggeredAbilityImpl {
if (echoCosts != null) {
sb.append(echoCosts.getText());
}
+ if (!manaEcho) {
+ sb.append('.');
+ }
}
sb.append(" (At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost.)");
return sb.toString();
diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java
index 612bad629c1..9ad63e7bd9b 100644
--- a/Mage/src/main/java/mage/filter/StaticFilters.java
+++ b/Mage/src/main/java/mage/filter/StaticFilters.java
@@ -298,6 +298,12 @@ public final class StaticFilters {
FILTER_CONTROLLED_PERMANENT.setLockedFilter(true);
}
+ public static final FilterControlledPermanent FILTER_CONTROLLED_A_PERMANENT = new FilterControlledPermanent("a permanent you control");
+
+ static {
+ FILTER_CONTROLLED_A_PERMANENT.setLockedFilter(true);
+ }
+
public static final FilterControlledPermanent FILTER_CONTROLLED_PERMANENT_ARTIFACT = new FilterControlledArtifactPermanent();
static {
diff --git a/Mage/src/main/java/mage/game/permanent/token/AssemblyWorkerToken.java b/Mage/src/main/java/mage/game/permanent/token/AssemblyWorkerToken.java
index 0f8cd508130..dfb513411a0 100644
--- a/Mage/src/main/java/mage/game/permanent/token/AssemblyWorkerToken.java
+++ b/Mage/src/main/java/mage/game/permanent/token/AssemblyWorkerToken.java
@@ -14,7 +14,7 @@ import java.util.Arrays;
public final class AssemblyWorkerToken extends TokenImpl {
public AssemblyWorkerToken() {
- super("Assembly-Worker", "2/2 Assembly-Worker artifact creature");
+ super("Assembly-Worker", "2/2 colorless Assembly-Worker artifact creature token");
cardType.add(CardType.ARTIFACT);
cardType.add(CardType.CREATURE);
subtype.add(SubType.ASSEMBLY_WORKER);
diff --git a/Mage/src/main/java/mage/game/permanent/token/LlanowarElvesToken.java b/Mage/src/main/java/mage/game/permanent/token/LlanowarElvesToken.java
index 799e8600b73..4dc4bd75fb9 100644
--- a/Mage/src/main/java/mage/game/permanent/token/LlanowarElvesToken.java
+++ b/Mage/src/main/java/mage/game/permanent/token/LlanowarElvesToken.java
@@ -14,7 +14,7 @@ import java.util.Arrays;
public final class LlanowarElvesToken extends TokenImpl {
public LlanowarElvesToken() {
- super("Llanowar Elves", "1/1 green Elf Druid creature token named Llanowar Elves with \"{T}: Add {G}.\"");
+ super("Llanowar Elves", "1/1 green Elf Druid creature token named Llanowar Elves. It has \"{T}: Add {G}.\"");
cardType.add(CardType.CREATURE);
color.setGreen(true);
subtype.add(SubType.ELF);
diff --git a/Mage/src/main/java/mage/game/permanent/token/MetallicSliverToken.java b/Mage/src/main/java/mage/game/permanent/token/MetallicSliverToken.java
index 5e445dbc5e5..7ee8dfc3652 100644
--- a/Mage/src/main/java/mage/game/permanent/token/MetallicSliverToken.java
+++ b/Mage/src/main/java/mage/game/permanent/token/MetallicSliverToken.java
@@ -14,7 +14,7 @@ import java.util.Arrays;
public final class MetallicSliverToken extends TokenImpl {
public MetallicSliverToken() {
- super("Metallic Sliver", "1/1 colorless Sliver creature token named Metallic Sliver");
+ super("Metallic Sliver", "1/1 colorless Sliver artifact creature token named Metallic Sliver");
cardType.add(CardType.CREATURE);
cardType.add(CardType.ARTIFACT);
subtype.add(SubType.SLIVER);