diff --git a/Mage.Sets/src/mage/sets/shadowmoor/AphoticWisps.java b/Mage.Sets/src/mage/sets/shadowmoor/AphoticWisps.java
index 20096cb783..588154614b 100644
--- a/Mage.Sets/src/mage/sets/shadowmoor/AphoticWisps.java
+++ b/Mage.Sets/src/mage/sets/shadowmoor/AphoticWisps.java
@@ -25,20 +25,19 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-
package mage.sets.shadowmoor;
import java.util.UUID;
-
-import mage.constants.CardType;
-import mage.constants.Rarity;
import mage.ObjectColor;
+import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
-import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.effects.common.continuous.BecomesColorTargetEffect;
+import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.keyword.FearAbility;
import mage.cards.CardImpl;
+import mage.constants.CardType;
import mage.constants.Duration;
+import mage.constants.Rarity;
import mage.target.common.TargetCreaturePermanent;
/**
@@ -47,19 +46,25 @@ import mage.target.common.TargetCreaturePermanent;
*/
public class AphoticWisps extends CardImpl {
- public AphoticWisps (UUID ownerId) {
+ public AphoticWisps(UUID ownerId) {
super(ownerId, 55, "Aphotic Wisps", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{B}");
this.expansionSetCode = "SHM";
- // Target creature becomes black and gains fear until end of turn. (It can't be blocked except by artifact creatures and/or black creatures.)
+ // Target creature becomes black and gains fear until end of turn. (It can't be blocked except by artifact creatures and/or black creatures.)
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
- this.getSpellAbility().addEffect(new BecomesColorTargetEffect(ObjectColor.BLACK, Duration.EndOfTurn));
- this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FearAbility.getInstance(), Duration.EndOfTurn));
+ Effect effect = new BecomesColorTargetEffect(ObjectColor.BLACK, Duration.EndOfTurn);
+ effect.setText("Target creature becomes black");
+ this.getSpellAbility().addEffect(effect);
+ effect = new GainAbilityTargetEffect(FearAbility.getInstance(), Duration.EndOfTurn);
+ effect.setText("and gains fear until end of turn");
+ this.getSpellAbility().addEffect(effect);
// Draw a card.
- this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
+ effect = new DrawCardSourceControllerEffect(1);
+ effect.setText("
Draw a card");
+ this.getSpellAbility().addEffect(effect);
}
- public AphoticWisps (final AphoticWisps card) {
+ public AphoticWisps(final AphoticWisps card) {
super(card);
}
@@ -69,4 +74,3 @@ public class AphoticWisps extends CardImpl {
}
}
-
diff --git a/Mage.Sets/src/mage/sets/shadowmoor/DrownerInitiate.java b/Mage.Sets/src/mage/sets/shadowmoor/DrownerInitiate.java
index e2c04a54d6..67b9eda309 100644
--- a/Mage.Sets/src/mage/sets/shadowmoor/DrownerInitiate.java
+++ b/Mage.Sets/src/mage/sets/shadowmoor/DrownerInitiate.java
@@ -45,12 +45,12 @@ import mage.target.TargetPlayer;
/**
*
* @author jeffwadsworth
-
+ *
*/
public class DrownerInitiate extends CardImpl {
-
+
private static final FilterSpell filter = new FilterSpell("a blue spell");
-
+
static {
filter.add(new ColorPredicate(ObjectColor.BLUE));
}
@@ -65,10 +65,10 @@ public class DrownerInitiate extends CardImpl {
this.toughness = new MageInt(1);
// Whenever a player casts a blue spell, you may pay {1}. If you do, target player puts the top two cards of his or her library into his or her graveyard.
- Ability ability = new SpellCastAllTriggeredAbility(new DoIfCostPaid(new PutLibraryIntoGraveTargetEffect(2), new ManaCostsImpl("{1}")), filter, true);
+ Ability ability = new SpellCastAllTriggeredAbility(new DoIfCostPaid(new PutLibraryIntoGraveTargetEffect(2), new ManaCostsImpl("{1}")), filter, false);
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
-
+
}
public DrownerInitiate(final DrownerInitiate card) {
diff --git a/Mage.Sets/src/mage/sets/shadowmoor/LeechBonder.java b/Mage.Sets/src/mage/sets/shadowmoor/LeechBonder.java
index 623580db2d..7e6f922d10 100644
--- a/Mage.Sets/src/mage/sets/shadowmoor/LeechBonder.java
+++ b/Mage.Sets/src/mage/sets/shadowmoor/LeechBonder.java
@@ -72,7 +72,7 @@ public class LeechBonder extends CardImpl {
// Leech Bonder enters the battlefield with two -1/-1 counters on it.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.M1M1.createInstance(2))));
- // {U}, {untap}: Move a counter from target creature onto a second target creature.
+ // {U}, {untap}: Move a counter from target creature onto another target creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LeechBonderEffect(), new ManaCostsImpl("{U}"));
ability.addCost(new UntapSourceCost());
ability.addTarget(new TargetCreaturePermanent(new FilterCreaturePermanent("creature to remove counter from")));
diff --git a/Mage.Sets/src/mage/sets/shadowmoor/WickerWarcrawler.java b/Mage.Sets/src/mage/sets/shadowmoor/WickerWarcrawler.java
index 4ea92e7207..597a65871a 100644
--- a/Mage.Sets/src/mage/sets/shadowmoor/WickerWarcrawler.java
+++ b/Mage.Sets/src/mage/sets/shadowmoor/WickerWarcrawler.java
@@ -29,19 +29,16 @@ package mage.sets.shadowmoor;
import java.util.UUID;
import mage.MageInt;
-import mage.abilities.Ability;
+import mage.abilities.DelayedTriggeredAbility;
import mage.abilities.common.AttacksOrBlocksTriggeredAbility;
import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility;
-import mage.abilities.effects.OneShotEffect;
-import mage.abilities.effects.common.counter.AddCountersTargetEffect;
+import mage.abilities.effects.Effect;
+import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
+import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
-import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.counters.CounterType;
-import mage.game.Game;
-import mage.game.permanent.Permanent;
-import mage.target.targetpointer.FixedTarget;
/**
*
@@ -57,7 +54,10 @@ public class WickerWarcrawler extends CardImpl {
this.toughness = new MageInt(6);
// Whenever Wicker Warcrawler attacks or blocks, put a -1/-1 counter on it at end of combat.
- this.addAbility(new AttacksOrBlocksTriggeredAbility(new WickerWarcrawlerEffect(), false));
+ Effect effect = new AddCountersSourceEffect(CounterType.M1M1.createInstance(), true);
+ effect.setText("put a -1/-1 counter on it at end of combat");
+ DelayedTriggeredAbility ability = new AtTheEndOfCombatDelayedTriggeredAbility(effect);
+ this.addAbility(new AttacksOrBlocksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect(ability, false, false), false));
}
@@ -70,35 +70,3 @@ public class WickerWarcrawler extends CardImpl {
return new WickerWarcrawler(this);
}
}
-
-class WickerWarcrawlerEffect extends OneShotEffect {
-
- WickerWarcrawlerEffect() {
- super(Outcome.Detriment);
- staticText = "put a -1/-1 counter on {this} at the end of combat";
- }
-
- WickerWarcrawlerEffect(final WickerWarcrawlerEffect effect) {
- super(effect);
- }
-
- @Override
- public boolean apply(Game game, Ability source) {
- Permanent wickerWarcrawler = game.getPermanent(source.getSourceId());
- if (wickerWarcrawler != null) {
- AtTheEndOfCombatDelayedTriggeredAbility delayedAbility = new AtTheEndOfCombatDelayedTriggeredAbility(new AddCountersTargetEffect(CounterType.M1M1.createInstance()));
- delayedAbility.setSourceId(source.getSourceId());
- delayedAbility.setControllerId(source.getControllerId());
- delayedAbility.setSourceObject(source.getSourceObject(game), game);
- delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(source.getSourceId()));
- game.addDelayedTriggeredAbility(delayedAbility);
- return true;
- }
- return false;
- }
-
- @Override
- public WickerWarcrawlerEffect copy() {
- return new WickerWarcrawlerEffect(this);
- }
-}
diff --git a/Mage.Sets/src/mage/sets/urzassaga/ShowAndTell.java b/Mage.Sets/src/mage/sets/urzassaga/ShowAndTell.java
index 3bbcbbefb1..0161b4f0df 100644
--- a/Mage.Sets/src/mage/sets/urzassaga/ShowAndTell.java
+++ b/Mage.Sets/src/mage/sets/urzassaga/ShowAndTell.java
@@ -122,12 +122,5 @@ class ShowAndTellEffect extends OneShotEffect {
}
}
return controller.moveCards(cardsToPutIntoPlay, Zone.BATTLEFIELD, source, game, false, false, true, null);
-// for (Card card : cardsToPutIntoPlay) {
-// Player player = game.getPlayer(card.getOwnerId());
-// if (player != null) {
-// player.putOntoBattlefieldWithInfo(card, game, Zone.HAND, source.getSourceId());
-// }
-// }
- // return true;
}
}
diff --git a/Mage.Sets/src/mage/sets/worldwake/FeralContest.java b/Mage.Sets/src/mage/sets/worldwake/FeralContest.java
index f0af7b313e..b519cab6c9 100644
--- a/Mage.Sets/src/mage/sets/worldwake/FeralContest.java
+++ b/Mage.Sets/src/mage/sets/worldwake/FeralContest.java
@@ -32,7 +32,6 @@ import java.util.UUID;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.abilities.Ability;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.RequirementEffect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.cards.CardImpl;
@@ -53,8 +52,7 @@ public class FeralContest extends CardImpl {
super(ownerId, 100, "Feral Contest", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{3}{G}");
this.expansionSetCode = "WWK";
-
- // Put a +1/+1 counter on target creature you control.
+ // Put a +1/+1 counter on target creature you control.
this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance()));
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
// Another target creature blocks it this turn if able.
@@ -88,7 +86,7 @@ class FeralContestEffect extends RequirementEffect {
}
@Override
- public boolean applies(Permanent permanent, Ability source, Game game) {
+ public boolean applies(Permanent permanent, Ability source, Game game) {
if (permanent.getId().equals(source.getTargets().get(1).getFirstTarget())) {
return permanent.canBlock(source.getFirstTarget(), game);
}
@@ -116,4 +114,3 @@ class FeralContestEffect extends RequirementEffect {
}
}
-
diff --git a/Mage.Sets/src/mage/sets/zendikar/BloodTribute.java b/Mage.Sets/src/mage/sets/zendikar/BloodTribute.java
index 43437afc3f..1335d9f4be 100644
--- a/Mage.Sets/src/mage/sets/zendikar/BloodTribute.java
+++ b/Mage.Sets/src/mage/sets/zendikar/BloodTribute.java
@@ -33,8 +33,6 @@ import mage.constants.Outcome;
import mage.constants.Rarity;
import mage.abilities.Ability;
import mage.abilities.condition.common.KickedCondition;
-import mage.abilities.costs.OptionalAdditionalCost;
-import mage.abilities.costs.OptionalAdditionalCostImpl;
import mage.abilities.costs.common.TapTargetCost;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.Effect;
@@ -56,7 +54,7 @@ import mage.target.common.TargetOpponent;
*/
public class BloodTribute extends CardImpl {
- private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped Vampire you control");
+ private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("an untapped Vampire you control");
static {
filter.add(Predicates.not(new TappedPredicate()));
@@ -67,20 +65,18 @@ public class BloodTribute extends CardImpl {
super(ownerId, 81, "Blood Tribute", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{4}{B}{B}");
this.expansionSetCode = "ZEN";
-
// Kicker - Tap an untapped Vampire you control.
- OptionalAdditionalCost cost = new OptionalAdditionalCostImpl("Kicker-","",new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, true)));
- this.addAbility(new KickerAbility(cost));
+ this.addAbility(new KickerAbility(new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, true))));
// Target opponent loses half his or her life, rounded up.
this.getSpellAbility().addTarget(new TargetOpponent());
this.getSpellAbility().addEffect(new BloodTributeLoseLifeEffect());
-
+
// If Blood Tribute was kicked, you gain life equal to the life lost this way.
Effect effect = new ConditionalOneShotEffect(
new BloodTributeGainLifeEffect(),
KickedCondition.getInstance(),
- "If Blood Tribute was kicked, you gain life equal to the life lost this way");
+ "If {this} was kicked, you gain life equal to the life lost this way");
this.getSpellAbility().addEffect(effect);
}
diff --git a/Mage/src/mage/abilities/common/AttacksOrBlocksTriggeredAbility.java b/Mage/src/mage/abilities/common/AttacksOrBlocksTriggeredAbility.java
index 7c1bb12348..732e6c59a7 100644
--- a/Mage/src/mage/abilities/common/AttacksOrBlocksTriggeredAbility.java
+++ b/Mage/src/mage/abilities/common/AttacksOrBlocksTriggeredAbility.java
@@ -2,17 +2,25 @@ package mage.abilities.common;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.Effect;
+import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
public class AttacksOrBlocksTriggeredAbility extends TriggeredAbilityImpl {
+
+ protected String startText = "Whenever";
+
public AttacksOrBlocksTriggeredAbility(Effect effect, boolean optional) {
super(Zone.BATTLEFIELD, effect, optional);
+ if (effect instanceof CreateDelayedTriggeredAbilityEffect) {
+ startText = "When";
+ }
}
public AttacksOrBlocksTriggeredAbility(final AttacksOrBlocksTriggeredAbility ability) {
super(ability);
+ this.startText = ability.startText;
}
@Override
@@ -22,8 +30,9 @@ public class AttacksOrBlocksTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
- return "When {this} attacks or blocks, " + super.getRule();
+ return startText + " {this} attacks or blocks, " + super.getRule();
}
+
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.ATTACKER_DECLARED || event.getType() == GameEvent.EventType.BLOCKER_DECLARED;
diff --git a/Mage/src/mage/abilities/costs/AlternativeCost2Impl.java b/Mage/src/mage/abilities/costs/AlternativeCost2Impl.java
index b6b73034a9..03a0be13f4 100644
--- a/Mage/src/mage/abilities/costs/AlternativeCost2Impl.java
+++ b/Mage/src/mage/abilities/costs/AlternativeCost2Impl.java
@@ -25,20 +25,18 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-
package mage.abilities.costs;
import mage.game.Game;
/**
* Alternative costs
- *
+ *
* @author LevelX2
- *
+ *
* @param
*/
-
-public class AlternativeCost2Impl > extends CostsImpl implements AlternativeCost2 {
+public class AlternativeCost2Impl> extends CostsImpl implements AlternativeCost2 {
protected String name;
protected String reminderText;
@@ -72,6 +70,7 @@ public class AlternativeCost2Impl > extends Co
public String getName() {
return this.name;
}
+
/**
* Returns the complete text for the addional cost or if onlyCost is true
* only the pure text for the included native cost
@@ -84,7 +83,7 @@ public class AlternativeCost2Impl > extends Co
if (onlyCost) {
return getText();
} else {
- return new StringBuffer(name != null ? name: "").append(delimiter != null ? delimiter: "").append(getText()).toString();
+ return (name != null ? name : "") + (delimiter != null ? delimiter : "") + getText();
}
}
@@ -103,20 +102,20 @@ public class AlternativeCost2Impl > extends Co
}
/**
- * Returns a text suffix for the game log, that can be added to
- * the cast message.
+ * Returns a text suffix for the game log, that can be added to the cast
+ * message.
*
- * @param position - if there are multiple costs, it's the postion the cost is set (starting with 0)
+ * @param position - if there are multiple costs, it's the postion the cost
+ * is set (starting with 0)
* @return
*/
@Override
public String getCastSuffixMessage(int position) {
- StringBuilder sb = new StringBuilder(position > 0 ? " and ":"").append(" with ");
+ StringBuilder sb = new StringBuilder(position > 0 ? " and " : "").append(" with ");
sb.append(name);
- return sb.toString();
+ return sb.toString();
}
-
/**
* If the player intends to pay the cost, the cost will be activated
*
@@ -124,7 +123,9 @@ public class AlternativeCost2Impl > extends Co
@Override
public void activate() {
activated = true;
- };
+ }
+
+ ;
/**
* Reset the activate and count information
@@ -142,9 +143,11 @@ public class AlternativeCost2Impl > extends Co
* @return
*/
@Override
- public boolean isActivated(Game game){
+ public boolean isActivated(Game game) {
return activated;
- };
+ }
+
+ ;
@Override
public AlternativeCost2Impl copy() {
diff --git a/Mage/src/mage/abilities/costs/CompositeCost.java b/Mage/src/mage/abilities/costs/CompositeCost.java
index f76693fb18..1d497d4379 100644
--- a/Mage/src/mage/abilities/costs/CompositeCost.java
+++ b/Mage/src/mage/abilities/costs/CompositeCost.java
@@ -1,14 +1,14 @@
package mage.abilities.costs;
+import java.util.UUID;
import mage.abilities.Ability;
import mage.game.Game;
import mage.target.Targets;
-import java.util.UUID;
-
public class CompositeCost implements Cost {
- private Cost firstCost;
- private Cost secondCost;
+
+ private final Cost firstCost;
+ private final Cost secondCost;
private String description;
public CompositeCost(Cost firstCost, Cost secondCost, String description) {
@@ -28,6 +28,11 @@ public class CompositeCost implements Cost {
throw new RuntimeException("Not supported method");
}
+ @Override
+ public void setText(String text) {
+ this.description = text;
+ }
+
@Override
public String getText() {
return description;
diff --git a/Mage/src/mage/abilities/costs/Cost.java b/Mage/src/mage/abilities/costs/Cost.java
index cd8696cd13..885ff8376f 100644
--- a/Mage/src/mage/abilities/costs/Cost.java
+++ b/Mage/src/mage/abilities/costs/Cost.java
@@ -1,31 +1,30 @@
/*
-* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without modification, are
-* permitted provided that the following conditions are met:
-*
-* 1. Redistributions of source code must retain the above copyright notice, this list of
-* conditions and the following disclaimer.
-*
-* 2. Redistributions in binary form must reproduce the above copyright notice, this list
-* of conditions and the following disclaimer in the documentation and/or other materials
-* provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
-* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
-* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-* The views and conclusions contained in the software and documentation are those of the
-* authors and should not be interpreted as representing official policies, either expressed
-* or implied, of BetaSteward_at_googlemail.com.
-*/
-
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
package mage.abilities.costs;
import java.io.Serializable;
@@ -37,12 +36,21 @@ import mage.target.Targets;
public interface Cost extends Serializable {
UUID getId();
+
String getText();
+
+ void setText(String text);
+
boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game);
+
boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana);
+
boolean isPaid();
+
void clearPaid();
+
void setPaid();
+
Targets getTargets();
Cost copy();
diff --git a/Mage/src/mage/abilities/costs/CostImpl.java b/Mage/src/mage/abilities/costs/CostImpl.java
index e423f30fed..57f6c5a747 100644
--- a/Mage/src/mage/abilities/costs/CostImpl.java
+++ b/Mage/src/mage/abilities/costs/CostImpl.java
@@ -1,31 +1,30 @@
/*
-* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without modification, are
-* permitted provided that the following conditions are met:
-*
-* 1. Redistributions of source code must retain the above copyright notice, this list of
-* conditions and the following disclaimer.
-*
-* 2. Redistributions in binary form must reproduce the above copyright notice, this list
-* of conditions and the following disclaimer in the documentation and/or other materials
-* provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
-* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
-* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-* The views and conclusions contained in the software and documentation are those of the
-* authors and should not be interpreted as representing official policies, either expressed
-* or implied, of BetaSteward_at_googlemail.com.
-*/
-
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
package mage.abilities.costs;
import java.util.UUID;
@@ -57,6 +56,7 @@ public abstract class CostImpl implements Cost {
return text;
}
+ @Override
public void setText(String text) {
this.text = text;
}
diff --git a/Mage/src/mage/abilities/costs/CostsImpl.java b/Mage/src/mage/abilities/costs/CostsImpl.java
index a2624f3f29..df64087a37 100644
--- a/Mage/src/mage/abilities/costs/CostsImpl.java
+++ b/Mage/src/mage/abilities/costs/CostsImpl.java
@@ -1,31 +1,30 @@
/*
-* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without modification, are
-* permitted provided that the following conditions are met:
-*
-* 1. Redistributions of source code must retain the above copyright notice, this list of
-* conditions and the following disclaimer.
-*
-* 2. Redistributions in binary form must reproduce the above copyright notice, this list
-* of conditions and the following disclaimer in the documentation and/or other materials
-* provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
-* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
-* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-* The views and conclusions contained in the software and documentation are those of the
-* authors and should not be interpreted as representing official policies, either expressed
-* or implied, of BetaSteward_at_googlemail.com.
-*/
-
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
package mage.abilities.costs;
import java.util.ArrayList;
@@ -44,12 +43,16 @@ import mage.target.Targets;
*/
public class CostsImpl extends ArrayList implements Costs {
- public CostsImpl() {}
+ protected String text = null;
+
+ public CostsImpl() {
+ }
public CostsImpl(final CostsImpl costs) {
- for (Cost cost: costs) {
- this.add((T)cost.copy());
+ for (Cost cost : costs) {
+ this.add((T) cost.copy());
}
+ this.text = costs.text;
}
@Override
@@ -57,20 +60,28 @@ public class CostsImpl extends ArrayList implements Costs
throw new RuntimeException("Not supported method");
}
+ @Override
+ public void setText(String text) {
+ this.text = text;
+ }
+
@Override
public String getText() {
+ if (text != null) {
+ return text;
+ }
if (this.size() == 0) {
return "";
}
StringBuilder sbText = new StringBuilder();
- for (T cost: this) {
- String text = cost.getText();
- if (text != null && !text.isEmpty()) {
- sbText.append(Character.toUpperCase(text.charAt(0))).append(text.substring(1)).append(", ");
+ for (T cost : this) {
+ String textCost = cost.getText();
+ if (textCost != null && !textCost.isEmpty()) {
+ sbText.append(Character.toUpperCase(textCost.charAt(0))).append(textCost.substring(1)).append(", ");
}
}
- if (sbText.length() > 1){
+ if (sbText.length() > 1) {
sbText.setLength(sbText.length() - 2);
}
return sbText.toString();
@@ -78,7 +89,7 @@ public class CostsImpl extends ArrayList implements Costs
@Override
public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) {
- for (T cost: this) {
+ for (T cost : this) {
if (!cost.canPay(ability, sourceId, controllerId, game)) {
return false;
}
@@ -101,7 +112,7 @@ public class CostsImpl extends ArrayList implements Costs
@Override
public boolean isPaid() {
- for (T cost: this) {
+ for (T cost : this) {
if (!(cost instanceof VariableManaCost) && !cost.isPaid()) {
return false;
}
@@ -111,14 +122,14 @@ public class CostsImpl extends ArrayList implements Costs
@Override
public void clearPaid() {
- for (T cost: this) {
+ for (T cost : this) {
cost.clearPaid();
}
}
@Override
public void setPaid() {
- for (T cost: this) {
+ for (T cost : this) {
cost.setPaid();
}
}
@@ -126,7 +137,7 @@ public class CostsImpl extends ArrayList implements Costs
@Override
public Costs getUnpaid() {
Costs unpaid = new CostsImpl<>();
- for (T cost: this) {
+ for (T cost : this) {
if (!cost.isPaid()) {
unpaid.add(cost);
}
@@ -140,17 +151,17 @@ public class CostsImpl extends ArrayList implements Costs
return unpaid.get(0);
}
return null;
- }
+ }
@Override
public List getVariableCosts() {
List variableCosts = new ArrayList<>();
- for (T cost: this) {
+ for (T cost : this) {
if (cost instanceof VariableCost) {
variableCosts.add((VariableCost) cost);
}
if (cost instanceof ManaCosts) {
- variableCosts.addAll(((ManaCosts)cost).getVariableCosts());
+ variableCosts.addAll(((ManaCosts) cost).getVariableCosts());
}
}
return variableCosts;
@@ -159,7 +170,7 @@ public class CostsImpl extends ArrayList implements Costs
@Override
public Targets getTargets() {
Targets targets = new Targets();
- for (T cost: this) {
+ for (T cost : this) {
if (cost.getTargets() != null) {
targets.addAll(cost.getTargets());
}
diff --git a/Mage/src/mage/abilities/costs/OptionalAdditionalCostImpl.java b/Mage/src/mage/abilities/costs/OptionalAdditionalCostImpl.java
index 489d8690ea..3646a9c3ec 100644
--- a/Mage/src/mage/abilities/costs/OptionalAdditionalCostImpl.java
+++ b/Mage/src/mage/abilities/costs/OptionalAdditionalCostImpl.java
@@ -50,7 +50,7 @@ public class OptionalAdditionalCostImpl ex
this.activated = false;
this.name = name;
this.delimiter = delimiter;
- this.reminderText = new StringBuilder("").append(reminderText).append("").toString();
+ this.reminderText = "(" + reminderText + ")";
this.activatedCounter = 0;
this.add((Cost) cost);
}
@@ -81,7 +81,7 @@ public class OptionalAdditionalCostImpl ex
if (onlyCost) {
return getText();
} else {
- return new StringBuffer(name).append(delimiter).append(getText()).toString();
+ return name + delimiter + getText();
}
}
diff --git a/Mage/src/mage/abilities/costs/OrCost.java b/Mage/src/mage/abilities/costs/OrCost.java
index 2c5a7740e7..0707741244 100644
--- a/Mage/src/mage/abilities/costs/OrCost.java
+++ b/Mage/src/mage/abilities/costs/OrCost.java
@@ -37,8 +37,8 @@ import mage.target.Targets;
public class OrCost implements Cost {
- private Cost firstCost;
- private Cost secondCost;
+ private final Cost firstCost;
+ private final Cost secondCost;
private String description;
// which cost was slected to pay
private Cost selectedCost;
@@ -61,6 +61,11 @@ public class OrCost implements Cost {
throw new RuntimeException("Not supported method");
}
+ @Override
+ public void setText(String text) {
+ this.description = text;
+ }
+
@Override
public String getText() {
return description;
diff --git a/Mage/src/mage/abilities/costs/VariableCostImpl.java b/Mage/src/mage/abilities/costs/VariableCostImpl.java
index 68557546df..e1002b91eb 100644
--- a/Mage/src/mage/abilities/costs/VariableCostImpl.java
+++ b/Mage/src/mage/abilities/costs/VariableCostImpl.java
@@ -77,6 +77,11 @@ public abstract class VariableCostImpl implements Cost, VariableCost {
this.amountPaid = cost.amountPaid;
}
+ @Override
+ public void setText(String text) {
+ this.text = text;
+ }
+
@Override
public String getText() {
return text;
diff --git a/Mage/src/mage/abilities/costs/common/DiscardTargetCost.java b/Mage/src/mage/abilities/costs/common/DiscardTargetCost.java
index 69fb9b6229..3cb460452a 100644
--- a/Mage/src/mage/abilities/costs/common/DiscardTargetCost.java
+++ b/Mage/src/mage/abilities/costs/common/DiscardTargetCost.java
@@ -1,16 +1,16 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
@@ -20,21 +20,20 @@
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
+ *
* The views and conclusions contained in the software and documentation are those of the
* 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 java.util.ArrayList;
import java.util.List;
import java.util.UUID;
-import mage.constants.Outcome;
import mage.abilities.Ability;
import mage.abilities.costs.CostImpl;
import mage.cards.Card;
+import mage.constants.Outcome;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetCardInHand;
@@ -44,23 +43,23 @@ import mage.target.common.TargetCardInHand;
* @author BetaSteward_at_googlemail.com
*/
public class DiscardTargetCost extends CostImpl {
-
+
List cards = new ArrayList<>();
protected boolean randomDiscard;
public DiscardTargetCost(TargetCardInHand target) {
this(target, false);
}
-
+
public DiscardTargetCost(TargetCardInHand target, boolean randomDiscard) {
this.addTarget(target);
this.randomDiscard = randomDiscard;
- this.text = "Discard " + target.getTargetName();
+ this.text = "discard " + target.getTargetName();
}
public DiscardTargetCost(DiscardTargetCost cost) {
super(cost);
- for (Card card: cost.cards) {
+ for (Card card : cost.cards) {
this.cards.add(card.copy());
}
this.randomDiscard = cost.randomDiscard;
@@ -74,11 +73,11 @@ public class DiscardTargetCost extends CostImpl {
return false;
}
int amount = this.getTargets().get(0).getNumberOfTargets();
- if (randomDiscard) {
+ if (randomDiscard) {
this.cards.addAll(player.discard(amount, true, ability, game).getCards(game));
} else {
- if (targets.choose(Outcome.Discard, controllerId, sourceId, game)) {
- for (UUID targetId: targets.get(0).getTargets()) {
+ if (targets.choose(Outcome.Discard, controllerId, sourceId, game)) {
+ for (UUID targetId : targets.get(0).getTargets()) {
Card card = player.getHand().get(targetId, game);
if (card == null) {
return false;
@@ -94,7 +93,7 @@ public class DiscardTargetCost extends CostImpl {
@Override
public void clearPaid() {
- super.clearPaid();
+ super.clearPaid();
cards.clear();
}
diff --git a/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java b/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java
index 5c6cb083be..ac056ba437 100644
--- a/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java
+++ b/Mage/src/mage/abilities/costs/mana/ManaCostsImpl.java
@@ -51,6 +51,7 @@ import mage.util.ManaUtil;
public class ManaCostsImpl extends ArrayList implements ManaCosts {
protected UUID id;
+ protected String text = null;
private static Map costs = new HashMap<>();
@@ -372,8 +373,16 @@ public class ManaCostsImpl extends ArrayList implements M
return this.id;
}
+ @Override
+ public void setText(String text) {
+ this.text = text;
+ }
+
@Override
public String getText() {
+ if (text != null) {
+ return text;
+ }
if (this.size() == 0) {
return "";
}
diff --git a/Mage/src/mage/abilities/effects/common/DrawCardTargetEffect.java b/Mage/src/mage/abilities/effects/common/DrawCardTargetEffect.java
index 6443cc2efb..7d7556fc7c 100644
--- a/Mage/src/mage/abilities/effects/common/DrawCardTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/DrawCardTargetEffect.java
@@ -1,16 +1,16 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
@@ -20,12 +20,11 @@
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
+ *
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-
package mage.abilities.effects.common;
import mage.abilities.Ability;
@@ -51,6 +50,7 @@ public class DrawCardTargetEffect extends OneShotEffect {
public DrawCardTargetEffect(int amount) {
this(new StaticValue(amount));
}
+
public DrawCardTargetEffect(int amount, boolean optional) {
this(new StaticValue(amount), optional);
}
@@ -117,7 +117,7 @@ public class DrawCardTargetEffect extends OneShotEffect {
if (upTo) {
sb.append("up to ");
}
- sb.append(CardUtil.numberToText(amount.toString())).append(" card");
+ sb.append(CardUtil.numberToText(amount.toString(), "a")).append(" card");
try {
if (Integer.parseInt(amount.toString()) > 1) {
sb.append("s");
@@ -133,5 +133,4 @@ public class DrawCardTargetEffect extends OneShotEffect {
return sb.toString();
}
-
}
diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesColorOrColorsTargetEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesColorOrColorsTargetEffect.java
index dcdbe3ef9f..c8fc6e2e6c 100644
--- a/Mage/src/mage/abilities/effects/common/continuous/BecomesColorOrColorsTargetEffect.java
+++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesColorOrColorsTargetEffect.java
@@ -44,14 +44,14 @@ import mage.target.targetpointer.FixedTarget;
*
* @author LevelX2
*/
-
public class BecomesColorOrColorsTargetEffect extends OneShotEffect {
Duration duration;
+
/**
* This effect let the controller choose one or more colors the target will
- * become to.
- * Use effect.setText() if case you use a targetPointer, otherwise the rule text will be empty.
+ * become to. Use effect.setText() if case you use a targetPointer,
+ * otherwise the rule text will be empty.
*
* @param duration
*/
@@ -81,8 +81,9 @@ public class BecomesColorOrColorsTargetEffect extends OneShotEffect {
if (!controller.canRespond()) {
return false;
}
- if (!game.isSimulation())
+ if (!game.isSimulation()) {
game.informPlayers(target.getName() + ": " + controller.getLogName() + " has chosen " + choiceColor.getChoice());
+ }
if (choiceColor.getColor().isBlack()) {
sb.append("B");
} else if (choiceColor.getColor().isBlue()) {
@@ -119,7 +120,7 @@ public class BecomesColorOrColorsTargetEffect extends OneShotEffect {
StringBuilder sb = new StringBuilder();
if (mode.getTargets().size() > 0) {
sb.append("target ");
- sb.append(mode.getTargets().get(0).getMessage());
+ sb.append(mode.getTargets().get(0).getFilter().getMessage());
sb.append(" becomes the color or colors of your choice");
if (duration.toString().length() > 0) {
sb.append(" ").append(duration.toString());
diff --git a/Mage/src/mage/abilities/keyword/BuybackAbility.java b/Mage/src/mage/abilities/keyword/BuybackAbility.java
index 05059e4e53..f35c32c874 100644
--- a/Mage/src/mage/abilities/keyword/BuybackAbility.java
+++ b/Mage/src/mage/abilities/keyword/BuybackAbility.java
@@ -63,8 +63,8 @@ import mage.players.Player;
public class BuybackAbility extends StaticAbility implements OptionalAdditionalSourceCosts {
private static final String keywordText = "Buyback";
- private static final String reminderTextCost = "(You may {cost} in addition to any other costs as you cast this spell. If you do, put this card into your hand as it resolves.)";
- private static final String reminderTextMana = "(You may pay an additional {cost} as you cast this spell. If you do, put this card into your hand as it resolves.)";
+ private static final String reminderTextCost = "You may {cost} in addition to any other costs as you cast this spell. If you do, put this card into your hand as it resolves.";
+ private static final String reminderTextMana = "You may pay an additional {cost} as you cast this spell. If you do, put this card into your hand as it resolves.";
protected OptionalAdditionalCost buybackCost;
public BuybackAbility(String manaString) {
diff --git a/Mage/src/mage/abilities/keyword/ConspireAbility.java b/Mage/src/mage/abilities/keyword/ConspireAbility.java
index 7d48fe50e0..674505173b 100644
--- a/Mage/src/mage/abilities/keyword/ConspireAbility.java
+++ b/Mage/src/mage/abilities/keyword/ConspireAbility.java
@@ -113,8 +113,9 @@ public class ConspireAbility extends StaticAbility implements OptionalAdditional
reminderText = "As you cast this spell, you may tap two untapped creatures you control that share a color with it. When you do, copy it and you may choose a new targets for the copy.)";
break;
}
- conspireCost = new OptionalAdditionalCostImpl(keywordText, "-", reminderText,
- new TapTargetCost(new TargetControlledPermanent(2, 2, filter, true)));
+ Cost cost = new TapTargetCost(new TargetControlledPermanent(2, 2, filter, true));
+ cost.setText("");
+ conspireCost = new OptionalAdditionalCostImpl(keywordText, " ", reminderText, cost);
addSubAbility(new ConspireTriggeredAbility(conspireId));
}
diff --git a/Mage/src/mage/abilities/keyword/EntwineAbility.java b/Mage/src/mage/abilities/keyword/EntwineAbility.java
index 8448463486..c81d1cbd95 100644
--- a/Mage/src/mage/abilities/keyword/EntwineAbility.java
+++ b/Mage/src/mage/abilities/keyword/EntwineAbility.java
@@ -59,7 +59,7 @@ import mage.players.Player;
public class EntwineAbility extends StaticAbility implements OptionalAdditionalModeSourceCosts {
private static final String keywordText = "Entwine";
- private static final String reminderText = " (Choose both if you pay the entwine cost.)";
+ private static final String reminderText = "Choose both if you pay the entwine cost.";
protected OptionalAdditionalCost additionalCost;
public EntwineAbility(String manaString) {
diff --git a/Mage/src/mage/abilities/keyword/KickerAbility.java b/Mage/src/mage/abilities/keyword/KickerAbility.java
index d28edb5307..f7bc6c8ff8 100644
--- a/Mage/src/mage/abilities/keyword/KickerAbility.java
+++ b/Mage/src/mage/abilities/keyword/KickerAbility.java
@@ -85,8 +85,8 @@ import mage.players.Player;
public class KickerAbility extends StaticAbility implements OptionalAdditionalSourceCosts {
protected static final String KICKER_KEYWORD = "Kicker";
- protected static final String KICKER_REMINDER_MANA = "(You may pay an additional {cost} as you cast this spell.)";
- protected static final String KICKER_REMINDER_COST = "(You may {cost} in addition to any other costs as you cast this spell.)";
+ protected static final String KICKER_REMINDER_MANA = "You may pay an additional {cost} as you cast this spell.";
+ protected static final String KICKER_REMINDER_COST = "You may {cost} in addition to any other costs as you cast this spell.";
protected Map activations = new HashMap<>(); // zoneChangeCounter, activations
diff --git a/Mage/src/mage/abilities/keyword/ReplicateAbility.java b/Mage/src/mage/abilities/keyword/ReplicateAbility.java
index 8be57a3997..ed5c34e1a2 100644
--- a/Mage/src/mage/abilities/keyword/ReplicateAbility.java
+++ b/Mage/src/mage/abilities/keyword/ReplicateAbility.java
@@ -56,7 +56,7 @@ import mage.players.Player;
public class ReplicateAbility extends StaticAbility implements OptionalAdditionalSourceCosts {
private static final String keywordText = "Replicate";
- private static final String reminderTextMana = "(When you cast this spell, copy it for each time you paid its replicate cost. You may choose new targets for the copies.)";
+ private static final String reminderTextMana = "When you cast this spell, copy it for each time you paid its replicate cost. You may choose new targets for the copies.";
protected OptionalAdditionalCost additionalCost;
public ReplicateAbility(Card card, String manaString) {
diff --git a/Mage/src/mage/abilities/keyword/RetraceAbility.java b/Mage/src/mage/abilities/keyword/RetraceAbility.java
index 2ce121fc25..21e6b84d9e 100644
--- a/Mage/src/mage/abilities/keyword/RetraceAbility.java
+++ b/Mage/src/mage/abilities/keyword/RetraceAbility.java
@@ -28,6 +28,7 @@
package mage.abilities.keyword;
import mage.abilities.SpellAbility;
+import mage.abilities.costs.Cost;
import mage.abilities.costs.common.DiscardTargetCost;
import mage.cards.Card;
import mage.constants.SpellAbilityType;
@@ -44,7 +45,9 @@ public class RetraceAbility extends SpellAbility {
public RetraceAbility(Card card) {
super(card.getManaCost(), card.getName() + " with retrace", Zone.GRAVEYARD, SpellAbilityType.BASE_ALTERNATE);
this.getCosts().addAll(card.getSpellAbility().getCosts().copy());
- this.addCost(new DiscardTargetCost(new TargetCardInHand(new FilterLandCard())));
+ Cost cost = new DiscardTargetCost(new TargetCardInHand(new FilterLandCard()));
+ cost.setText("");
+ this.addCost(cost);
this.getEffects().addAll(card.getSpellAbility().getEffects().copy());
this.getTargets().addAll(card.getSpellAbility().getTargets().copy());
this.getChoices().addAll(card.getSpellAbility().getChoices().copy());