mirror of
https://github.com/correl/mage.git
synced 2024-11-24 19:19:56 +00:00
[AER] various text fixes
This commit is contained in:
parent
6d02a902b7
commit
014a4b6941
48 changed files with 205 additions and 236 deletions
|
@ -24,7 +24,7 @@ import mage.target.TargetPermanent;
|
|||
*/
|
||||
public final class AerialModification extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterPermanent("creature or vehicle");
|
||||
private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle");
|
||||
|
||||
static {
|
||||
filter.add(Predicates.or(CardType.CREATURE.getPredicate(),
|
||||
|
|
|
@ -36,8 +36,7 @@ public final class AetherChaser extends CardImpl {
|
|||
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
|
||||
|
||||
// Whenever Aether Chaser attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token.
|
||||
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false,
|
||||
"Whenever {this} attacks you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token."));
|
||||
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2))));
|
||||
}
|
||||
|
||||
private AetherChaser(final AetherChaser card) {
|
||||
|
|
|
@ -34,8 +34,7 @@ public final class AetherHerder extends CardImpl {
|
|||
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
|
||||
|
||||
// Whenever Aether Herder attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token.
|
||||
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false,
|
||||
"Whenever {this} attacks you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token."));
|
||||
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2))));
|
||||
}
|
||||
|
||||
private AetherHerder(final AetherHerder card) {
|
||||
|
|
|
@ -36,8 +36,7 @@ public final class AetherInspector extends CardImpl {
|
|||
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
|
||||
|
||||
// Whenever Aether Inspector attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token.
|
||||
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false,
|
||||
"Whenever {this} attacks you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token."));
|
||||
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2))));
|
||||
}
|
||||
|
||||
private AetherInspector(final AetherInspector card) {
|
||||
|
|
|
@ -37,8 +37,7 @@ public final class AetherSwooper extends CardImpl {
|
|||
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(2)));
|
||||
|
||||
// Whenever Aether Swooper attacks, you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token.
|
||||
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2)), false,
|
||||
"Whenever {this} attacks you may pay {E}{E}. If you do, create a 1/1 colorless Servo artifact creature token."));
|
||||
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new ServoToken()), new PayEnergyCost(2))));
|
||||
}
|
||||
|
||||
private AetherSwooper(final AetherSwooper card) {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.a;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
|
@ -16,8 +14,9 @@ import mage.constants.CardType;
|
|||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class AetherstreamLeopard extends CardImpl {
|
||||
|
@ -36,8 +35,9 @@ public final class AetherstreamLeopard extends CardImpl {
|
|||
this.addAbility(new EntersBattlefieldTriggeredAbility(new GetEnergyCountersControllerEffect(1)));
|
||||
|
||||
// Whenever Aetherstream Leopard attacks, you may pay {E}. If you do, it gets +2/+0 until end of turn.
|
||||
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new BoostSourceEffect(2, 0, Duration.EndOfTurn), new PayEnergyCost(1)), false,
|
||||
"Whenever {this} attacks you may pay {E}. If you do, it gets +2/+0 until end of turn."));
|
||||
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(new BoostSourceEffect(
|
||||
2, 0, Duration.EndOfTurn
|
||||
).setText("it gets +2/+0 until end of turn"), new PayEnergyCost(1))));
|
||||
}
|
||||
|
||||
private AetherstreamLeopard(final AetherstreamLeopard card) {
|
||||
|
|
|
@ -25,7 +25,7 @@ import mage.watchers.common.RevoltWatcher;
|
|||
public final class AidFromTheCowl extends CardImpl {
|
||||
|
||||
private static final String ruleText = "<i>Revolt</i> — At the beginning of your end step, if a permanent you controlled left the battlefield this turn, "
|
||||
+ "reveal the top card of your library. If it's a permanent card, you may put it onto the battlefield. Otherwise, put it on the bottom of your library.";
|
||||
+ "reveal the top card of your library. If it's a permanent card, you may put it onto the battlefield. Otherwise, you may put it on the bottom of your library.";
|
||||
|
||||
public AidFromTheCowl(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}{G}");
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.a;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
|
@ -16,8 +14,9 @@ import mage.constants.CardType;
|
|||
import mage.constants.SubType;
|
||||
import mage.watchers.common.RevoltWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Styxo
|
||||
*/
|
||||
public final class AirdropAeronauts extends CardImpl {
|
||||
|
@ -34,10 +33,10 @@ public final class AirdropAeronauts extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// <i>Revolt</i> — When Airdrop Aeronauts enters the battlefield, if a permanent you controlled left the battlefield this turn, you gain 5 life.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new GainLifeEffect(5), false), RevoltCondition.instance,
|
||||
"<i>Revolt</i> — When {this} enters the battlefield, if a permanent you controlled left"
|
||||
+ " the battlefield this turn, you gain 5 life."
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new GainLifeEffect(5), false),
|
||||
RevoltCondition.instance, "When {this} enters the battlefield, " +
|
||||
"if a permanent you controlled left the battlefield this turn, you gain 5 life."
|
||||
);
|
||||
ability.setAbilityWord(AbilityWord.REVOLT);
|
||||
this.addAbility(ability, new RevoltWatcher());
|
||||
|
|
|
@ -52,7 +52,7 @@ public final class AjaniUnyielding extends CardImpl {
|
|||
|
||||
// -9: Put five +1/+1 counters on each creature you control and five loyalty counters on each other planeswalker you control.
|
||||
LoyaltyAbility ajaniAbility3 = new LoyaltyAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(5), new FilterControlledCreaturePermanent()), -9);
|
||||
ajaniAbility3.addEffect(new AddCountersAllEffect(CounterType.LOYALTY.createInstance(5), planeswalkerFilter));
|
||||
ajaniAbility3.addEffect(new AddCountersAllEffect(CounterType.LOYALTY.createInstance(5), planeswalkerFilter).setText("and five loyalty counters on each other planeswalker you control"));
|
||||
this.addAbility(ajaniAbility3);
|
||||
}
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ public final class CaughtInTheBrights extends CardImpl {
|
|||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantAttackBlockAttachedEffect(AttachmentType.AURA)));
|
||||
|
||||
// When a Vehicle you control attacks, exile enchanted creature.
|
||||
this.addAbility(new AttacksAllTriggeredAbility(new ExileAttachedEffect(), false, filter, SetTargetPointer.NONE, false));
|
||||
this.addAbility(new AttacksAllTriggeredAbility(new ExileAttachedEffect(), false, filter, SetTargetPointer.NONE, false).setTriggerPhrase("When a Vehicle you control attacks, "));
|
||||
}
|
||||
|
||||
private CaughtInTheBrights(final CaughtInTheBrights card) {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
|
@ -16,6 +14,8 @@ import mage.constants.SubType;
|
|||
import mage.game.permanent.token.ServoToken;
|
||||
import mage.watchers.common.RevoltWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author JRHerlehy
|
||||
*/
|
||||
|
@ -31,13 +31,13 @@ public final class CountlessGearsRenegade extends CardImpl {
|
|||
|
||||
// <i>Revolt</i> — When Countless Gears Renegade enters the battlefield, if a permanent you controlled
|
||||
// left the battlefield this turn, create a 1/1 colorless Servo artifact creature token.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new CreateTokenEffect(new ServoToken(), 1), false), RevoltCondition.instance,
|
||||
"<i>Revolt</i> — When {this} enters the battlefield, if a permanent you controlled left"
|
||||
+ " the battlefield this turn, create a 1/1 colorless Servo artifact creature token.");
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ServoToken()), false),
|
||||
RevoltCondition.instance, "When {this} enters the battlefield, if a permanent you controlled " +
|
||||
"left the battlefield this turn, create a 1/1 colorless Servo artifact creature token."
|
||||
);
|
||||
ability.setAbilityWord(AbilityWord.REVOLT);
|
||||
ability.addWatcher(new RevoltWatcher());
|
||||
this.addAbility(ability);
|
||||
this.addAbility(ability, new RevoltWatcher());
|
||||
}
|
||||
|
||||
private CountlessGearsRenegade(final CountlessGearsRenegade card) {
|
||||
|
|
|
@ -48,7 +48,7 @@ public final class DarkIntimations extends CardImpl {
|
|||
this.getSpellAbility().addEffect(new DarkIntimationsEffect());
|
||||
|
||||
// When you cast a Bolas planeswalker spell, exile Dark Intimations from your graveyard. That planeswalker enters the battlefield with an additional loyalty counter on it.
|
||||
this.addAbility(new SpellCastControllerTriggeredAbility(Zone.GRAVEYARD, new DarkIntimationsGraveyardEffect(), filter, false, true));
|
||||
this.addAbility(new SpellCastControllerTriggeredAbility(Zone.GRAVEYARD, new DarkIntimationsGraveyardEffect(), filter, false, true).setTriggerPhrase("When you cast a Bolas planeswalker spell, "));
|
||||
}
|
||||
|
||||
private DarkIntimations(final DarkIntimations card) {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
|
@ -13,18 +11,21 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.AbilityWord;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterOpponentsCreaturePermanent;
|
||||
import mage.filter.predicate.permanent.TappedPredicate;
|
||||
import mage.target.common.TargetOpponentsCreaturePermanent;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.watchers.common.RevoltWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Styxo
|
||||
*/
|
||||
public final class DeadeyeHarpooner extends CardImpl {
|
||||
|
||||
private static final FilterOpponentsCreaturePermanent filter = new FilterOpponentsCreaturePermanent("tapped creature an opponent controls");
|
||||
private static final FilterPermanent filter
|
||||
= new FilterOpponentsCreaturePermanent("tapped creature an opponent controls");
|
||||
|
||||
static {
|
||||
filter.add(TappedPredicate.TAPPED);
|
||||
|
@ -39,15 +40,14 @@ public final class DeadeyeHarpooner extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// <i>Revolt</i> — When Deadeye Harpooner enters the battlefield, if a permanent you controlled left the battlefield this turn, destroy target tapped creature an opponent controls.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new DestroyTargetEffect(), false), RevoltCondition.instance,
|
||||
"<i>Revolt</i> — When {this} enters the battlefield, if a permanent you controlled left"
|
||||
+ " the battlefield this turn, destroy target tapped creature an opponent controls."
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect(), false),
|
||||
RevoltCondition.instance, "When {this} enters the battlefield, if a permanent you controlled " +
|
||||
"left the battlefield this turn, destroy target tapped creature an opponent controls."
|
||||
);
|
||||
ability.setAbilityWord(AbilityWord.REVOLT);
|
||||
ability.addTarget(new TargetOpponentsCreaturePermanent(filter));
|
||||
ability.addWatcher(new RevoltWatcher());
|
||||
this.addAbility(ability);
|
||||
ability.addTarget(new TargetPermanent(filter));
|
||||
this.addAbility(ability, new RevoltWatcher());
|
||||
}
|
||||
|
||||
private DeadeyeHarpooner(final DeadeyeHarpooner card) {
|
||||
|
|
|
@ -36,7 +36,7 @@ public final class FelidarGuardian extends CardImpl {
|
|||
|
||||
// When Felidar Guardian enters the battlefield, you may exile another target permanent you control, then return that card to the battlefield under its owner's control.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetForSourceEffect(), true);
|
||||
ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false));
|
||||
ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false).concatBy(","));
|
||||
ability.addTarget(new TargetControlledPermanent(filter));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -1,21 +1,18 @@
|
|||
|
||||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Duration;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class FourthBridgeProwler extends CardImpl {
|
||||
|
@ -29,9 +26,8 @@ public final class FourthBridgeProwler extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
// When Fourth Bridge Prowler enters the battlefield, you may have target creature get -1/-1 until end of turn.
|
||||
Effect effect = new BoostTargetEffect(-1, -1, Duration.EndOfTurn);
|
||||
effect.setText("have target creature get -1/-1 until end of turn");
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(effect, true);
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new BoostTargetEffect(-1, -1)
|
||||
.setText("you may have target creature get -1/-1 until end of turn"), true);
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@ import mage.MageInt;
|
|||
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldOrAttacksSourceTriggeredAbility;
|
||||
import mage.abilities.costs.common.PayEnergyCost;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.DoIfCostPaid;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
|
||||
|
@ -15,7 +14,6 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -39,11 +37,9 @@ public final class GlintSleeveSiphoner extends CardImpl {
|
|||
this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new GetEnergyCountersControllerEffect(1)));
|
||||
|
||||
// At the beginning of your upkeep, you may pay {E}{E}. If you do, draw a card and you lose 1 life.
|
||||
DoIfCostPaid doIfCostPaidEffect = new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new PayEnergyCost(2));
|
||||
Effect effect = new LoseLifeSourceControllerEffect(1);
|
||||
doIfCostPaidEffect.addEffect(effect.concatBy("and"));
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, doIfCostPaidEffect, TargetController.YOU, false, false,
|
||||
"At the beginning of your upkeep, "));
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DoIfCostPaid(
|
||||
new DrawCardSourceControllerEffect(1).setText("you draw a card"), new PayEnergyCost(2)
|
||||
).addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")), TargetController.YOU, false));
|
||||
}
|
||||
|
||||
private GlintSleeveSiphoner(final GlintSleeveSiphoner card) {
|
||||
|
|
|
@ -39,9 +39,7 @@ public final class GremlinInfestation extends CardImpl {
|
|||
this.addAbility(ability);
|
||||
|
||||
// At the beginning of your end step, Gremlin Infestation deals 2 damage to enchanted artifact's controller.
|
||||
Effect effect = new DamageAttachedControllerEffect(2);
|
||||
effect.setText("{this} deals 2 damage to enchanted artifact's controller");
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(new DamageAttachedControllerEffect(2), TargetController.YOU, false));
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(new DamageAttachedControllerEffect(2).setText("{this} deals 2 damage to enchanted artifact's controller"), TargetController.YOU, false));
|
||||
|
||||
// When enchanted artifact is put into a graveyard, create a 2/2 red Gremlin creature token.
|
||||
this.addAbility(new DiesAttachedTriggeredAbility(new CreateTokenEffect(new GremlinToken()), "enchanted artifact", false, false));
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.h;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility;
|
||||
|
@ -14,17 +12,14 @@ import mage.abilities.keyword.FlyingAbility;
|
|||
import mage.abilities.keyword.ImproviseAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterControlledArtifactPermanent;
|
||||
import mage.constants.*;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.target.common.TargetControlledPermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class HeraldOfAnguish extends CardImpl {
|
||||
|
@ -47,7 +42,7 @@ public final class HeraldOfAnguish extends CardImpl {
|
|||
|
||||
// {1}{B}, Sacrifice an artifact: Target creature gets -2/-2 until end of turn.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(-2, -2, Duration.EndOfTurn), new ManaCostsImpl("{1}{B}"));
|
||||
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledArtifactPermanent())));
|
||||
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_AN)));
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.h;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BeginningOfYourEndStepTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
|
@ -15,14 +13,15 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityWord;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT;
|
||||
import mage.game.permanent.token.ServoToken;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
import mage.watchers.common.RevoltWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class HiddenStockpile extends CardImpl {
|
||||
|
@ -31,14 +30,14 @@ public final class HiddenStockpile extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}{B}");
|
||||
|
||||
// <i>Revolt</i> — At the beginning of your end step, if a permanent you controlled left the battlefield this turn, create a 1/1 colorless Servo artifact creature token.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(new BeginningOfYourEndStepTriggeredAbility(new CreateTokenEffect(new ServoToken()), false), RevoltCondition.instance,
|
||||
"<i>Revolt</i> — At the beginning of your end step, if a permanent you controlled left the battlefield this turn, create a 1/1 colorless Servo artifact creature token.");
|
||||
ability.setAbilityWord(AbilityWord.REVOLT);
|
||||
ability.addWatcher(new RevoltWatcher());
|
||||
this.addAbility(ability);
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfYourEndStepTriggeredAbility(new CreateTokenEffect(new ServoToken()), false),
|
||||
RevoltCondition.instance, "At the beginning of your end step, if a permanent you controlled " +
|
||||
"left the battlefield this turn, create a 1/1 colorless Servo artifact creature token."
|
||||
).setAbilityWord(AbilityWord.REVOLT), new RevoltWatcher());
|
||||
|
||||
// {1}, Sacrifice a creature: Scry 1.
|
||||
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ScryEffect(1, false), new GenericManaCost(1));
|
||||
Ability ability = new SimpleActivatedAbility(new ScryEffect(1, false), new GenericManaCost(1));
|
||||
ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT)));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ public final class HinterlandDrake extends CardImpl {
|
|||
|
||||
// Hinterland Drake can't block artifact creatures.
|
||||
Effect effect = new CantBlockCreaturesSourceEffect(StaticFilters.FILTER_PERMANENT_ARTIFACT_CREATURE);
|
||||
effect.setText("{this} can't block artifact creatures");
|
||||
effect.setText("{this} can't block artifact creatures");
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect));
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ public final class IllusionistsStratagem extends CardImpl {
|
|||
StaticFilters.FILTER_CONTROLLED_CREATURES, false));
|
||||
|
||||
// Draw a card.
|
||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
|
||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
|
||||
}
|
||||
|
||||
private IllusionistsStratagem(final IllusionistsStratagem card) {
|
||||
|
|
|
@ -71,7 +71,7 @@ class IndomitableCreativityEffect extends OneShotEffect {
|
|||
"For each permanent destroyed this way, " +
|
||||
"its controller reveals cards from the top of their library" +
|
||||
" until an artifact or creature card is revealed and exiles that card. " +
|
||||
"Those players put the exiled card onto the battlefield, then shuffle";
|
||||
"Those players put the exiled cards onto the battlefield, then shuffle";
|
||||
}
|
||||
|
||||
public IndomitableCreativityEffect(final IndomitableCreativityEffect effect) {
|
||||
|
|
|
@ -17,7 +17,7 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class InspiringStatuary extends CardImpl {
|
||||
|
||||
private static final FilterCard filter = new FilterCard("non-artifact spells you cast");
|
||||
private static final FilterCard filter = new FilterCard("nonartifact spells");
|
||||
|
||||
static {
|
||||
filter.add(Predicates.not(CardType.ARTIFACT.getPredicate()));
|
||||
|
|
|
@ -58,7 +58,7 @@ class KariZevSkyshipRaiderEffect extends OneShotEffect {
|
|||
|
||||
KariZevSkyshipRaiderEffect() {
|
||||
super(Outcome.PutCreatureInPlay);
|
||||
staticText = "create Ragaven, a legendary 2/1 red Monkey creature token. Ragavan enters the battlefied tapped and attacking. Exile that token at end of combat";
|
||||
staticText = "create Ragavan, a legendary 2/1 red Monkey creature token. Ragavan enters the battlefield tapped and attacking. Exile that token at end of combat";
|
||||
}
|
||||
|
||||
KariZevSkyshipRaiderEffect(final KariZevSkyshipRaiderEffect effect) {
|
||||
|
|
|
@ -23,7 +23,7 @@ public final class LeaveInTheDust extends CardImpl {
|
|||
this.getSpellAbility().addTarget(new TargetNonlandPermanent());
|
||||
|
||||
// Draw a card.
|
||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
|
||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -37,8 +37,9 @@ public final class LifecraftAwakening extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{G}");
|
||||
|
||||
// Put X +1/+1 counters on target artifact you control. If it isn't a creature or Vehicle, it becomes a 0/0 Construct artifact creature.
|
||||
ManacostVariableValue manaX = ManacostVariableValue.REGULAR;
|
||||
getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(), manaX));
|
||||
getSpellAbility().addEffect(new AddCountersTargetEffect(
|
||||
CounterType.P1P1.createInstance(), ManacostVariableValue.REGULAR
|
||||
).setText("put X +1/+1 counters on target artifact you control"));
|
||||
getSpellAbility().addTarget(new TargetArtifactPermanent(filter));
|
||||
getSpellAbility().addEffect(new LifecraftAwakeningEffect());
|
||||
}
|
||||
|
|
|
@ -62,8 +62,8 @@ class LightningRunnerEffect extends OneShotEffect {
|
|||
|
||||
LightningRunnerEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "you get {E}{E}, then you may pay {E}{E}{E}{E}{E}{E}{E}{E}. If you do, "
|
||||
+ "untap all creatures you control and after this phase, there is an additional combat phase";
|
||||
staticText = "you get {E}{E}, then you may pay {E}{E}{E}{E}{E}{E}{E}{E}. If you pay, "
|
||||
+ "untap all creatures you control, and after this phase, there is an additional combat phase";
|
||||
}
|
||||
|
||||
LightningRunnerEffect(final LightningRunnerEffect effect) {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.n;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldAbility;
|
||||
import mage.abilities.condition.common.RevoltCondition;
|
||||
|
@ -14,8 +12,9 @@ import mage.constants.SubType;
|
|||
import mage.counters.CounterType;
|
||||
import mage.watchers.common.RevoltWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class NarnamRenegade extends CardImpl {
|
||||
|
@ -32,13 +31,11 @@ public final class NarnamRenegade extends CardImpl {
|
|||
this.addAbility(DeathtouchAbility.getInstance());
|
||||
|
||||
// <i>Revolt</i> — Narnam Renegade enters the battlefield with a +1/+1 counter on it if a permanent you controlled left this battlefield this turn.
|
||||
this.addAbility(
|
||||
new EntersBattlefieldAbility(
|
||||
new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
|
||||
false, RevoltCondition.instance,
|
||||
"<i>Revolt</i> — {this} enters the battlefield with a +1/+1 counter on it if a permanent you controlled left the battlefield this turn", null),
|
||||
new RevoltWatcher()
|
||||
);
|
||||
this.addAbility(new EntersBattlefieldAbility(
|
||||
new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false,
|
||||
RevoltCondition.instance, "<i>Revolt</i> — {this} enters the battlefield with " +
|
||||
"a +1/+1 counter on it if a permanent you controlled left the battlefield this turn.", null
|
||||
), new RevoltWatcher());
|
||||
}
|
||||
|
||||
private NarnamRenegade(final NarnamRenegade card) {
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
|
||||
|
||||
package mage.cards.n;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldAbility;
|
||||
import mage.abilities.condition.common.RevoltCondition;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
|
@ -16,6 +12,8 @@ import mage.constants.SubType;
|
|||
import mage.counters.CounterType;
|
||||
import mage.watchers.common.RevoltWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author JRHerlehy
|
||||
*/
|
||||
|
@ -34,11 +32,11 @@ public final class NightMarketAeronaut extends CardImpl {
|
|||
|
||||
// <i>Revolt</i> — Night Market Aeronaut enters the battlefield with a +1/+1 counter on it if
|
||||
// a permanent you controlled left the battlefield this turn.
|
||||
Ability ability = new EntersBattlefieldAbility(
|
||||
new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, RevoltCondition.instance,
|
||||
"<i>Revolt</i> — {this} enters the battlefield with a +1/+1 counter on it if a permanent you controlled left the battlefield this turn", null);
|
||||
ability.addWatcher(new RevoltWatcher());
|
||||
this.addAbility(ability);
|
||||
this.addAbility(new EntersBattlefieldAbility(
|
||||
new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false,
|
||||
RevoltCondition.instance, "<i>Revolt</i> — {this} enters the battlefield with " +
|
||||
"a +1/+1 counter on it if a permanent you controlled left the battlefield this turn.", null
|
||||
), new RevoltWatcher());
|
||||
}
|
||||
|
||||
private NightMarketAeronaut(final NightMarketAeronaut card) {
|
||||
|
|
|
@ -1,28 +1,31 @@
|
|||
|
||||
package mage.cards.p;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||
import mage.abilities.effects.common.UntapAllControllerEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterNonlandPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class ParadoxEngine extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterNonlandPermanent("nonland permanents");
|
||||
|
||||
public ParadoxEngine(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
|
||||
|
||||
this.addSuperType(SuperType.LEGENDARY);
|
||||
|
||||
// Whenever you cast a spell, untap all nonland permanents you control.
|
||||
this.addAbility(new SpellCastControllerTriggeredAbility(new UntapAllControllerEffect(new FilterNonlandPermanent()), false));
|
||||
this.addAbility(new SpellCastControllerTriggeredAbility(new UntapAllControllerEffect(filter), false));
|
||||
}
|
||||
|
||||
private ParadoxEngine(final ParadoxEngine card) {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.r;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
|
@ -12,15 +10,16 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityWord;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.ComparisonType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.common.FilterPermanentCard;
|
||||
import mage.filter.predicate.mageobject.ManaValuePredicate;
|
||||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
import mage.watchers.common.RevoltWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class RenegadeRallier extends CardImpl {
|
||||
|
@ -41,14 +40,13 @@ public final class RenegadeRallier extends CardImpl {
|
|||
|
||||
// <i>Revolt</i> — When Renegade Rallier enters the battlefield, if a permanent you controlled left the battlefield this turn,
|
||||
// return target permanent card with converted mana cost 2 or less from your graveyard to your battlefield.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new ReturnFromGraveyardToBattlefieldTargetEffect(), false), RevoltCondition.instance,
|
||||
"<i>Revolt</i> — When {this} enters the battlefield, if a permanent you controlled left"
|
||||
+ " the battlefield this turn, return target permanent card with mana value 2 or less from your graveyard to the battlefield.");
|
||||
ability.setAbilityWord(AbilityWord.REVOLT);
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect(), false),
|
||||
RevoltCondition.instance, "When {this} enters the battlefield, if a permanent you controlled " +
|
||||
"left the battlefield this turn, return target permanent card with mana value 2 or less from your graveyard to the battlefield."
|
||||
).setAbilityWord(AbilityWord.REVOLT);
|
||||
ability.addTarget(new TargetCardInYourGraveyard(filter));
|
||||
ability.addWatcher(new RevoltWatcher());
|
||||
this.addAbility(ability);
|
||||
this.addAbility(ability, new RevoltWatcher());
|
||||
}
|
||||
|
||||
private RenegadeRallier(final RenegadeRallier card) {
|
||||
|
|
|
@ -5,6 +5,7 @@ import java.util.UUID;
|
|||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
|
||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
@ -23,7 +24,7 @@ public final class ResourcefulReturn extends CardImpl {
|
|||
|
||||
// Return target creature card from your graveyard to your hand. If you control an artifact, draw a card.
|
||||
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
|
||||
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
|
||||
this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect());
|
||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DrawCardSourceControllerEffect(1),
|
||||
new PermanentsOnTheBattlefieldCondition(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT),
|
||||
"If you control an artifact, draw a card"));
|
||||
|
|
|
@ -1,20 +1,17 @@
|
|||
|
||||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
||||
import mage.abilities.effects.common.ReturnToHandChosenControlledPermanentEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.common.FilterControlledArtifactPermanent;
|
||||
import mage.target.common.TargetControlledPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class SalvageScuttler extends CardImpl {
|
||||
|
@ -27,9 +24,9 @@ public final class SalvageScuttler extends CardImpl {
|
|||
this.toughness = new MageInt(4);
|
||||
|
||||
// Whenever Salvage Scuttler attacks, return an artifact you control to its owner's hand.
|
||||
Ability ability = new AttacksTriggeredAbility(new ReturnToHandTargetEffect(), false);
|
||||
ability.addTarget(new TargetControlledPermanent(new FilterControlledArtifactPermanent("an artifact you control")));
|
||||
this.addAbility(ability);
|
||||
this.addAbility(new AttacksTriggeredAbility(
|
||||
new ReturnToHandChosenControlledPermanentEffect(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT)
|
||||
));
|
||||
}
|
||||
|
||||
private SalvageScuttler(final SalvageScuttler card) {
|
||||
|
|
|
@ -65,7 +65,7 @@ class ScroungingBandarEffect extends OneShotEffect {
|
|||
|
||||
public ScroungingBandarEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "move any number of +1/+1 counters from Scrounging Bandar onto another target creature";
|
||||
this.staticText = "you may move any number of +1/+1 counters from Scrounging Bandar onto another target creature";
|
||||
}
|
||||
|
||||
public ScroungingBandarEffect(final ScroungingBandarEffect effect) {
|
||||
|
|
|
@ -47,7 +47,7 @@ class SecretSalvageEffect extends OneShotEffect {
|
|||
public SecretSalvageEffect() {
|
||||
super(Outcome.DrawCard);
|
||||
staticText = "Exile target nonland card from your graveyard. Search your library for any number of cards with the same name as that card, "
|
||||
+ "reveal them, and put them into your hand. Then shuffle";
|
||||
+ "reveal them, put them into your hand, then shuffle";
|
||||
}
|
||||
|
||||
public SecretSalvageEffect(final SecretSalvageEffect effect) {
|
||||
|
|
|
@ -35,7 +35,7 @@ public final class ShieldedAetherThief extends CardImpl {
|
|||
this.addAbility(FlashAbility.getInstance());
|
||||
|
||||
// Whenever Shield Aether Thief blocks, you get {E}.
|
||||
this.addAbility(new BlocksSourceTriggeredAbility(new GetEnergyCountersControllerEffect(1), false, true));
|
||||
this.addAbility(new BlocksSourceTriggeredAbility(new GetEnergyCountersControllerEffect(1), false));
|
||||
|
||||
// {T}, Pay {E}{E}{E}: Draw a card.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new TapSourceCost());
|
||||
|
|
|
@ -23,7 +23,7 @@ import mage.target.TargetPermanent;
|
|||
*/
|
||||
public final class SiegeModification extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterPermanent("creature or vehicle");
|
||||
private static final FilterPermanent filter = new FilterPermanent("creature or Vehicle");
|
||||
|
||||
static {
|
||||
filter.add(Predicates.or(CardType.CREATURE.getPredicate(),
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
|
||||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.RevoltCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
|
@ -16,6 +13,8 @@ import mage.constants.CardType;
|
|||
import mage.constants.SubType;
|
||||
import mage.watchers.common.RevoltWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author JRHerlehy
|
||||
*/
|
||||
|
@ -33,14 +32,11 @@ public final class SilkweaverElite extends CardImpl {
|
|||
this.addAbility(ReachAbility.getInstance());
|
||||
|
||||
// <i>Revolt</i> — When Silkweaver Elite enters the battlefield, if a permanent you controlled left the battlefield this turn, draw a card.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new DrawCardSourceControllerEffect(1), false), RevoltCondition.instance,
|
||||
"<i>Revolt</i> — When {this} enters the battlefield, if a permanent you controlled left"
|
||||
+ " the battlefield this turn, draw a card.");
|
||||
ability.setAbilityWord(AbilityWord.REVOLT);
|
||||
ability.addWatcher(new RevoltWatcher());
|
||||
this.addAbility(ability);
|
||||
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1), false),
|
||||
RevoltCondition.instance, "When {this} enters the battlefield, " +
|
||||
"if a permanent you controlled left the battlefield this turn, draw a card."
|
||||
).setAbilityWord(AbilityWord.REVOLT), new RevoltWatcher());
|
||||
}
|
||||
|
||||
private SilkweaverElite(final SilkweaverElite card) {
|
||||
|
|
|
@ -2,20 +2,18 @@ package mage.cards.t;
|
|||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.LoyaltyAbility;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||
import mage.abilities.dynamicvalue.common.ArtifactYouControlCount;
|
||||
import mage.abilities.effects.ContinuousEffect;
|
||||
import mage.abilities.effects.ContinuousEffectImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.LoseLifeTargetEffect;
|
||||
import mage.abilities.effects.common.RevealCardsFromLibraryUntilEffect;
|
||||
import mage.abilities.hint.ValueHint;
|
||||
import mage.abilities.hint.common.ArtifactYouControlHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterArtifactCard;
|
||||
import mage.filter.common.FilterControlledArtifactPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
|
@ -38,13 +36,12 @@ public final class TezzeretMasterOfMetal extends CardImpl {
|
|||
this.setStartingLoyalty(5);
|
||||
|
||||
// +1: Reveal cards from the top of your library until you reveal an artifact card. Put that card into your hand and the rest on the bottom of your library in a random order.
|
||||
this.addAbility(new LoyaltyAbility(new RevealCardsFromLibraryUntilEffect(new FilterArtifactCard(), Zone.HAND, Zone.LIBRARY), 1));
|
||||
this.addAbility(new LoyaltyAbility(new RevealCardsFromLibraryUntilEffect(StaticFilters.FILTER_CARD_ARTIFACT, Zone.HAND, Zone.LIBRARY), 1));
|
||||
|
||||
// -3: Target opponent loses life equal to the number of artifacts you control.
|
||||
DynamicValue xValue = new PermanentsOnBattlefieldCount(new FilterControlledArtifactPermanent());
|
||||
Ability ability = new LoyaltyAbility(new LoseLifeTargetEffect(xValue), -3);
|
||||
Ability ability = new LoyaltyAbility(new LoseLifeTargetEffect(ArtifactYouControlCount.instance).setText("target opponent loses life equal to the number of artifacts you control"), -3);
|
||||
ability.addTarget(new TargetOpponent());
|
||||
ability.addHint(new ValueHint("Artifacts you control", xValue));
|
||||
ability.addHint(ArtifactYouControlHint.instance);
|
||||
this.addAbility(ability);
|
||||
|
||||
// -8: Gain control of all artifacts and creatures target opponent controls.
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
|
||||
package mage.cards.t;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||
import mage.abilities.effects.common.search.SearchLibraryGraveyardPutInHandEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
@ -11,8 +10,9 @@ import mage.filter.FilterCard;
|
|||
import mage.filter.predicate.mageobject.NamePredicate;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class TezzeretsBetrayal extends CardImpl {
|
||||
|
@ -32,7 +32,7 @@ public final class TezzeretsBetrayal extends CardImpl {
|
|||
|
||||
// You may search your library and/or graveyard for a card named Tezzeret, Master of Metal, reveal it, and put it into your hand.
|
||||
// If you search your library this way, shuffle it.
|
||||
getSpellAbility().addEffect(new SearchLibraryGraveyardPutInHandEffect(filter));
|
||||
getSpellAbility().addEffect(new SearchLibraryGraveyardPutInHandEffect(filter, false, true));
|
||||
}
|
||||
|
||||
private TezzeretsBetrayal(final TezzeretsBetrayal card) {
|
||||
|
|
|
@ -1,21 +1,20 @@
|
|||
|
||||
package mage.cards.t;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.ComparisonType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.filter.predicate.mageobject.ManaValuePredicate;
|
||||
import mage.target.common.TargetCardInLibrary;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Styxo
|
||||
*/
|
||||
public final class TrophyMage extends CardImpl {
|
||||
|
@ -36,7 +35,9 @@ public final class TrophyMage extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// When Trophy Mage enters the battlefield, you may search your library for an artifact card with converted mana cost 3, reveal it, put it into your hand, then shuffle your library.
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, 1, filter), true, true), true));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInHandEffect(
|
||||
new TargetCardInLibrary(filter), true, true
|
||||
), true));
|
||||
}
|
||||
|
||||
private TrophyMage(final TrophyMage card) {
|
||||
|
|
|
@ -30,7 +30,7 @@ public final class UntetheredExpress extends CardImpl {
|
|||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
// Whenever Untethered Express attacks, put a +1/+1 counter on it.
|
||||
this.addAbility(new AttacksTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false));
|
||||
this.addAbility(new AttacksTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()).setText("put a +1/+1 counter on it"), false));
|
||||
|
||||
// Crew 1
|
||||
this.addAbility(new CrewAbility(1));
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.y;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.DiesCreatureTriggeredAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
|
@ -13,17 +11,16 @@ import mage.abilities.keyword.IndestructibleAbility;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterOpponentsCreaturePermanent;
|
||||
import mage.target.common.TargetControlledPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class YahenniUndyingPartisan extends CardImpl {
|
||||
|
@ -41,14 +38,16 @@ public final class YahenniUndyingPartisan extends CardImpl {
|
|||
this.addAbility(HasteAbility.getInstance());
|
||||
|
||||
// Whenever a creature an opponent controls dies, put a +1/+1 counter on Yahenni, Undying Partisan.
|
||||
this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false, new FilterOpponentsCreaturePermanent()));
|
||||
this.addAbility(new DiesCreatureTriggeredAbility(
|
||||
new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
|
||||
false, StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE
|
||||
));
|
||||
|
||||
// Sacrifice another creature: Yahenni gains indestructible until end of turn.
|
||||
this.addAbility(new SimpleActivatedAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn),
|
||||
new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)))
|
||||
);
|
||||
new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))
|
||||
));
|
||||
}
|
||||
|
||||
private YahenniUndyingPartisan(final YahenniUndyingPartisan card) {
|
||||
|
|
|
@ -62,7 +62,7 @@ public class VerifyCardDataTest {
|
|||
|
||||
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
|
||||
|
||||
private static final String FULL_ABILITIES_CHECK_SET_CODE = "SLD"; // check all abilities and output cards with wrong abilities texts;
|
||||
private static final String FULL_ABILITIES_CHECK_SET_CODE = "AER"; // check all abilities and output cards with wrong abilities texts;
|
||||
private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run
|
||||
private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages
|
||||
|
||||
|
|
|
@ -138,7 +138,7 @@ public class DiesAttachedTriggeredAbility extends TriggeredAbilityImpl {
|
|||
if (diesRuleText) {
|
||||
sb.append(" dies, ");
|
||||
} else {
|
||||
sb.append(" is put into graveyard, ");
|
||||
sb.append(" is put into a graveyard, ");
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@ public class PayEnergyCost extends CostImpl {
|
|||
}
|
||||
|
||||
private void setText() {
|
||||
StringBuilder sb = new StringBuilder("Pay ");
|
||||
StringBuilder sb = new StringBuilder("pay ");
|
||||
for (int i = 0; i < amount; i++) {
|
||||
sb.append("{E}");
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
|
||||
package mage.abilities.effects.common;
|
||||
|
||||
import mage.MageObject;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.Mode;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.Cards;
|
||||
|
@ -13,18 +13,18 @@ import mage.filter.FilterCard;
|
|||
import mage.game.Game;
|
||||
import mage.players.Library;
|
||||
import mage.players.Player;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Styxo
|
||||
*/
|
||||
public class RevealCardsFromLibraryUntilEffect extends OneShotEffect {
|
||||
|
||||
private FilterCard filter;
|
||||
private Zone zoneToPutRest;
|
||||
private Zone zoneToPutCard;
|
||||
private boolean shuffleRestInto;
|
||||
private boolean anyOrder;
|
||||
private final FilterCard filter;
|
||||
private final Zone zoneToPutRest;
|
||||
private final Zone zoneToPutCard;
|
||||
private final boolean shuffleRestInto;
|
||||
private final boolean anyOrder;
|
||||
|
||||
public RevealCardsFromLibraryUntilEffect(FilterCard filter, Zone zoneToPutCard, Zone zoneToPutRest) {
|
||||
this(filter, zoneToPutCard, zoneToPutRest, false, false);
|
||||
|
@ -41,17 +41,15 @@ public class RevealCardsFromLibraryUntilEffect extends OneShotEffect {
|
|||
this.zoneToPutRest = zoneToPutRest;
|
||||
this.shuffleRestInto = shuffleRestInto;
|
||||
this.anyOrder = anyOrder;
|
||||
setText();
|
||||
}
|
||||
|
||||
public RevealCardsFromLibraryUntilEffect(final RevealCardsFromLibraryUntilEffect effect) {
|
||||
private RevealCardsFromLibraryUntilEffect(final RevealCardsFromLibraryUntilEffect effect) {
|
||||
super(effect);
|
||||
this.filter = effect.filter;
|
||||
this.zoneToPutCard = effect.zoneToPutCard;
|
||||
this.zoneToPutRest = effect.zoneToPutRest;
|
||||
this.shuffleRestInto = effect.shuffleRestInto;
|
||||
this.anyOrder = effect.anyOrder;
|
||||
setText();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -63,50 +61,54 @@ public class RevealCardsFromLibraryUntilEffect extends OneShotEffect {
|
|||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
MageObject sourceObject = game.getObject(source.getSourceId());
|
||||
if (controller != null && controller.getLibrary().hasCards()) {
|
||||
Cards cards = new CardsImpl();
|
||||
Library library = controller.getLibrary();
|
||||
Card card = null;
|
||||
do {
|
||||
card = library.removeFromTop(game);
|
||||
if (card != null) {
|
||||
cards.add(card);
|
||||
}
|
||||
} while (library.hasCards() && !filter.match(card, game));
|
||||
// reveal cards
|
||||
if (!cards.isEmpty()) {
|
||||
controller.revealCards(sourceObject.getIdName(), cards, game);
|
||||
if (filter.match(card, game)) {
|
||||
// put card in correct zone
|
||||
controller.moveCards(card, zoneToPutCard, source, game);
|
||||
// remove it from revealed card list
|
||||
cards.remove(card);
|
||||
}
|
||||
// Put the rest in correct zone
|
||||
switch (zoneToPutRest) {
|
||||
case LIBRARY: {
|
||||
if (!cards.isEmpty()) {
|
||||
if (shuffleRestInto) {
|
||||
library.addAll(cards.getCards(game), game);
|
||||
} else {
|
||||
controller.putCardsOnBottomOfLibrary(cards, game, source, anyOrder);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
if (!cards.isEmpty()) {
|
||||
controller.moveCards(cards, zoneToPutRest, source, game);
|
||||
}
|
||||
}
|
||||
if (controller == null || !controller.getLibrary().hasCards()) {
|
||||
return false;
|
||||
}
|
||||
Cards cards = new CardsImpl();
|
||||
Library library = controller.getLibrary();
|
||||
Card card = null;
|
||||
do {
|
||||
card = library.removeFromTop(game);
|
||||
if (card != null) {
|
||||
cards.add(card);
|
||||
}
|
||||
} while (library.hasCards() && !filter.match(card, game));
|
||||
// reveal cards
|
||||
if (cards.isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
controller.revealCards(sourceObject.getIdName(), cards, game);
|
||||
if (filter.match(card, game)) {
|
||||
// put card in correct zone
|
||||
controller.moveCards(card, zoneToPutCard, source, game);
|
||||
// remove it from revealed card list
|
||||
cards.remove(card);
|
||||
}
|
||||
// Put the rest in correct zone
|
||||
if (zoneToPutRest == Zone.LIBRARY) {
|
||||
if (!cards.isEmpty()) {
|
||||
if (shuffleRestInto) {
|
||||
library.addAll(cards.getCards(game), game);
|
||||
} else {
|
||||
controller.putCardsOnBottomOfLibrary(cards, game, source, anyOrder);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!cards.isEmpty()) {
|
||||
controller.moveCards(cards, zoneToPutRest, source, game);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void setText() {
|
||||
StringBuilder sb = new StringBuilder("reveal cards from the top of your library until you reveal a " + filter.getMessage() + ". Put that card ");
|
||||
@Override
|
||||
public String getText(Mode mode) {
|
||||
if (staticText != null && !staticText.isEmpty()) {
|
||||
return staticText;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder("reveal cards from the top of your library until you reveal ");
|
||||
sb.append(CardUtil.addArticle(filter.getMessage()));
|
||||
sb.append(". Put that card ");
|
||||
|
||||
switch (zoneToPutCard) {
|
||||
case HAND: {
|
||||
|
@ -144,6 +146,6 @@ public class RevealCardsFromLibraryUntilEffect extends OneShotEffect {
|
|||
break;
|
||||
}
|
||||
}
|
||||
staticText = sb.toString();
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ import mage.constants.Zone;
|
|||
public final class EtheriumCellToken extends TokenImpl {
|
||||
|
||||
public EtheriumCellToken() {
|
||||
super("Etherium Cell", "colorless artifact token named Etherium Cell which has \"{T}, Sacrifice this artifact: Add one mana of any color.\"");
|
||||
super("Etherium Cell", "colorless artifact token named Etherium Cell with \"{T}, Sacrifice this artifact: Add one mana of any color.\"");
|
||||
this.setOriginalExpansionSetCode("AER");
|
||||
cardType.add(CardType.ARTIFACT);
|
||||
|
||||
|
|
Loading…
Reference in a new issue