diff --git a/Mage.Sets/src/mage/cards/m/MagusLuceaKane.java b/Mage.Sets/src/mage/cards/m/MagusLuceaKane.java
index 0edc2f14b32..7b9e5b36826 100644
--- a/Mage.Sets/src/mage/cards/m/MagusLuceaKane.java
+++ b/Mage.Sets/src/mage/cards/m/MagusLuceaKane.java
@@ -104,11 +104,9 @@ class MagusLuceaKaneTriggeredAbility extends DelayedTriggeredAbility {
// spell
if (event.getType() == GameEvent.EventType.SPELL_CAST) {
Spell spell = game.getStack().getSpell(event.getTargetId());
- if (spell != null && spell.isInstantOrSorcery(game)) {
- if (spell.getSpellAbility().getManaCostsToPay().containsX()) {
- this.getEffects().setValue("stackObject", (StackObject) spell);
- return true;
- }
+ if (spell != null && spell.getSpellAbility().getManaCostsToPay().containsX()) {
+ this.getEffects().setValue("stackObject", (StackObject) spell);
+ return true;
}
}
return false;
diff --git a/Mage.Sets/src/mage/cards/p/PhantomNomad.java b/Mage.Sets/src/mage/cards/p/PhantomNomad.java
index f6493a25bfd..c80a7084443 100644
--- a/Mage.Sets/src/mage/cards/p/PhantomNomad.java
+++ b/Mage.Sets/src/mage/cards/p/PhantomNomad.java
@@ -30,7 +30,7 @@ public final class PhantomNomad extends CardImpl {
// Phantom Nomad enters the battlefield with two +1/+1 counters on it.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)),
- "two +1/+1 counters on it"));
+ "with two +1/+1 counters on it"));
// If damage would be dealt to Phantom Nomad, prevent that damage. Remove a +1/+1 counter from Phantom Nomad.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PhantomPreventionEffect()));
diff --git a/Mage.Sets/src/mage/cards/t/ThaliasLieutenant.java b/Mage.Sets/src/mage/cards/t/ThaliasLieutenant.java
index 1b82f206f33..febd8576b56 100644
--- a/Mage.Sets/src/mage/cards/t/ThaliasLieutenant.java
+++ b/Mage.Sets/src/mage/cards/t/ThaliasLieutenant.java
@@ -34,10 +34,10 @@ public final class ThaliasLieutenant extends CardImpl {
this.power = new MageInt(1);
this.toughness = new MageInt(1);
- // When Thalia's Lieutenant enters the battlefield, put +1/+1 counter on each other Human you control.
- this.addAbility(new EntersBattlefieldTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), filter).setText("put +1/+1 counter on each other Human you control"), false));
+ // When Thalia's Lieutenant enters the battlefield, put a +1/+1 counter on each other Human you control.
+ this.addAbility(new EntersBattlefieldTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), filter).setText("put a +1/+1 counter on each other Human you control"), false));
- // Whenever another Human enters the battlefield under you control, put a +1/+1 counter on Thalia's Lieutenant.
+ // Whenever another Human enters the battlefield under your control, put a +1/+1 counter on Thalia's Lieutenant.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter));
}
diff --git a/Mage/src/main/java/mage/abilities/costs/common/PutCountersSourceCost.java b/Mage/src/main/java/mage/abilities/costs/common/PutCountersSourceCost.java
index 85dcf664b2e..b25fcbfe0dd 100644
--- a/Mage/src/main/java/mage/abilities/costs/common/PutCountersSourceCost.java
+++ b/Mage/src/main/java/mage/abilities/costs/common/PutCountersSourceCost.java
@@ -16,25 +16,16 @@ import mage.util.CardUtil;
*/
public class PutCountersSourceCost extends CostImpl {
- private final int amount;
- private final String name;
private final Counter counter;
public PutCountersSourceCost(Counter counter) {
this.counter = counter.copy();
- this.amount = counter.getCount();
- this.name = counter.getName();
- this.text = new StringBuilder("Put ").append((amount == 1 ? "a" : CardUtil.numberToText(amount)))
- .append(' ').append(name).append(" counter").append((amount != 1 ? "s" : ""))
- .append(" on {this}").toString();
-
+ this.text = "Put " + counter.getDescription() + " on {this}";
}
public PutCountersSourceCost(PutCountersSourceCost cost) {
super(cost);
this.counter = cost.counter;
- this.amount = cost.amount;
- this.name = cost.name;
}
@Override
diff --git a/Mage/src/main/java/mage/abilities/effects/common/counter/AddPoisonCounterTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/counter/AddPoisonCounterTargetEffect.java
index 93e748a3bb9..9fc8ffd3871 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/counter/AddPoisonCounterTargetEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/counter/AddPoisonCounterTargetEffect.java
@@ -53,6 +53,6 @@ public class AddPoisonCounterTargetEffect extends OneShotEffect {
}
return getTargetPointer().describeTargets(mode.getTargets(), "it") +
(getTargetPointer().isPlural(mode.getTargets()) ? " get " : " gets ") +
- CardUtil.numberToText(amount, "a") + " poison counter" + (amount > 1 ? "s" : "");
+ CardUtil.getSimpleCountersText(amount, "a", "poison");
}
}
diff --git a/Mage/src/main/java/mage/abilities/effects/common/counter/GetEnergyCountersControllerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/counter/GetEnergyCountersControllerEffect.java
index f33f82445be..1fac77dd0ff 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/counter/GetEnergyCountersControllerEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/counter/GetEnergyCountersControllerEffect.java
@@ -57,9 +57,7 @@ public class GetEnergyCountersControllerEffect extends OneShotEffect {
sb.append("{E}");
}
sb.append(" (");
- sb.append(CardUtil.numberToText(val, "an"));
- sb.append(" energy counter");
- sb.append(val > 1 ? "s" : "");
+ sb.append(CardUtil.getSimpleCountersText(val, "an", "energy"));
sb.append(")");
if ((value instanceof StaticValue)) {
sb.append('.');
diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/IncubateEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/IncubateEffect.java
index 4111c12f8aa..15883a3181c 100644
--- a/Mage/src/main/java/mage/abilities/effects/keyword/IncubateEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/keyword/IncubateEffect.java
@@ -23,7 +23,7 @@ public class IncubateEffect extends OneShotEffect {
super(Outcome.Detriment);
this.amount = amount;
staticText = "incubate " + amount + ". (Create an Incubator artifact token with " +
- CardUtil.numberToText(amount, "a") + " +1/+1 counter" + (amount > 1 ? "s" : "") +
+ CardUtil.getOneOneCountersText(amount) +
" on it and \"{2}: Transform this artifact.\" It transforms into a 0/0 Phyrexian artifact creature.)";
}
diff --git a/Mage/src/main/java/mage/abilities/keyword/AwakenAbility.java b/Mage/src/main/java/mage/abilities/keyword/AwakenAbility.java
index ba9a5db7585..2582644d5f5 100644
--- a/Mage/src/main/java/mage/abilities/keyword/AwakenAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/AwakenAbility.java
@@ -52,8 +52,8 @@ public class AwakenAbility extends SpellAbility {
this.awakenValue = awakenValue;
rule = "Awaken " + awakenValue + "—" + awakenCosts
+ " (If you cast this spell for " + awakenCosts + ", also put "
- + CardUtil.numberToText(awakenValue, "a")
- + " +1/+1 counters on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)";
+ + CardUtil.getOneOneCountersText(awakenValue)
+ + " on target land you control and it becomes a 0/0 Elemental creature with haste. It's still a land.)";
}
protected AwakenAbility(final AwakenAbility ability) {
@@ -81,7 +81,7 @@ public class AwakenAbility extends SpellAbility {
private AwakenEffect() {
super(Outcome.BoostCreature);
- this.staticText = "put " + CardUtil.numberToText(awakenValue, "a") + " +1/+1 counters on target land you control";
+ this.staticText = "put " + CardUtil.getOneOneCountersText(awakenValue) +" on target land you control";
}
protected AwakenEffect(final AwakenEffect effect) {
diff --git a/Mage/src/main/java/mage/abilities/keyword/BackupAbility.java b/Mage/src/main/java/mage/abilities/keyword/BackupAbility.java
index 78fda570d13..225a6016b45 100644
--- a/Mage/src/main/java/mage/abilities/keyword/BackupAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/BackupAbility.java
@@ -71,9 +71,10 @@ public class BackupAbility extends EntersBattlefieldTriggeredAbility {
@Override
public String getRule() {
- return "Backup " + amount + " (When this creature enters the battlefield, " +
- "put a +1/+1 counter on target creature. If that's another creature, " +
- "it gains the following abilit" + (abilitiesToAdd.size() > 1 ? "ies" : "y") + " until end of turn.)";
+ return "Backup " + amount + " (When this creature enters the battlefield," +
+ " put " + CardUtil.getOneOneCountersText(amount) +
+ " on target creature. If that's another creature, it gains the following" +
+ " abilit" + (abilitiesToAdd.size() > 1 ? "ies" : "y") + " until end of turn.)";
}
public void addAbility(Ability ability) {
diff --git a/Mage/src/main/java/mage/abilities/keyword/BloodthirstAbility.java b/Mage/src/main/java/mage/abilities/keyword/BloodthirstAbility.java
index 950f5de559b..140c8fe3f41 100644
--- a/Mage/src/main/java/mage/abilities/keyword/BloodthirstAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/BloodthirstAbility.java
@@ -39,15 +39,9 @@ public class BloodthirstAbility extends EntersBattlefieldAbility {
@Override
public String getRule() {
- StringBuilder sb = new StringBuilder("Bloodthirst ").append(amount)
- .append(" (If an opponent was dealt damage this turn, this creature enters the battlefield with ");
- if (amount == 1) {
- sb.append("a +1/+1 counter");
- } else {
- sb.append(CardUtil.numberToText(amount)).append(" +1/+1 counters");
- }
- sb.append(" on it.)");
- return sb.toString();
+ return "Bloodthirst " + amount +
+ " (If an opponent was dealt damage this turn, this creature enters the battlefield with " +
+ CardUtil.getOneOneCountersText(amount) + " on it.)";
}
}
diff --git a/Mage/src/main/java/mage/abilities/keyword/FabricateAbility.java b/Mage/src/main/java/mage/abilities/keyword/FabricateAbility.java
index 3ed2848c066..e857a2adfb2 100644
--- a/Mage/src/main/java/mage/abilities/keyword/FabricateAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/FabricateAbility.java
@@ -38,7 +38,7 @@ public class FabricateAbility extends EntersBattlefieldTriggeredAbility {
@Override
public String getRule() {
return "Fabricate " + value + " (When this creature enters the battlefield, put "
- + CardUtil.numberToText(value, "a") + " +1/+1 counter" + (value > 1 ? "s" : "")
+ + CardUtil.getOneOneCountersText(value)
+ " on it or create " + CardUtil.numberToText(value, "a")
+ " 1/1 colorless Servo artifact creature token" + (value > 1 ? "s" : "") + ".)";
}
@@ -72,7 +72,7 @@ class FabricateEffect extends OneShotEffect {
Outcome.BoostCreature,
"Fabricate " + value,
null,
- "Put " + CardUtil.numberToText(value, "a") + " +1/+1 counter" + (value > 1 ? "s" : ""),
+ "Put " + CardUtil.getOneOneCountersText(value),
"Create " + CardUtil.numberToText(value, "a") + " 1/1 token" + (value > 1 ? "s" : ""),
source,
game)) {
diff --git a/Mage/src/main/java/mage/abilities/keyword/GraftAbility.java b/Mage/src/main/java/mage/abilities/keyword/GraftAbility.java
index 6663d65b3c2..ce0ea36581a 100644
--- a/Mage/src/main/java/mage/abilities/keyword/GraftAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/GraftAbility.java
@@ -87,12 +87,9 @@ public class GraftAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
- StringBuilder sb = new StringBuilder("Graft");
- sb.append(' ').append(amount).append(" (This ").append(cardtype).append(" enters the battlefield with ")
- .append(amount == 1 ? "a" : CardUtil.numberToText(amount))
- .append(" +1/+1 counter on it. Whenever a creature enters the battlefield, you may move a +1/+1 counter from this ")
- .append(cardtype).append(" onto it.)");
- return sb.toString();
+ return "Graft" + ' ' + amount + " (This " + cardtype + " enters the battlefield with "
+ + CardUtil.getOneOneCountersText(amount) + " on it. Whenever " + (cardtype.contains("creature") ? "another" : "a")
+ + " creature enters the battlefield, you may move a +1/+1 counter from this " + cardtype + " onto it.)";
}
}
@@ -103,7 +100,7 @@ class GraftStaticAbility extends StaticAbility {
public GraftStaticAbility(int amount) {
super(Zone.ALL, new EntersBattlefieldEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance(amount))));
- ruleText = new StringBuilder("This enters the battlefield with ").append(amount).append(" +1/+1 counter on it.").toString();
+ ruleText = "This enters the battlefield with " + CardUtil.getOneOneCountersText(amount) + " on it.";
this.setRuleVisible(false);
}
diff --git a/Mage/src/main/java/mage/abilities/keyword/ModularAbility.java b/Mage/src/main/java/mage/abilities/keyword/ModularAbility.java
index 4b716fe1b9a..64467254580 100644
--- a/Mage/src/main/java/mage/abilities/keyword/ModularAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/ModularAbility.java
@@ -89,16 +89,14 @@ public class ModularAbility extends DiesSourceTriggeredAbility {
@Override
public String getRule() {
- StringBuilder sb = new StringBuilder("Modular");
if (sunburst) {
- sb.append("—Sunburst (This enters the battlefield with a +1/+1 counter on it for each color of mana spent to cast it. When it dies, you may put its +1/+1 counters on target artifact creature.)");
+ return "Modular—Sunburst (This enters the battlefield with a +1/+1 counter on it for each"
+ + " color of mana spent to cast it. When it dies, you may put its +1/+1 counters on target artifact creature.)";
} else {
- sb.append(' ').append(amount).append(" (This creature enters the battlefield with ")
- .append(CardUtil.numberToText(amount, "a"))
- .append(" +1/+1 counter").append(amount != 1 ? "s" : "")
- .append(" on it. When it dies, you may put its +1/+1 counters on target artifact creature.)");
+ return "Modular " + amount + " (This creature enters the battlefield with " +
+ CardUtil.getOneOneCountersText(amount) +
+ " on it. When it dies, you may put its +1/+1 counters on target artifact creature.)";
}
- return sb.toString();
}
@Override
@@ -113,7 +111,7 @@ class ModularStaticAbility extends StaticAbility {
ModularStaticAbility(int amount) {
super(Zone.ALL, new EntersBattlefieldEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance(amount))));
- ruleText = "This enters the battlefield with " + CardUtil.numberToText(amount, "a") + " +1/+1 counter" + (amount != 1 ? "s" : "") + " on it.";
+ ruleText = "This enters the battlefield with " + CardUtil.getOneOneCountersText(amount) + " on it.";
this.setRuleVisible(false);
}
diff --git a/Mage/src/main/java/mage/abilities/keyword/ReinforceAbility.java b/Mage/src/main/java/mage/abilities/keyword/ReinforceAbility.java
index a475494c3ad..a53c24847f9 100644
--- a/Mage/src/main/java/mage/abilities/keyword/ReinforceAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/ReinforceAbility.java
@@ -42,16 +42,9 @@ public class ReinforceAbility extends SimpleActivatedAbility {
@Override
public String getRule() {
- StringBuilder sb = new StringBuilder("Reinforce ");
- sb.append(count.toString()).append("—");
- sb.append(cost.getText());
- sb.append(" (").append(cost.getText()).append(", Discard this card: Put ");
- if (count.toString().equals("1")) {
- sb.append("a +1/+1 counter");
- } else {
- sb.append(CardUtil.numberToText(count.toString())).append(" +1/+1 counters");
- }
- sb.append(" on target creature.)");
- return sb.toString();
+ String countStr = count.toString();
+ return "Reinforce " + countStr + "—" + cost.getText() + " (" + cost.getText() + ", Discard this card: Put "
+ + CardUtil.numberToText(countStr, "a") + " +1/+1 counter" + (countStr.equals("1")?"":"s")
+ + " on target creature.)";
}
}
diff --git a/Mage/src/main/java/mage/abilities/keyword/ToxicAbility.java b/Mage/src/main/java/mage/abilities/keyword/ToxicAbility.java
index 7ef7b971cd4..9b4f03e654c 100644
--- a/Mage/src/main/java/mage/abilities/keyword/ToxicAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/ToxicAbility.java
@@ -28,7 +28,7 @@ public class ToxicAbility extends StaticAbility {
@Override
public String getRule() {
return "toxic " + amount + " (Players dealt combat damage by this creature also get " +
- CardUtil.numberToText(amount, "a") + " poison counter" + (amount > 1 ? "s" : "") + ".)";
+ CardUtil.getSimpleCountersText(amount, "a", "poison") + ".)";
}
@Override
diff --git a/Mage/src/main/java/mage/counters/Counter.java b/Mage/src/main/java/mage/counters/Counter.java
index de42b834f57..6d04fbb9d0e 100644
--- a/Mage/src/main/java/mage/counters/Counter.java
+++ b/Mage/src/main/java/mage/counters/Counter.java
@@ -100,7 +100,7 @@ public class Counter implements Serializable, Copyable {
* @return a full description of this {@link Counter}
*/
public String getDescription() {
- return CardUtil.numberToText(Math.max(count, 1), CounterType.findArticle(name)) + ' ' + name + (count > 1 ? " counters" : " counter");
+ return CardUtil.getSimpleCountersText(Math.max(count, 1), CounterType.findArticle(name), name);
}
/**
diff --git a/Mage/src/main/java/mage/util/CardUtil.java b/Mage/src/main/java/mage/util/CardUtil.java
index f9e2328d347..b35b5c4c7ef 100644
--- a/Mage/src/main/java/mage/util/CardUtil.java
+++ b/Mage/src/main/java/mage/util/CardUtil.java
@@ -904,6 +904,14 @@ public final class CardUtil {
return Outcome.BoostCreature;
}
+ public static String getSimpleCountersText(int amount, String forOne, String counterType) {
+ return numberToText(amount, forOne)+" "+counterType+" counter"+ (amount==1 ? "" : "s");
+ }
+
+ public static String getOneOneCountersText(int amount) {
+ return getSimpleCountersText(amount, "a", "+1/+1");
+ }
+
public static String getAddRemoveCountersText(DynamicValue amount, Counter counter, String description, boolean add) {
StringBuilder sb = new StringBuilder(add ? "put " : "remove ");
boolean xValue = amount.toString().equals("X");