text fixes and test fixes to fix how tests test text, then more text next

This commit is contained in:
Evan Kranzler 2017-10-07 16:08:06 -04:00
parent 14107b3d55
commit 54b8f10c3c
76 changed files with 247 additions and 227 deletions

View file

@ -56,7 +56,9 @@ public class BanishingKnack extends CardImpl {
Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new TapSourceCost());
gainedAbility.addTarget(new TargetPermanent(filter));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(gainedAbility, Duration.EndOfTurn));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(gainedAbility, Duration.EndOfTurn)
.setText("Until end of turn, target creature gains \"{T}: Return target nonland permanent to its owner's hand.\"")
);
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
}

View file

@ -50,7 +50,7 @@ import mage.filter.predicate.permanent.AnotherPredicate;
*/
public class BelltollDragon extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("each other Dragon creature you control");
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("other Dragon creature you control");
static {
filter.add(new AnotherPredicate());

View file

@ -64,10 +64,10 @@ public class BlackManaBattery extends CardImpl {
Mana.BlackMana(1),
new IntPlusDynamicValue(1, new RemovedCountersForCostValue()),
new TapSourceCost(),
"Add {B} to your mana pool, then add {B} to your mana pool for each storage counter removed this way",
true, new CountersSourceCount(CounterType.STORAGE));
ability.addCost(new RemoveVariableCountersSourceCost(CounterType.STORAGE.createInstance(),
"Remove any number of storage counters from {this}"));
"Add {B} to your mana pool, then add {B} to your mana pool for each charge counter removed this way",
true, new CountersSourceCount(CounterType.CHARGE));
ability.addCost(new RemoveVariableCountersSourceCost(CounterType.CHARGE.createInstance(),
"Remove any number of charge counters from {this}"));
this.addAbility(ability);
}

View file

@ -64,10 +64,10 @@ public class BlueManaBattery extends CardImpl {
Mana.BlueMana(1),
new IntPlusDynamicValue(1, new RemovedCountersForCostValue()),
new TapSourceCost(),
"Add {U} to your mana pool, then add {U} to your mana pool for each storage counter removed this way",
true, new CountersSourceCount(CounterType.STORAGE));
ability.addCost(new RemoveVariableCountersSourceCost(CounterType.STORAGE.createInstance(),
"Remove any number of storage counters from {this}"));
"Add {U} to your mana pool, then add {U} to your mana pool for each charge counter removed this way",
true, new CountersSourceCount(CounterType.CHARGE));
ability.addCost(new RemoveVariableCountersSourceCost(CounterType.CHARGE.createInstance(),
"Remove any number of charge counters from {this}"));
this.addAbility(ability);
}

View file

@ -54,7 +54,6 @@ public class DeityOfScars extends CardImpl {
this.subtype.add(SubType.SPIRIT);
this.subtype.add(SubType.AVATAR);
this.power = new MageInt(7);
this.toughness = new MageInt(7);
@ -62,7 +61,7 @@ public class DeityOfScars extends CardImpl {
this.addAbility(TrampleAbility.getInstance());
// Deity of Scars enters the battlefield with two -1/-1 counters on it.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.M1M1.createInstance(2))));
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.M1M1.createInstance(2)), "with two -1/-1 counters on it"));
// {B/G}, Remove a -1/-1 counter from Deity of Scars: Regenerate Deity of Scars.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl("{B/G}"));

View file

@ -45,7 +45,7 @@ import mage.filter.common.FilterAttackingCreature;
/**
*
* @author jeffwadsworth
*
*/
public class DuergarMineCaptain extends CardImpl {
@ -58,7 +58,10 @@ public class DuergarMineCaptain extends CardImpl {
this.toughness = new MageInt(1);
// {1}{RW}, {untap}: Attacking creatures get +1/+0 until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 0, Duration.EndOfTurn, new FilterAttackingCreature(), false), new ManaCostsImpl("{1}{R/W}"));
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new BoostAllEffect(1, 0, Duration.EndOfTurn, new FilterAttackingCreature("attacking creatures"), false),
new ManaCostsImpl("{1}{R/W}")
);
ability.addCost(new UntapSourceCost());
this.addAbility(ability);

View file

@ -46,7 +46,7 @@ import mage.target.common.TargetCardInYourGraveyard;
*/
public class DutifulAttendant extends CardImpl {
private static final FilterCreatureCard filter = new FilterCreatureCard("another creature card from your graveyard");
private static final FilterCreatureCard filter = new FilterCreatureCard("another target creature card from your graveyard");
static {
filter.add(new AnotherCardPredicate());

View file

@ -37,6 +37,7 @@ import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Zone;
@ -56,13 +57,12 @@ public class FieryBombardment extends CardImpl {
public FieryBombardment(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}");
// Chroma - {2}, Sacrifice a creature: Fiery Bombardment deals damage to target creature or player equal to the number of red mana symbols in the sacrificed creature's mana cost.
Effect effect = new FieryBombardmentEffect();
effect.setText("<i>Chroma</i> - Fiery Bombardment deals damage to target creature or player equal to the number of red mana symbols in the sacrificed creature's mana cost.");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{2}"));
ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent()));
ability.addTarget(new TargetCreatureOrPlayer());
ability.setAbilityWord(AbilityWord.CHROMA);
this.addAbility(ability);
}
@ -81,6 +81,7 @@ class FieryBombardmentEffect extends OneShotEffect {
public FieryBombardmentEffect() {
super(Outcome.Benefit);
staticText = "{this} deals damage to target creature or player equal to the number of red mana symbols in the sacrificed creature's mana cost.";
}
public FieryBombardmentEffect(final FieryBombardmentEffect effect) {

View file

@ -56,9 +56,8 @@ public class FireAtWill extends CardImpl {
public FireAtWill(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{R/W}{R/W}{R/W}");
// Fire at Will deals 3 damage divided as you choose among one, two, or three target attacking or blocking creatures.
this.getSpellAbility().addEffect(new DamageMultiEffect(3));
this.getSpellAbility().addEffect(new DamageMultiEffect(3).setText("{this} deals 3 damage divided as you choose among one, two, or three target attacking or blocking creatures."));
this.getSpellAbility().addTarget(new TargetCreaturePermanentAmount(3, filter));
}

View file

@ -80,7 +80,7 @@ class GilderBairnEffect extends OneShotEffect {
public GilderBairnEffect() {
super(Outcome.Benefit);
this.staticText = "For each counter on target permanent, put another of those counters on that permanent";
this.staticText = "Double the number of each kind of counter on target permanent";
}
public GilderBairnEffect(final GilderBairnEffect effect) {

View file

@ -70,7 +70,9 @@ public class GleamOfAuthority extends CardImpl {
// Enchanted creature gets +1/+1 for each +1/+1 counter on other creatures you control
DynamicValue amount = new CountersOnControlledCount();
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(amount, amount, Duration.WhileOnBattlefield)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(amount, amount, Duration.WhileOnBattlefield)
.setText("Enchanted creature gets +1/+1 for each +1/+1 counter on other creatures you control.")
));
// Enchanted creature has vigilance and "{W}, {T}: Bloster 1."
ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.AURA));

View file

@ -64,10 +64,10 @@ public class GreenManaBattery extends CardImpl {
Mana.GreenMana(1),
new IntPlusDynamicValue(1, new RemovedCountersForCostValue()),
new TapSourceCost(),
"Add {G} to your mana pool, then add {G} to your mana pool for each storage counter removed this way",
true, new CountersSourceCount(CounterType.STORAGE));
ability.addCost(new RemoveVariableCountersSourceCost(CounterType.STORAGE.createInstance(),
"Remove any number of storage counters from {this}"));
"Add {G} to your mana pool, then add {G} to your mana pool for each charge counter removed this way",
true, new CountersSourceCount(CounterType.CHARGE));
ability.addCost(new RemoveVariableCountersSourceCost(CounterType.CHARGE.createInstance(),
"Remove any number of charge counters from {this}"));
this.addAbility(ability);
}

View file

@ -50,7 +50,7 @@ import mage.counters.CounterType;
*/
public class HelixPinnacle extends CardImpl {
static final String rule = "if there are 100 or more tower counters on Helix Pinnacle, you win the game";
static final String rule = "at the beginning of your upkeep, if there are 100 or more tower counters on Helix Pinnacle, you win the game";
public HelixPinnacle(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}");

View file

@ -54,7 +54,7 @@ public class MerrowBonegnawer extends CardImpl {
private UUID exileId = UUID.randomUUID();
private static final FilterSpell filter = new FilterSpell("black spell");
private static final FilterSpell filter = new FilterSpell("a black spell");
static {
filter.add(new ColorPredicate(ObjectColor.BLACK));

View file

@ -60,8 +60,8 @@ public class Moonhold extends CardImpl {
// Target player can't play land cards this turn if {R} was spent to cast Moonhold and can't play creature cards this turn if {W} was spent to cast it.
ContinuousRuleModifyingEffect effect = new MoonholdEffect();
ContinuousRuleModifyingEffect effect2 = new MoonholdEffect2();
effect.setText("Target player can't play land cards this turn if {R} was spent to cast {this} ");
effect2.setText("and can't play creature cards this turn if {W} was spent to cast it.");
effect.setText("Target player can't play lands this turn if {R} was spent to cast {this}");
effect2.setText("and can't cast creature spells this turn if {W} was spent to cast it.");
this.getSpellAbility().addEffect(new ConditionalContinuousRuleModifyingEffect(
effect,
new LockedInCondition(new ManaWasSpentCondition(ColoredManaSymbol.R))));

View file

@ -58,7 +58,7 @@ public class NightskyMimic extends CardImpl {
filter.add(new ColorPredicate(ObjectColor.BLACK));
}
private String rule = "Whenever you cast a spell that's both white and black, {this} has base power and toughness 4/4 until end of turn and gains flying until end of turn";
private String rule = "Whenever you cast a spell that's both white and black, {this} has base power and toughness 4/4 until end of turn and gains flying until end of turn.";
public NightskyMimic(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W/B}");

View file

@ -46,6 +46,7 @@ public class PunctureBlast extends CardImpl {
this.addAbility(WitherAbility.getInstance());
this.getSpellAbility().addEffect(new DamageTargetEffect(3));
this.getSpellAbility().addTarget(new TargetCreatureOrPlayer());
this.getSpellAbility().setRuleAtTheTop(false);
}
public PunctureBlast(final PunctureBlast card) {

View file

@ -64,10 +64,10 @@ public class RedManaBattery extends CardImpl {
Mana.RedMana(1),
new IntPlusDynamicValue(1, new RemovedCountersForCostValue()),
new TapSourceCost(),
"Add {R} to your mana pool, then add {R} to your mana pool for each storage counter removed this way",
true, new CountersSourceCount(CounterType.STORAGE));
ability.addCost(new RemoveVariableCountersSourceCost(CounterType.STORAGE.createInstance(),
"Remove any number of storage counters from {this}"));
"Add {R} to your mana pool, then add {R} to your mana pool for each charge counter removed this way",
true, new CountersSourceCount(CounterType.CHARGE));
ability.addCost(new RemoveVariableCountersSourceCost(CounterType.CHARGE.createInstance(),
"Remove any number of charge counters from {this}"));
this.addAbility(ability);
}

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect;
import mage.cards.CardImpl;
@ -54,13 +54,16 @@ public class RekindledFlame extends CardImpl {
public RekindledFlame(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{R}{R}");
// Rekindled Flame deals 4 damage to target creature or player.
this.getSpellAbility().addEffect(new DamageTargetEffect(4));
this.getSpellAbility().addTarget(new TargetCreatureOrPlayer());
// At the beginning of your upkeep, if an opponent has no cards in hand, you may return Rekindled Flame from your graveyard to your hand.
Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD, new ConditionalOneShotEffect(new ReturnSourceFromGraveyardToHandEffect(), new OpponentHasNoCardsInHandCondition(), rule), TargetController.YOU, true);
Ability ability = new ConditionalTriggeredAbility(
new BeginningOfUpkeepTriggeredAbility(
Zone.GRAVEYARD, new ReturnSourceFromGraveyardToHandEffect(), TargetController.YOU, true
),
new OpponentHasNoCardsInHandCondition(), rule);
ability.setRuleVisible(true);
this.addAbility(ability);

View file

@ -58,7 +58,7 @@ public class ShorecrasherMimic extends CardImpl {
filter.add(new ColorPredicate(ObjectColor.BLUE));
}
private String rule = "Whenever you cast a spell that's both green and blue, {this} has base power and toughness 5/3 until end of turn and gains trample until end of turn";
private String rule = "Whenever you cast a spell that's both green and blue, {this} has base power and toughness 5/3 until end of turn and gains trample until end of turn.";
public ShorecrasherMimic(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G/U}");

View file

@ -55,7 +55,6 @@ public class TalarasBane extends CardImpl {
public TalarasBane(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}");
// Target opponent reveals his or her hand. You choose a green or white creature card from it. You gain life equal that creature card's toughness, then that player discards that card.
this.getSpellAbility().addEffect(new TalarasBaneEffect());
this.getSpellAbility().addTarget(new TargetOpponent());
@ -85,7 +84,7 @@ class TalarasBaneEffect extends OneShotEffect {
public TalarasBaneEffect() {
super(Outcome.Detriment);
this.staticText = "Target opponent reveals his or her hand. You choose a green or white creature card from it. You gain life equal that creature card's toughness, then that player discards that card";
this.staticText = "Target opponent reveals his or her hand. You choose a green or white creature card from it. You gain life equal to that creature card's toughness, then that player discards that card";
}
public TalarasBaneEffect(final TalarasBaneEffect effect) {

View file

@ -45,7 +45,7 @@ import mage.watchers.common.ManaSpentToCastWatcher;
/**
*
* @author jeffwadsworth
*
*/
public class UnnervingAssault extends CardImpl {
@ -60,14 +60,13 @@ public class UnnervingAssault extends CardImpl {
public UnnervingAssault(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{2}{U/R}");
// Creatures your opponents control get -1/-0 until end of turn if {U} was spent to cast Unnerving Assault, and creatures you control get +1/+0 until end of turn if {R} was spent to cast it.
this.getSpellAbility().addEffect(new ConditionalContinuousEffect(
new BoostAllEffect(-1, 0, Duration.EndOfTurn, filter, false),
new ManaWasSpentCondition(ColoredManaSymbol.U), "Creatures your opponents control get -1/0 until end of turn if {U} was spent to cast {this},"));
new ManaWasSpentCondition(ColoredManaSymbol.U), "Creatures your opponents control get -1/-0 until end of turn if {U} was spent to cast {this},"));
this.getSpellAbility().addEffect(new ConditionalContinuousEffect(
new BoostAllEffect(1, 0, Duration.EndOfTurn, filter2, false),
new ManaWasSpentCondition(ColoredManaSymbol.R), " and creatures you control get +1/0 until end of turn if {R} was spent to cast it"));
new ManaWasSpentCondition(ColoredManaSymbol.R), " and creatures you control get +1/+0 until end of turn if {R} was spent to cast it"));
this.getSpellAbility().addEffect(new InfoEffect("<i>(Do both if {U}{R} was spent.)</i>"));
this.getSpellAbility().addWatcher(new ManaSpentToCastWatcher());
@ -82,4 +81,3 @@ public class UnnervingAssault extends CardImpl {
return new UnnervingAssault(this);
}
}

View file

@ -98,7 +98,7 @@ class BecomesUntappedControlledPermanentTriggeredAbility extends TriggeredAbilit
@Override
public String getRule() {
return "When a permanent you control becomes untapped, " + super.getRule();
return "Whenever a permanent you control becomes untapped, " + super.getRule();
}
}

View file

@ -76,7 +76,9 @@ class WardOfBonesEffect extends ContinuousRuleModifyingEffectImpl {
public WardOfBonesEffect() {
super(Duration.WhileOnBattlefield, Outcome.Benefit);
staticText = "Each opponent who controls more creatures than you can't play creature cards. The same is true for artifacts, enchantments, and lands";
staticText = "Each opponent who controls more creatures than you can't cast creature spells. "
+ "The same is true for artifacts and enchantments.<br><br>"
+ "Each opponent who controls more lands than you can't play lands.";
}
public WardOfBonesEffect(final WardOfBonesEffect effect) {

View file

@ -64,10 +64,10 @@ public class WhiteManaBattery extends CardImpl {
Mana.WhiteMana(1),
new IntPlusDynamicValue(1, new RemovedCountersForCostValue()),
new TapSourceCost(),
"Add {W} to your mana pool, then add {W} to your mana pool for each storage counter removed this way",
true, new CountersSourceCount(CounterType.STORAGE));
ability.addCost(new RemoveVariableCountersSourceCost(CounterType.STORAGE.createInstance(),
"Remove any number of storage counters from {this}"));
"Add {W} to your mana pool, then add {W} to your mana pool for each charge counter removed this way",
true, new CountersSourceCount(CounterType.CHARGE));
ability.addCost(new RemoveVariableCountersSourceCost(CounterType.CHARGE.createInstance(),
"Remove any number of charge counters from {this}"));
this.addAbility(ability);
}

View file

@ -214,7 +214,7 @@ public class ExchangeControlTest extends CardTestPlayerBase {
addTarget(playerA, "Manta Riders");
// now use the activated ability to make the "Silvercoat Lions" (that became Mana Riders) flying
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{U}: {this} gains Flying until end of turn.");
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{U}: {this} gains flying until end of turn.");
setStopAt(1, PhaseStep.END_TURN);
execute();

View file

@ -1,12 +1,10 @@
package org.mage.test.cards.mana;
import mage.abilities.costs.mana.ColorlessManaCost;
import mage.constants.ManaType;
import mage.constants.PhaseStep;
import mage.constants.Zone;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;
import org.mage.test.serverside.base.impl.CardTestAPIImpl;
public class DoublingCubeTest extends CardTestPlayerBase {
@ -26,7 +24,6 @@ public class DoublingCubeTest extends CardTestPlayerBase {
addCard(Zone.BATTLEFIELD, playerA, cube);
addCard(Zone.BATTLEFIELD, playerA, upwelling);
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add {G} to your mana pool");
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add {G} to your mana pool");
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add {G} to your mana pool");
@ -38,6 +35,5 @@ public class DoublingCubeTest extends CardTestPlayerBase {
execute();
assertManaPool(playerA, ManaType.COLORLESS, 4);
}
}

View file

@ -52,8 +52,8 @@ public class HarvesterDruidTest extends CardTestPlayerBase {
execute();
ManaOptions options = playerA.getAvailableManaTest(currentGame);
Assert.assertEquals("Player should be able to create 2 red and 1 blue mana", "{R}{R}{U}", options.get(0).toString());
Assert.assertEquals("Player should be able to create 1 red and 3 blue mana", "{R}{U}{U}", options.get(1).toString());
Assert.assertEquals("Player should be able to create 2 red and 1 blue mana", "{U}{R}{R}", options.get(0).toString());
Assert.assertEquals("Player should be able to create 1 red and 3 blue mana", "{U}{U}{R}", options.get(1).toString());
}
@Test
@ -68,9 +68,9 @@ public class HarvesterDruidTest extends CardTestPlayerBase {
execute();
ManaOptions options = playerA.getAvailableManaTest(currentGame);
Assert.assertEquals("Player should be able to create 3 red and 1 blue mana", "{R}{R}{R}{U}", options.get(0).toString());
Assert.assertEquals("Player should be able to create 2 red and 2 blue mana", "{R}{R}{U}{U}", options.get(1).toString());
Assert.assertEquals("Player should be able to create 2 red and 2 blue mana", "{R}{R}{U}{U}", options.get(2).toString());
Assert.assertEquals("Player should be able to create 1 red and 3 blue mana", "{R}{U}{U}{U}", options.get(3).toString());
Assert.assertEquals("Player should be able to create 3 red and 1 blue mana", "{U}{R}{R}{R}", options.get(0).toString());
Assert.assertEquals("Player should be able to create 2 red and 2 blue mana", "{U}{U}{R}{R}", options.get(1).toString());
Assert.assertEquals("Player should be able to create 2 red and 2 blue mana", "{U}{U}{R}{R}", options.get(2).toString());
Assert.assertEquals("Player should be able to create 1 red and 3 blue mana", "{U}{U}{U}{R}", options.get(3).toString());
}
}

View file

@ -174,13 +174,13 @@ public class ReflectingPoolTest extends CardTestPlayerBase {
ManaOptions options = playerA.getAvailableManaTest(currentGame);
Assert.assertEquals("Player A should be able to create the ", "{G}{G}{G}", options.get(0).toString());
Assert.assertEquals("Player A should be able to create the ", "{G}{G}{W}", options.get(1).toString());
Assert.assertEquals("Player A should be able to create the ", "{G}{G}{W}", options.get(2).toString()); // ManaOption type optimzing seems not optimal yet
Assert.assertEquals("Player A should be able to create the ", "{G}{W}{W}", options.get(3).toString());
Assert.assertEquals("Player A should be able to create the ", "{W}{G}{G}", options.get(1).toString());
Assert.assertEquals("Player A should be able to create the ", "{W}{G}{G}", options.get(2).toString()); // ManaOption type optimzing seems not optimal yet
Assert.assertEquals("Player A should be able to create the ", "{W}{W}{G}", options.get(3).toString());
Assert.assertEquals("Player A should be able to create only 3 different mana options", 4, options.size());
options = playerB.getAvailableManaTest(currentGame);
Assert.assertEquals("Player B should be able to create the ", "{G}{W}", options.get(0).toString());
Assert.assertEquals("Player B should be able to create the ", "{W}{G}", options.get(0).toString());
Assert.assertEquals("Player B should be able to create the ", "{W}{W}", options.get(1).toString());
Assert.assertEquals("Player B should be able to create only 3 different mana options", 2, options.size());

View file

@ -70,8 +70,8 @@ public class SylvokExplorerTest extends CardTestPlayerBase {
execute();
ManaOptions options = playerA.getAvailableManaTest(currentGame);
Assert.assertEquals("Player should be able to create 1 red and 1 white mana", "{R}{W}", options.get(0).toString());
Assert.assertEquals("Player should be able to create 1 blue and 1 white mana", "{U}{W}", options.get(1).toString());
Assert.assertEquals("Player should be able to create 1 red and 1 white mana", "{W}{R}", options.get(0).toString());
Assert.assertEquals("Player should be able to create 1 blue and 1 white mana", "{W}{U}", options.get(1).toString());
}
@Test

View file

@ -37,12 +37,11 @@ import org.mage.test.serverside.base.CardTestPlayerBase;
*
* @author LevelX2
*/
public class GrindstoneTest extends CardTestPlayerBase {
/**
* Tests that Grindstone mills all cards to graveyard while Painter's Servant is in play
* Leaving one Progenius in play
* Tests that Grindstone mills all cards to graveyard while Painter's
* Servant is in play Leaving one Progenius in play
*/
@Test
public void testGrindstoneProgenius() {
@ -72,8 +71,8 @@ public class GrindstoneTest extends CardTestPlayerBase {
}
/**
* Tests that Grindstone mills all cards to graveyard while Painter's Servant is in play
* Iterating with two Progenius for a draw
* Tests that Grindstone mills all cards to graveyard while Painter's
* Servant is in play Iterating with two Progenius for a draw
*/
@Test
public void testGrindstoneProgeniusDraw() {
@ -103,8 +102,8 @@ public class GrindstoneTest extends CardTestPlayerBase {
}
/**
* Tests that Grindstone mills all cards to graveyard while Painter's Servant is in play
* Iterating with two Progenius for a draw
* Tests that Grindstone mills all cards to graveyard while Painter's
* Servant is in play Iterating with two Progenius for a draw
*/
@Test
public void testGrindstoneUlamog() {
@ -136,5 +135,3 @@ public class GrindstoneTest extends CardTestPlayerBase {
assertPermanentCount(playerA, "Painter's Servant", 1);
}
}

View file

@ -72,9 +72,9 @@ public class ManaOptionsTest extends CardTestPlayerBase {
Assert.assertEquals("mana variations don't fit", 4, manaOptions.size());
Assert.assertEquals("{G}{G}{G}", getManaOption(0, manaOptions));
Assert.assertEquals("{R}{G}{G}{W}", getManaOption(1, manaOptions));
Assert.assertEquals("{R}{R}{G}{W}{W}", getManaOption(2, manaOptions));
Assert.assertEquals("{R}{R}{R}{W}{W}{W}", getManaOption(3, manaOptions));
Assert.assertEquals("{W}{R}{G}{G}", getManaOption(1, manaOptions));
Assert.assertEquals("{W}{W}{R}{R}{G}", getManaOption(2, manaOptions));
Assert.assertEquals("{W}{W}{W}{R}{R}{R}", getManaOption(3, manaOptions));
}
@ -95,11 +95,11 @@ public class ManaOptionsTest extends CardTestPlayerBase {
Assert.assertEquals("{C}{C}{W}", getManaOption(1, manaOptions));
Assert.assertEquals("{C}{C}{U}", getManaOption(2, manaOptions));
Assert.assertEquals("{C}{W}{W}", getManaOption(3, manaOptions));
Assert.assertEquals("{C}{U}{W}", getManaOption(4, manaOptions));
Assert.assertEquals("{C}{W}{U}", getManaOption(4, manaOptions));
Assert.assertEquals("{C}{U}{U}", getManaOption(5, manaOptions));
Assert.assertEquals("{W}{W}{W}", getManaOption(6, manaOptions));
Assert.assertEquals("{U}{W}{W}", getManaOption(7, manaOptions));
Assert.assertEquals("{U}{U}{W}", getManaOption(8, manaOptions));
Assert.assertEquals("{W}{W}{U}", getManaOption(7, manaOptions));
Assert.assertEquals("{W}{U}{U}", getManaOption(8, manaOptions));
Assert.assertEquals("{U}{U}{U}", getManaOption(9, manaOptions));
}
@ -151,7 +151,7 @@ public class ManaOptionsTest extends CardTestPlayerBase {
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
Assert.assertEquals("mana variations don't fit", 1, manaOptions.size());
Assert.assertEquals("{C}{G}{G}{W}{W}", getManaOption(0, manaOptions));
Assert.assertEquals("{C}{W}{W}{G}{G}", getManaOption(0, manaOptions));
}
// Crystal Quarry
@ -169,8 +169,8 @@ public class ManaOptionsTest extends CardTestPlayerBase {
ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame);
Assert.assertEquals("mana variations don't fit", 2, manaOptions.size());
Assert.assertEquals("{C}{G}{G}{G}{W}{W}", getManaOption(0, manaOptions));
Assert.assertEquals("{R}{G}{U}{W}{B}", getManaOption(1, manaOptions));
Assert.assertEquals("{C}{W}{W}{G}{G}{G}", getManaOption(0, manaOptions));
Assert.assertEquals("{W}{U}{B}{R}{G}", getManaOption(1, manaOptions));
}
// Nykthos, Shrine to Nyx

View file

@ -61,6 +61,8 @@ public interface Abilities<T extends Ability> extends List<T>, Serializable {
*/
List<String> getRules(String source);
List<String> getRules(String source, boolean capitalize);
/**
* Retrieves all activated abilities for the given {@link Zone}.
*

View file

@ -69,6 +69,11 @@ public class AbilitiesImpl<T extends Ability> extends ArrayList<T> implements Ab
@Override
public List<String> getRules(String source) {
return getRules(source, true);
}
@Override
public List<String> getRules(String source, boolean capitalize) {
List<String> rules = new ArrayList<>();
for (T ability : this) {
@ -78,7 +83,9 @@ public class AbilitiesImpl<T extends Ability> extends ArrayList<T> implements Ab
if (!(ability instanceof SpellAbility || ability instanceof PlayLandAbility)) {
String rule = ability.getRule();
if (rule != null && rule.length() > 3) {
if (capitalize) {
rule = Character.toUpperCase(rule.charAt(0)) + rule.substring(1);
}
if (ability.getRuleAtTheTop()) {
rules.add(0, rule);
} else {

View file

@ -31,7 +31,7 @@ public class CompoundAbility extends AbilitiesImpl<Ability> {
}
StringBuilder sb = new StringBuilder();
List<String> rules = super.getRules(null);
List<String> rules = super.getRules(null,false);
for (int index = 0; index < rules.size(); index++) {
if (index > 0) {
if (index < rules.size() - 1) {

View file

@ -25,7 +25,6 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.abilities.costs.common;
import mage.constants.Outcome;
@ -38,6 +37,7 @@ import mage.target.common.TargetControlledPermanent;
import java.util.List;
import java.util.UUID;
import mage.abilities.costs.Cost;
import mage.util.CardUtil;
/**
*
@ -49,7 +49,7 @@ public class UntapTargetCost extends CostImpl {
public UntapTargetCost(TargetControlledPermanent target) {
this.target = target;
this.text = "Untap " + target.getMaxNumberOfTargets() + ' ' + target.getTargetName();
this.text = "Untap " + CardUtil.numberToText(target.getMaxNumberOfTargets(), "") + ' ' + target.getTargetName();
}
public UntapTargetCost(final UntapTargetCost cost) {
@ -62,8 +62,9 @@ public class UntapTargetCost extends CostImpl {
if (target.choose(Outcome.Untap, controllerId, sourceId, game)) {
for (UUID targetId : (List<UUID>) target.getTargets()) {
Permanent permanent = game.getPermanent(targetId);
if (permanent == null)
if (permanent == null) {
return false;
}
paid |= permanent.untap(game);
}
}
@ -80,5 +81,4 @@ public class UntapTargetCost extends CostImpl {
return new UntapTargetCost(this);
}
}

View file

@ -46,7 +46,7 @@ public class GetEmblemEffect extends OneShotEffect {
public GetEmblemEffect(Emblem emblem) {
super(Outcome.Benefit);
this.emblem = emblem;
this.staticText = "You get an emblem with \"" + +'"';
this.staticText = getText();
}
public GetEmblemEffect(final GetEmblemEffect effect) {
@ -74,7 +74,9 @@ public class GetEmblemEffect extends OneShotEffect {
sb.append("You get an emblem with \"");
List<String> rules = emblem.getAbilities().getRules(null);
if (rules.size() == 1) {
sb.append(rules.get(0));
for (String s : rules) {
sb.append(s);
}
sb.append('"');
} else if (rules.size() == 2) {
for (String s : rules) {
@ -83,7 +85,6 @@ public class GetEmblemEffect extends OneShotEffect {
}
sb.append('"');
}
sb.append('.');
return sb.toString();
}
}

View file

@ -264,9 +264,11 @@ public class LookLibraryAndPickControllerEffect extends LookLibraryControllerEff
sb.append(". You may reveal ");
sb.append(filter.getMessage()).append(" from among them and put it into your ");
} else if (targetPickedCards == Zone.BATTLEFIELD) {
sb.append(". You ");
sb.append(". ");
if (optional) {
sb.append("may ");
sb.append("You may p");
} else {
sb.append('P');
}
sb.append("put ").append(filter.getMessage()).append(" from among them onto the ");
} else {

View file

@ -25,7 +25,6 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.abilities.effects.common.continuous;
import mage.constants.Duration;
@ -116,21 +115,24 @@ public class BoostEquippedEffect extends ContinuousEffectImpl {
private void setText() {
StringBuilder sb = new StringBuilder();
sb.append("Equipped creature gets ");
sb.append("equipped creature gets ");
String p = power.toString();
if (!p.startsWith("-"))
if (!p.startsWith("-")) {
sb.append('+');
}
sb.append(p).append('/');
String t = toughness.toString();
if (!t.startsWith("-")) {
if (p.startsWith("-"))
if (p.startsWith("-")) {
sb.append('-');
else
} else {
sb.append('+');
}
}
sb.append(t);
if (duration != Duration.WhileOnBattlefield)
if (duration != Duration.WhileOnBattlefield) {
sb.append(' ').append(duration.toString());
}
String message = power.getMessage();
if (!message.isEmpty()) {
sb.append(" for each ");

View file

@ -89,7 +89,7 @@ public class ProtectionAbility extends StaticAbility {
@Override
public String getRule() {
return "protection from " + filter.getMessage() + (removeAuras ? "" : ". This effect doesn't remove auras.");
return "Protection from " + filter.getMessage() + (removeAuras ? "" : ". This effect doesn't remove auras.");
}
public boolean canTarget(MageObject source, Game game) {

View file

@ -25,7 +25,6 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.abilities.keyword;
import mage.constants.Zone;
@ -37,11 +36,16 @@ import java.io.ObjectStreamException;
/**
* 702.77. Wither
*
* 702.77a. Wither is a static ability. Damage dealt to a creature by a source with wither isn't marked on that creature. Rather, it causes that many -1/-1 counters to be put on that creature. See rule 119.3.
* 702.77a. Wither is a static ability. Damage dealt to a creature by a source
* with wither isn't marked on that creature. Rather, it causes that many -1/-1
* counters to be put on that creature. See rule 119.3.
*
* 702.77b. If a permanent leaves the battlefield before an effect causes it to deal damage, its last known information is used to determine whether it had wither.
* 702.77b. If a permanent leaves the battlefield before an effect causes it to
* deal damage, its last known information is used to determine whether it had
* wither.
*
* 702.77c. The wither rules function no matter what zone an object with wither deals damage from.
* 702.77c. The wither rules function no matter what zone an object with wither
* deals damage from.
*
* 702.77d. Multiple instances of wither on the same object are redundant.
*
@ -65,7 +69,7 @@ public class WitherAbility extends StaticAbility implements MageSingleton {
@Override
public String getRule() {
return "Wither <i>(This deals damage to creatures in the form of -1/-1 counters.)</i>";
return "wither <i>(This deals damage to creatures in the form of -1/-1 counters.)</i>";
}
@Override

View file

@ -497,7 +497,7 @@ public class ManaTest {
String ret = mana.toString();
// then
assertEquals("{6}{R}{G}{G}{U}{U}{U}{B}{B}{B}{Any}{Any}", ret);
assertEquals("{6}{U}{U}{U}{B}{B}{B}{R}{G}{G}{Any}{Any}", ret);
}
@Test