cleanup EntersBattlefieldAllTriggeredAbility and subclasses (#11372)

* comment out rule override to use generated text instead

* new ETB Opponent trigger class

* text improvements

* update ETB cast trigger

* remove controlledtext parameter

* more text improvements

* more fixes

* lots of other fixes

* most of the remaining fixes

* fix halana text

* fix smoke shroud text

* improve text gen

* remove rule param from constructors

* minor adjustments

* whenever a player puts

* final fixes

* standardize when/whenever phrase generation
This commit is contained in:
xenohedron 2023-10-31 21:00:45 -04:00 committed by GitHub
parent c53db0810d
commit ebf71941a9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
161 changed files with 504 additions and 839 deletions

View file

@ -25,7 +25,7 @@ public final class AetherFlash extends CardImpl {
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new DamageTargetEffect(2).setText("{this} deals 2 damage to it"), new DamageTargetEffect(2).setText("{this} deals 2 damage to it"),
StaticFilters.FILTER_PERMANENT_A_CREATURE, StaticFilters.FILTER_PERMANENT_A_CREATURE,
false, SetTargetPointer.PERMANENT, null)); false, SetTargetPointer.PERMANENT));
} }
private AetherFlash(final AetherFlash card) { private AetherFlash(final AetherFlash card) {

View file

@ -34,7 +34,7 @@ public final class AjanisChosen extends CardImpl {
// Whenever an enchantment enters the battlefield under your control, create a 2/2 white Cat creature token. If that enchantment is an Aura, you may attach it to the token. // Whenever an enchantment enters the battlefield under your control, create a 2/2 white Cat creature token. If that enchantment is an Aura, you may attach it to the token.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new AjanisChosenEffect(), filter, Zone.BATTLEFIELD, new AjanisChosenEffect(), filter,
false, SetTargetPointer.PERMANENT, null)); false, SetTargetPointer.PERMANENT));
} }
private AjanisChosen(final AjanisChosen card) { private AjanisChosen(final AjanisChosen card) {

View file

@ -1,7 +1,7 @@
package mage.cards.a; package mage.cards.a;
import java.util.UUID; import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.MillCardsEachPlayerEffect; import mage.abilities.effects.common.MillCardsEachPlayerEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -27,8 +27,8 @@ public final class AltarOfTheBrood extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}");
// Whenever another permanent enters the battlefield under your control, each opponent mills a card. // Whenever another permanent enters the battlefield under your control, each opponent mills a card.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
new MillCardsEachPlayerEffect(1, TargetController.OPPONENT), filter, false, null, true)); new MillCardsEachPlayerEffect(1, TargetController.OPPONENT), filter, false));
} }
private AltarOfTheBrood(final AltarOfTheBrood card) { private AltarOfTheBrood(final AltarOfTheBrood card) {

View file

@ -24,9 +24,8 @@ public final class AuraShards extends CardImpl {
// Whenever a creature enters the battlefield under your control, // Whenever a creature enters the battlefield under your control,
// you may destroy target artifact or enchantment. // you may destroy target artifact or enchantment.
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
new DestroyTargetEffect(), StaticFilters.FILTER_PERMANENT_CREATURE, true, new DestroyTargetEffect(), StaticFilters.FILTER_PERMANENT_CREATURE, true
"Whenever a creature enters the battlefield under your control, " );
+ "you may destroy target artifact or enchantment");
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT)); ability.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,6 +1,6 @@
package mage.cards.a; package mage.cards.a;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldOpponentTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.PermanentsEnterBattlefieldTappedEffect; import mage.abilities.effects.common.PermanentsEnterBattlefieldTappedEffect;
@ -23,9 +23,8 @@ public final class AuthorityOfTheConsuls extends CardImpl {
this.addAbility(new SimpleStaticAbility(new PermanentsEnterBattlefieldTappedEffect(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES))); this.addAbility(new SimpleStaticAbility(new PermanentsEnterBattlefieldTappedEffect(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES)));
// Whenever a creature enters the battlefield under an opponent's control, you gain 1 life. // Whenever a creature enters the battlefield under an opponent's control, you gain 1 life.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldOpponentTriggeredAbility(
new GainLifeEffect(1), StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, new GainLifeEffect(1), StaticFilters.FILTER_PERMANENT_A_CREATURE, false
"Whenever a creature enters the battlefield under an opponent's control, you gain 1 life."
)); ));
} }

View file

@ -1,4 +1,3 @@
package mage.cards.b; package mage.cards.b;
import java.util.UUID; import java.util.UUID;
@ -29,12 +28,10 @@ import mage.game.permanent.token.Token;
*/ */
public final class BaruFistOfKrosa extends CardImpl { public final class BaruFistOfKrosa extends CardImpl {
private static final FilterLandPermanent forestFilter = new FilterLandPermanent("Forest"); private static final FilterLandPermanent forestFilter = new FilterLandPermanent(SubType.FOREST, "a Forest");
private static final FilterCreaturePermanent greenCreatureFilter = new FilterCreaturePermanent("green creatures you control"); private static final FilterCreaturePermanent greenCreatureFilter = new FilterCreaturePermanent("green creatures");
static { static {
forestFilter.add(SubType.FOREST.getPredicate());
greenCreatureFilter.add(TargetController.YOU.getControllerPredicate());
greenCreatureFilter.add(new ColorPredicate(ObjectColor.GREEN)); greenCreatureFilter.add(new ColorPredicate(ObjectColor.GREEN));
} }
@ -47,8 +44,10 @@ public final class BaruFistOfKrosa extends CardImpl {
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// Whenever a Forest enters the battlefield, green creatures you control get +1/+1 and gain trample until end of turn. // Whenever a Forest enters the battlefield, green creatures you control get +1/+1 and gain trample until end of turn.
Ability ability = new EntersBattlefieldAllTriggeredAbility(new BoostControlledEffect(1, 1, Duration.EndOfTurn, greenCreatureFilter), forestFilter, "Whenever a Forest enters the battlefield, green creatures you control get +1/+1 and gain trample until end of turn."); Ability ability = new EntersBattlefieldAllTriggeredAbility(new BoostControlledEffect(1, 1, Duration.EndOfTurn, greenCreatureFilter)
ability.addEffect(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, greenCreatureFilter)); .setText("green creatures you control get +1/+1"), forestFilter);
ability.addEffect(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, greenCreatureFilter)
.setText("and gain trample until end of turn"));
this.addAbility(ability); this.addAbility(ability);
// Grandeur - Discard another card named Baru, Fist of Krosa: Create an X/X green Wurm creature token, where X is the number of lands you control. // Grandeur - Discard another card named Baru, Fist of Krosa: Create an X/X green Wurm creature token, where X is the number of lands you control.

View file

@ -1,10 +1,9 @@
package mage.cards.b; package mage.cards.b;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.TapTargetEffect; import mage.abilities.effects.common.TapTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -37,7 +36,7 @@ public final class BindingMummy extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever another Zombie enters the battlefield under your control, you may tap target artifact or creature. // Whenever another Zombie enters the battlefield under your control, you may tap target artifact or creature.
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new TapTargetEffect(), filter, true, null, true); Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new TapTargetEffect(), filter, true);
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_CREATURE)); ability.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -49,7 +49,7 @@ public final class BrainstealerDragon extends CardImpl {
// Whenever a nonland permanent an opponent owns enters the battlefield under your control, they lose life equal to its mana value. // Whenever a nonland permanent an opponent owns enters the battlefield under your control, they lose life equal to its mana value.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new BrainstealerDragonLifeEffect(), filter, Zone.BATTLEFIELD, new BrainstealerDragonLifeEffect(), filter,
false, SetTargetPointer.PERMANENT, null false, SetTargetPointer.PERMANENT
)); ));
} }

View file

@ -27,7 +27,7 @@ import mage.game.permanent.Permanent;
*/ */
public final class BrambleSovereign extends CardImpl { public final class BrambleSovereign extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("nontoken creature"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another nontoken creature");
static { static {
filter.add(TokenPredicate.FALSE); filter.add(TokenPredicate.FALSE);
@ -45,9 +45,7 @@ public final class BrambleSovereign extends CardImpl {
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new DoIfCostPaid(new BrambleSovereignEffect(), new ManaCostsImpl<>("{1}{G}")), new DoIfCostPaid(new BrambleSovereignEffect(), new ManaCostsImpl<>("{1}{G}")),
filter, false, SetTargetPointer.PERMANENT, filter, false, SetTargetPointer.PERMANENT
"Whenever another nontoken creature enters the battlefield, you may pay {1}{G}. "
+ "If you do, that creature's controller creates a token that's a copy of that creature."
)); ));
} }
@ -65,7 +63,7 @@ class BrambleSovereignEffect extends OneShotEffect {
BrambleSovereignEffect() { BrambleSovereignEffect() {
super(Outcome.PutCardInPlay); super(Outcome.PutCardInPlay);
this.staticText = "its controller creates a token that's a copy of that creature"; this.staticText = "that creature's controller creates a token that's a copy of that creature";
} }
private BrambleSovereignEffect(final BrambleSovereignEffect effect) { private BrambleSovereignEffect(final BrambleSovereignEffect effect) {

View file

@ -26,7 +26,7 @@ public final class CarnivalOfSouls extends CardImpl {
// Whenever a creature enters the battlefield, you lose 1 life and add {B}. // Whenever a creature enters the battlefield, you lose 1 life and add {B}.
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new LoseLifeSourceControllerEffect(1), Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new LoseLifeSourceControllerEffect(1),
StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT, null, false); StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT);
Effect effect = new AddManaToManaPoolSourceControllerEffect(Mana.BlackMana(1)); Effect effect = new AddManaToManaPoolSourceControllerEffect(Mana.BlackMana(1));
effect.setText("and add {B}."); effect.setText("and add {B}.");
ability.addEffect(effect); ability.addEffect(effect);

View file

@ -4,7 +4,7 @@ import mage.MageInt;
import mage.MageObjectReference; import mage.MageObjectReference;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.SpellAbility; import mage.abilities.SpellAbility;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.LimitedTimesPerTurnActivatedAbility; import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
import mage.abilities.costs.common.DiscardCardCost; import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.effects.AsThoughEffectImpl; import mage.abilities.effects.AsThoughEffectImpl;
@ -15,8 +15,7 @@ import mage.cards.Card;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.util.CardUtil; import mage.util.CardUtil;
@ -127,7 +126,6 @@ class ChainerNightmareAdeptWatcher extends Watcher {
} }
morMap.computeIfAbsent(event.getAdditionalReference().getApprovingMageObjectReference(), m -> new HashMap<>()) morMap.computeIfAbsent(event.getAdditionalReference().getApprovingMageObjectReference(), m -> new HashMap<>())
.compute(event.getPlayerId(), (u, i) -> i == null ? 0 : Integer.sum(i, -1)); .compute(event.getPlayerId(), (u, i) -> i == null ? 0 : Integer.sum(i, -1));
return;
} }
} }
@ -156,25 +154,17 @@ class ChainerNightmareAdeptWatcher extends Watcher {
} }
} }
class ChainerNightmareAdeptTriggeredAbility extends EntersBattlefieldAllTriggeredAbility { class ChainerNightmareAdeptTriggeredAbility extends EntersBattlefieldControlledTriggeredAbility {
private static final String abilityText = "Whenever a nontoken creature "
+ "enters the battlefield under your control, "
+ "if you didn't cast it from your hand, it gains haste until your next turn.";
private static final ContinuousEffect gainHasteUntilNextTurnEffect private static final ContinuousEffect gainHasteUntilNextTurnEffect
= new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.UntilYourNextTurn); = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.UntilYourNextTurn);
private static final FilterControlledCreaturePermanent filter
= new FilterControlledCreaturePermanent("nontoken creature");
static {
filter.add(TokenPredicate.FALSE);
filter.add(TargetController.YOU.getControllerPredicate());
}
ChainerNightmareAdeptTriggeredAbility() { ChainerNightmareAdeptTriggeredAbility() {
super(Zone.BATTLEFIELD, gainHasteUntilNextTurnEffect, filter, false, super(Zone.BATTLEFIELD, gainHasteUntilNextTurnEffect, StaticFilters.FILTER_CREATURE_NON_TOKEN, false,
SetTargetPointer.PERMANENT, abilityText); SetTargetPointer.PERMANENT);
this.addWatcher(new CastFromHandWatcher()); this.addWatcher(new CastFromHandWatcher());
setTriggerPhrase("Whenever a nontoken creature enters the battlefield under your control, "
+ "if you didn't cast it from your hand, ");
} }
private ChainerNightmareAdeptTriggeredAbility(final ChainerNightmareAdeptTriggeredAbility effect) { private ChainerNightmareAdeptTriggeredAbility(final ChainerNightmareAdeptTriggeredAbility effect) {
@ -188,11 +178,9 @@ class ChainerNightmareAdeptTriggeredAbility extends EntersBattlefieldAllTriggere
@Override @Override
public boolean checkTrigger(GameEvent event, Game game) { public boolean checkTrigger(GameEvent event, Game game) {
if (!super.checkTrigger(event, game)) {
return false;
}
CastFromHandWatcher watcher = game.getState().getWatcher(CastFromHandWatcher.class); CastFromHandWatcher watcher = game.getState().getWatcher(CastFromHandWatcher.class);
return watcher != null && !watcher.spellWasCastFromHand(event.getTargetId()); return watcher != null && !watcher.spellWasCastFromHand(event.getTargetId())
&& super.checkTrigger(event, game);
} }
} }

View file

@ -2,7 +2,7 @@ package mage.cards.c;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.RestrictionEffect; import mage.abilities.effects.RestrictionEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
@ -10,8 +10,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
@ -22,13 +21,6 @@ import java.util.UUID;
*/ */
public final class ChampionOfLambholt extends CardImpl { public final class ChampionOfLambholt extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another creature");
static {
filter.add(AnotherPredicate.instance);
filter.add(TargetController.YOU.getControllerPredicate());
}
public ChampionOfLambholt(UUID ownerId, CardSetInfo setInfo) { public ChampionOfLambholt(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{G}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
@ -41,8 +33,9 @@ public final class ChampionOfLambholt extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ChampionOfLambholtEffect())); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ChampionOfLambholtEffect()));
// Whenever another creature enters the battlefield under your control, put a +1/+1 counter on Champion of Lambholt. // Whenever another creature enters the battlefield under your control, put a +1/+1 counter on Champion of Lambholt.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter, false, null, true)); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
StaticFilters.FILTER_ANOTHER_CREATURE, false));
} }
private ChampionOfLambholt(final ChampionOfLambholt card) { private ChampionOfLambholt(final ChampionOfLambholt card) {

View file

@ -37,7 +37,7 @@ public final class CloakAndDagger extends CardImpl {
// Whenever a Rogue creature enters the battlefield, you may attach Cloak and Dagger to it. // Whenever a Rogue creature enters the battlefield, you may attach Cloak and Dagger to it.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new AttachEffect(Outcome.Detriment, "attach {this} to it"), Zone.BATTLEFIELD, new AttachEffect(Outcome.Detriment, "attach {this} to it"),
filter, true, SetTargetPointer.PERMANENT, null)); filter, true, SetTargetPointer.PERMANENT));
// Equip {3} // Equip {3}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(3), new TargetControlledCreaturePermanent(), false)); this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(3), new TargetControlledCreaturePermanent(), false));
} }

View file

@ -1,7 +1,7 @@
package mage.cards.c; package mage.cards.c;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -26,14 +26,13 @@ public final class CloudstoneCurio extends CardImpl {
static { static {
filter.add(Predicates.not(CardType.ARTIFACT.getPredicate())); filter.add(Predicates.not(CardType.ARTIFACT.getPredicate()));
filter.add(TargetController.YOU.getControllerPredicate());
} }
public CloudstoneCurio(UUID ownerId, CardSetInfo setInfo) { public CloudstoneCurio(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
// Whenever a nonartifact permanent enters the battlefield under your control, you may return another permanent you control that shares a card type with it to its owner's hand. // Whenever a nonartifact permanent enters the battlefield under your control, you may return another permanent you control that shares a card type with it to its owner's hand.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new CloudstoneCurioEffect(), filter, true, SetTargetPointer.PERMANENT, "", true)); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new CloudstoneCurioEffect(), filter, true, SetTargetPointer.PERMANENT));
} }

View file

@ -46,7 +46,7 @@ public final class ConfoundingConundrum extends CardImpl {
// Whenever a land enters the battlefield under an opponent's control, if that player had another land enter the battlefield under their control this turn, they return a land they control to its owner's hand. // Whenever a land enters the battlefield under an opponent's control, if that player had another land enter the battlefield under their control this turn, they return a land they control to its owner's hand.
this.addAbility(new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new ConfoundingConundrumEffect(), filter, Zone.BATTLEFIELD, new ConfoundingConundrumEffect(), filter,
false, SetTargetPointer.PLAYER, "" false, SetTargetPointer.PLAYER
), ConfoundingConundrumCondition.instance, "Whenever a land enters the battlefield under " + ), ConfoundingConundrumCondition.instance, "Whenever a land enters the battlefield under " +
"an opponent's control, if that player had another land enter the battlefield " + "an opponent's control, if that player had another land enter the battlefield " +
"under their control this turn, they return a land they control to its owner's hand." "under their control this turn, they return a land they control to its owner's hand."

View file

@ -49,7 +49,7 @@ public final class ConfusionInTheRanks extends CardImpl {
+ "another player controls that shares a card type with it. " + "another player controls that shares a card type with it. "
+ "Exchange control of those permanents" + "Exchange control of those permanents"
), ),
filter, false, SetTargetPointer.PERMANENT, null filter, false, SetTargetPointer.PERMANENT
); );
ability.addTarget(new TargetPermanent()); ability.addTarget(new TargetPermanent());
ability.setTargetAdjuster(ConfusionInTheRanksAdjuster.instance); ability.setTargetAdjuster(ConfusionInTheRanksAdjuster.instance);

View file

@ -4,7 +4,7 @@ import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.ObjectColor; import mage.ObjectColor;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.TapTargetEffect; import mage.abilities.effects.common.TapTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -37,7 +37,7 @@ public final class CourtStreetDenizen extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever another white creature enters the battlefield under your control, tap target creature an opponent controls. // Whenever another white creature enters the battlefield under your control, tap target creature an opponent controls.
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new TapTargetEffect(), filter, false, null, true); Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new TapTargetEffect(), filter, false);
ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -31,12 +31,8 @@ public final class CreamOfTheCrop extends CardImpl {
// library and the rest on the bottom of your library in any order. // library and the rest on the bottom of your library in any order.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new CreamOfTheCropEffect(), Zone.BATTLEFIELD, new CreamOfTheCropEffect(),
StaticFilters.FILTER_PERMANENT_CREATURE, true, SetTargetPointer.PERMANENT, StaticFilters.FILTER_PERMANENT_CREATURE, true, SetTargetPointer.PERMANENT
"Whenever a creature enters the battlefield under your control, " ));
+ "you may look at the top X cards of your library, where X "
+ "is that creature's power. If you do, put one of those cards "
+ "on top of your library and the rest on the bottom of "
+ "your library in any order."));
} }
private CreamOfTheCrop(final CreamOfTheCrop card) { private CreamOfTheCrop(final CreamOfTheCrop card) {

View file

@ -44,10 +44,9 @@ public final class CurseOfTheRestlessDead extends CardImpl {
// Whenever a land enters the battlefield under enchanted player's control, you create a 2/2 black Zombie creature token with decayed. // Whenever a land enters the battlefield under enchanted player's control, you create a 2/2 black Zombie creature token with decayed.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldAllTriggeredAbility(
new CreateTokenEffect(new ZombieDecayedToken()), new CreateTokenEffect(new ZombieDecayedToken()).setText("you create a 2/2 black Zombie creature token with decayed."),
filter, "Whenever a land enters the battlefield under enchanted player's control, " + filter
"you create a 2/2 black Zombie creature token with decayed." ).setTriggerPhrase("Whenever a land enters the battlefield under enchanted player's control, "));
));
} }
private CurseOfTheRestlessDead(final CurseOfTheRestlessDead card) { private CurseOfTheRestlessDead(final CurseOfTheRestlessDead card) {

View file

@ -27,7 +27,7 @@ public final class DeathMatch extends CardImpl {
// Whenever a creature enters the battlefield, that creature's controller may have target creature of their choice get -3/-3 until end of turn. // Whenever a creature enters the battlefield, that creature's controller may have target creature of their choice get -3/-3 until end of turn.
// NOTE: The ability being optional is implemented in the subclass to give the choice to correct player. // NOTE: The ability being optional is implemented in the subclass to give the choice to correct player.
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new DeathMatchEffect(), Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new DeathMatchEffect(),
StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PLAYER, ""); StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PLAYER);
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
ability.setTargetAdjuster(DeathMatchAdjuster.instance); ability.setTargetAdjuster(DeathMatchAdjuster.instance);
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,4 +1,3 @@
package mage.cards.d; package mage.cards.d;
import java.util.UUID; import java.util.UUID;
@ -35,10 +34,8 @@ public final class DecoratedChampion extends CardImpl {
// Whenever another Warrior enters the battlefield under your team's control, put a +1/+1 counter on Decorated Champion. // Whenever another Warrior enters the battlefield under your team's control, put a +1/+1 counter on Decorated Champion.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldAllTriggeredAbility(
new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter, new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter
"Whenever another Warrior enters the battlefield under your team's control," ).setTriggerPhrase("Whenever another Warrior enters the battlefield under your team's control, "));
+ " put a +1/+1 counter on {this}"
));
} }
private DecoratedChampion(final DecoratedChampion card) { private DecoratedChampion(final DecoratedChampion card) {

View file

@ -1,32 +1,28 @@
package mage.cards.d; package mage.cards.d;
import java.util.UUID;
import mage.ObjectColor; import mage.ObjectColor;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.DrawCardTargetEffect; import mage.abilities.effects.common.DrawCardTargetEffect;
import mage.abilities.effects.common.discard.DiscardTargetEffect; import mage.abilities.effects.common.discard.DiscardTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.mageobject.ColorPredicate;
import mage.target.TargetPlayer; import mage.target.TargetPlayer;
import java.util.UUID;
/** /**
* *
* @author jeffwadsworth * @author jeffwadsworth
*/ */
public final class DireUndercurrents extends CardImpl { public final class DireUndercurrents extends CardImpl {
private static final String rule1 = "Whenever a blue creature enters the battlefield under your control, you may have target player draw a card."; private static final FilterCreaturePermanent filterBlue = new FilterCreaturePermanent("a blue creature");
private static final String rule2 = "Whenever a black creature enters the battlefield under your control, you may have target player discard a card."; private static final FilterCreaturePermanent filterBlack = new FilterCreaturePermanent("a black creature");
private static final FilterControlledPermanent filterBlue = new FilterControlledCreaturePermanent();
private static final FilterControlledPermanent filterBlack = new FilterControlledCreaturePermanent();
static { static {
filterBlue.add(new ColorPredicate(ObjectColor.BLUE)); filterBlue.add(new ColorPredicate(ObjectColor.BLUE));
@ -36,14 +32,14 @@ public final class DireUndercurrents extends CardImpl {
public DireUndercurrents(UUID ownerId, CardSetInfo setInfo) { public DireUndercurrents(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{U/B}{U/B}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{U/B}{U/B}");
// Whenever a blue creature enters the battlefield under your control, you may have target player draw a card. // Whenever a blue creature enters the battlefield under your control, you may have target player draw a card.
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new DrawCardTargetEffect(1), filterBlue, true, rule1); Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new DrawCardTargetEffect(1)
.setText("you may have target player draw a card"), filterBlue, true);
ability.addTarget(new TargetPlayer()); ability.addTarget(new TargetPlayer());
this.addAbility(ability); this.addAbility(ability);
// Whenever a black creature enters the battlefield under your control, you may have target player discard a card. // Whenever a black creature enters the battlefield under your control, you may have target player discard a card.
Ability ability2 = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new DiscardTargetEffect(1), filterBlack, true, rule2); Ability ability2 = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new DiscardTargetEffect(1), filterBlack, true);
ability2.addTarget(new TargetPlayer()); ability2.addTarget(new TargetPlayer());
this.addAbility(ability2); this.addAbility(ability2);

View file

@ -52,7 +52,7 @@ public final class DivinersWand extends CardImpl {
// Whenever a Wizard creature enters the battlefield, you may attach Diviner's Wand to it. // Whenever a Wizard creature enters the battlefield, you may attach Diviner's Wand to it.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new AttachEffect(Outcome.Detriment, "attach {this} to it"), Zone.BATTLEFIELD, new AttachEffect(Outcome.Detriment, "attach {this} to it"),
filter, true, SetTargetPointer.PERMANENT, null)); filter, true, SetTargetPointer.PERMANENT));
// Equip {3} // Equip {3}
this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(3), false)); this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(3), false));

View file

@ -54,7 +54,7 @@ public final class DragonBreath extends CardImpl {
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 0, Duration.EndOfTurn), new ColoredManaCost(ColoredManaSymbol.R))); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 0, Duration.EndOfTurn), new ColoredManaCost(ColoredManaSymbol.R)));
// When a creature with converted mana cost 6 or greater enters the battlefield, you may return Dragon Breath from your graveyard to the battlefield attached to that creature. // When a creature with converted mana cost 6 or greater enters the battlefield, you may return Dragon Breath from your graveyard to the battlefield attached to that creature.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.GRAVEYARD, new DragonBreathEffect(), filter, true, SetTargetPointer.PERMANENT, null)); this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.GRAVEYARD, new DragonBreathEffect(), filter, true, SetTargetPointer.PERMANENT));
} }
private DragonBreath(final DragonBreath card) { private DragonBreath(final DragonBreath card) {

View file

@ -50,7 +50,7 @@ public final class DragonFangs extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(TrampleAbility.getInstance(), AttachmentType.AURA))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(TrampleAbility.getInstance(), AttachmentType.AURA)));
// When a creature with converted mana cost 6 or greater enters the battlefield, you may return Dragon Fangs from your graveyard to the battlefield attached to that creature. // When a creature with converted mana cost 6 or greater enters the battlefield, you may return Dragon Fangs from your graveyard to the battlefield attached to that creature.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.GRAVEYARD, new DragonFangsEffect(), filter, true, SetTargetPointer.PERMANENT, null)); this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.GRAVEYARD, new DragonFangsEffect(), filter, true, SetTargetPointer.PERMANENT));
} }
private DragonFangs(final DragonFangs card) { private DragonFangs(final DragonFangs card) {
@ -94,4 +94,3 @@ class DragonFangsEffect extends OneShotEffect {
return false; return false;
} }
} }

View file

@ -50,7 +50,7 @@ public final class DragonScales extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.AURA))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.AURA)));
// When a creature with converted mana cost 6 or greater enters the battlefield, you may return Dragon Scales from your graveyard to the battlefield attached to that creature. // When a creature with converted mana cost 6 or greater enters the battlefield, you may return Dragon Scales from your graveyard to the battlefield attached to that creature.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.GRAVEYARD, new DragonScalesEffect(), filter, true, SetTargetPointer.PERMANENT, null)); this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.GRAVEYARD, new DragonScalesEffect(), filter, true, SetTargetPointer.PERMANENT));
} }
private DragonScales(final DragonScales card) { private DragonScales(final DragonScales card) {

View file

@ -50,7 +50,7 @@ public final class DragonShadow extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FearAbility.getInstance(), AttachmentType.AURA))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FearAbility.getInstance(), AttachmentType.AURA)));
// When a creature with converted mana cost 6 or greater enters the battlefield, you may return Dragon Breath from your graveyard to the battlefield attached to that creature. // When a creature with converted mana cost 6 or greater enters the battlefield, you may return Dragon Breath from your graveyard to the battlefield attached to that creature.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.GRAVEYARD, new DragonShadowEffect(), filter, true, SetTargetPointer.PERMANENT, null)); this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.GRAVEYARD, new DragonShadowEffect(), filter, true, SetTargetPointer.PERMANENT));
} }
private DragonShadow(final DragonShadow card) { private DragonShadow(final DragonShadow card) {

View file

@ -37,7 +37,7 @@ public final class DragonTempest extends CardImpl {
// Whenever a creature with flying enters the battlefield under your control, it gains haste until the end of turn. // Whenever a creature with flying enters the battlefield under your control, it gains haste until the end of turn.
Effect effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); Effect effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn);
effect.setText("it gains haste until end of turn"); effect.setText("it gains haste until end of turn");
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, effect, filterFlying, false, SetTargetPointer.PERMANENT, "")); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, effect, filterFlying, false, SetTargetPointer.PERMANENT));
// Whenever a Dragon enters the battlefield under your control, it deals X damage to any target, where X is the number of Dragons you control. // Whenever a Dragon enters the battlefield under your control, it deals X damage to any target, where X is the number of Dragons you control.
Ability ability = new EntersBattlefieldControlledTriggeredAbility( Ability ability = new EntersBattlefieldControlledTriggeredAbility(
@ -45,8 +45,7 @@ public final class DragonTempest extends CardImpl {
new DragonTempestDamageEffect(), new DragonTempestDamageEffect(),
new FilterCreaturePermanent(SubType.DRAGON, "a Dragon"), new FilterCreaturePermanent(SubType.DRAGON, "a Dragon"),
false, false,
SetTargetPointer.NONE, SetTargetPointer.NONE
""
); );
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);

View file

@ -52,7 +52,7 @@ public final class DragonWings extends CardImpl {
this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{1}{U}"))); this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{1}{U}")));
// When a creature with converted mana cost 6 or greater enters the battlefield, you may return Dragon Breath from your graveyard to the battlefield attached to that creature. // When a creature with converted mana cost 6 or greater enters the battlefield, you may return Dragon Breath from your graveyard to the battlefield attached to that creature.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.GRAVEYARD, new DragonWingsEffect(), filter, true, SetTargetPointer.PERMANENT, null)); this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.GRAVEYARD, new DragonWingsEffect(), filter, true, SetTargetPointer.PERMANENT));
} }
private DragonWings(final DragonWings card) { private DragonWings(final DragonWings card) {
@ -96,4 +96,3 @@ class DragonWingsEffect extends OneShotEffect {
return false; return false;
} }
} }

View file

@ -44,8 +44,7 @@ public final class DualNature extends CardImpl {
// Whenever a nontoken creature enters the battlefield, its controller creates a token that's a copy of that creature. // Whenever a nontoken creature enters the battlefield, its controller creates a token that's a copy of that creature.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new DualNatureCreateTokenEffect(), filter, false, SetTargetPointer.PERMANENT, Zone.BATTLEFIELD, new DualNatureCreateTokenEffect(), filter, false, SetTargetPointer.PERMANENT
"Whenever a nontoken creature enters the battlefield, its controller creates a token that's a copy of that creature."
)); ));
// Whenever a nontoken creature leaves the battlefield, exile all tokens with the same name as that creature. // Whenever a nontoken creature leaves the battlefield, exile all tokens with the same name as that creature.

View file

@ -35,7 +35,7 @@ public final class DurableHandicraft extends CardImpl {
.setText("put a +1/+1 counter on that creature"), .setText("put a +1/+1 counter on that creature"),
new GenericManaCost(1) new GenericManaCost(1)
), StaticFilters.FILTER_PERMANENT_A_CREATURE, ), StaticFilters.FILTER_PERMANENT_A_CREATURE,
false, SetTargetPointer.PERMANENT, null false, SetTargetPointer.PERMANENT
)); ));
// {5}{G}, Sacrifice Durable Handicraft: Put a +1/+1 counter on each creature you control. // {5}{G}, Sacrifice Durable Handicraft: Put a +1/+1 counter on each creature you control.

View file

@ -39,7 +39,7 @@ public final class EldraziMimic extends CardImpl {
// Whenever another colorless creature enters the battlefield under your control, you may have the base power and toughness of Eldrazi Mimic // Whenever another colorless creature enters the battlefield under your control, you may have the base power and toughness of Eldrazi Mimic
// become that creature's power and toughness until end of turn. // become that creature's power and toughness until end of turn.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new EldraziMimicEffect(), FILTER, true, SetTargetPointer.PERMANENT, null)); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new EldraziMimicEffect(), FILTER, true, SetTargetPointer.PERMANENT));
} }
private EldraziMimic(final EldraziMimic card) { private EldraziMimic(final EldraziMimic card) {

View file

@ -42,9 +42,7 @@ public final class EmielTheBlessed extends CardImpl {
// If you do, put a +1/+1 counter on it. If it's a Unicorn, put two +1/+1 counters on it instead. // If you do, put a +1/+1 counter on it. If it's a Unicorn, put two +1/+1 counters on it instead.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new DoIfCostPaid(new EmielTheBlessedEffect(), new ManaCostsImpl<>("{G/W}")), Zone.BATTLEFIELD, new DoIfCostPaid(new EmielTheBlessedEffect(), new ManaCostsImpl<>("{G/W}")),
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT, StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT
"Whenever another creature enters the battlefield under your control, you may pay {G/W}. "
+ "If you do, put a +1/+1 counter on it. If it's a Unicorn, put two +1/+1 counters on it instead."
)); ));
} }
@ -62,6 +60,7 @@ class EmielTheBlessedEffect extends OneShotEffect {
EmielTheBlessedEffect() { EmielTheBlessedEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "put a +1/+1 counter on it. If it's a Unicorn, put two +1/+1 counters on it instead.";
} }
private EmielTheBlessedEffect(final EmielTheBlessedEffect effect) { private EmielTheBlessedEffect(final EmielTheBlessedEffect effect) {

View file

@ -33,7 +33,7 @@ public final class EssenceWarden extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Whenever another creature enters the battlefield, you gain 1 life. // Whenever another creature enters the battlefield, you gain 1 life.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), filter, false, null)); this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), filter, false));
} }
private EssenceWarden(final EssenceWarden card) { private EssenceWarden(final EssenceWarden card) {

View file

@ -1,10 +1,8 @@
package mage.cards.f; package mage.cards.f;
import java.util.StringTokenizer;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldOpponentTriggeredAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenCopyTargetEffect; import mage.abilities.effects.common.CreateTokenCopyTargetEffect;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
@ -13,25 +11,20 @@ import mage.cards.CardSetInfo;
import mage.cards.Cards; import mage.cards.Cards;
import mage.cards.CardsImpl; import mage.cards.CardsImpl;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTarget;
import java.util.StringTokenizer;
import java.util.UUID;
/** /**
* @author LevelX2 * @author LevelX2
*/ */
public final class FaerieArtisans extends CardImpl { public final class FaerieArtisans extends CardImpl {
private static final FilterCreaturePermanent filterNontoken = new FilterCreaturePermanent("nontoken creature");
static {
filterNontoken.add(TokenPredicate.FALSE);
filterNontoken.add(TargetController.OPPONENT.getControllerPredicate());
}
public FaerieArtisans(UUID ownerId, CardSetInfo setInfo) { public FaerieArtisans(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
@ -44,8 +37,8 @@ public final class FaerieArtisans extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// Whenever a nontoken creature enters the battlefield under an opponent's control, create a token that's a copy of that creature except it's an artifact in addition to its other types. Then exile all other tokens created with Faerie Artisans. // Whenever a nontoken creature enters the battlefield under an opponent's control, create a token that's a copy of that creature except it's an artifact in addition to its other types. Then exile all other tokens created with Faerie Artisans.
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new FaerieArtisansEffect(), filterNontoken, false, SetTargetPointer.PERMANENT, Ability ability = new EntersBattlefieldOpponentTriggeredAbility(Zone.BATTLEFIELD,
"Whenever a nontoken creature enters the battlefield under an opponent's control, create a token that's a copy of that creature except it's an artifact in addition to its other types. Then exile all other tokens created with {this}."); new FaerieArtisansEffect(), StaticFilters.FILTER_CREATURE_NON_TOKEN, false, SetTargetPointer.PERMANENT);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -33,7 +33,7 @@ public final class FlameKinWarScout extends CardImpl {
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new FlameKinWarScourEffect(), Zone.BATTLEFIELD, new FlameKinWarScourEffect(),
StaticFilters.FILTER_ANOTHER_CREATURE, false, StaticFilters.FILTER_ANOTHER_CREATURE, false,
SetTargetPointer.PERMANENT, null SetTargetPointer.PERMANENT
)); ));
} }

View file

@ -1,4 +1,3 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID; import java.util.UUID;
@ -18,8 +17,6 @@ import mage.constants.Outcome;
import mage.constants.SetTargetPointer; import mage.constants.SetTargetPointer;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTarget;
@ -34,12 +31,10 @@ public final class FlameshadowConjuring extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}");
// Whenever a nontoken creature enters the battlefield under your control, you may pay {R}. If you do, create a token that's a copy of that creature. That token gains haste. Exile it at the beginning of the next end step. // Whenever a nontoken creature enters the battlefield under your control, you may pay {R}. If you do, create a token that's a copy of that creature. That token gains haste. Exile it at the beginning of the next end step.
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new DoIfCostPaid( Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
new FlameshadowConjuringEffect(), new ManaCostsImpl<>("{R}"), "Pay {R} to create a token that's a copy of that creature that entered the battlefield?"), new DoIfCostPaid(new FlameshadowConjuringEffect(), new ManaCostsImpl<>("{R}"),
StaticFilters.FILTER_CONTROLLED_CREATURE_NON_TOKEN, false, SetTargetPointer.PERMANENT, "Pay {R} to create a token that's a copy of that creature that entered the battlefield?"),
"Whenever a nontoken creature enters the battlefield under your control, " StaticFilters.FILTER_CREATURE_NON_TOKEN, false, SetTargetPointer.PERMANENT);
+ "you may pay {R}. If you do, create a token that's a copy of that creature. "
+ "That token gains haste. Exile it at the beginning of the next end step.");
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -3,7 +3,7 @@ package mage.cards.f;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.ObjectColor; import mage.ObjectColor;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -36,7 +36,8 @@ public final class FoundryStreetDenizen extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Whenever another red creature enters the battlefield under your control, Foundry Street Denizen gets +1/+0 until end of turn. // Whenever another red creature enters the battlefield under your control, Foundry Street Denizen gets +1/+0 until end of turn.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), filter, false, null, true)); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
new BoostSourceEffect(1, 0, Duration.EndOfTurn), filter, false));
} }
private FoundryStreetDenizen(final FoundryStreetDenizen card) { private FoundryStreetDenizen(final FoundryStreetDenizen card) {

View file

@ -54,7 +54,7 @@ public final class FrontierSiege extends CardImpl {
// * Dragons - Whenever a creature with flying enters the battlefield under your control, you may have it fight target creature you don't control. // * Dragons - Whenever a creature with flying enters the battlefield under your control, you may have it fight target creature you don't control.
Ability ability2 = new ConditionalTriggeredAbility( Ability ability2 = new ConditionalTriggeredAbility(
new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new FrontierSiegeFightEffect(), filter, true, SetTargetPointer.PERMANENT, ""), new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new FrontierSiegeFightEffect(), filter, true, SetTargetPointer.PERMANENT),
new ModeChoiceSourceCondition("Dragons"), new ModeChoiceSourceCondition("Dragons"),
ruleTrigger2); ruleTrigger2);
ability2.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL)); ability2.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL));

View file

@ -36,7 +36,7 @@ public final class GamorreanPrisonGuard extends CardImpl {
// Whenever a creature enters the battlefield under an opponent's control, Gamorrean Prison Guard fights that creature. // Whenever a creature enters the battlefield under an opponent's control, Gamorrean Prison Guard fights that creature.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new GamorreanPrisonGuardEffect(), filter, false, SetTargetPointer.PERMANENT, "Whenever a creature enters the battlefield under an opponent's control, Gamorrean Prison Guard fights that creature.")); Zone.BATTLEFIELD, new GamorreanPrisonGuardEffect(), filter, false, SetTargetPointer.PERMANENT));
} }

View file

@ -13,8 +13,6 @@ import mage.constants.Outcome;
import mage.constants.SetTargetPointer; import mage.constants.SetTargetPointer;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.game.permanent.token.MyrToken; import mage.game.permanent.token.MyrToken;
@ -30,7 +28,7 @@ public final class GenesisChamber extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}");
// Whenever a nontoken creature enters the battlefield, if Genesis Chamber is untapped, that creature's controller creates a 1/1 colorless Myr artifact creature token. // Whenever a nontoken creature enters the battlefield, if Genesis Chamber is untapped, that creature's controller creates a 1/1 colorless Myr artifact creature token.
TriggeredAbility ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new GenesisChamberEffect(), StaticFilters.FILTER_CREATURE_NON_TOKEN, false, SetTargetPointer.PERMANENT, ""); TriggeredAbility ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new GenesisChamberEffect(), StaticFilters.FILTER_CREATURE_NON_TOKEN, false, SetTargetPointer.PERMANENT);
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability,
SourceUntappedCondition.instance, SourceUntappedCondition.instance,
"Whenever a nontoken creature enters the battlefield, " "Whenever a nontoken creature enters the battlefield, "

View file

@ -1,4 +1,3 @@
package mage.cards.g; package mage.cards.g;
import java.util.UUID; import java.util.UUID;
@ -14,7 +13,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.TargetController;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterArtifactPermanent; import mage.filter.common.FilterArtifactPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.mageobject.AnotherPredicate;
@ -28,7 +26,6 @@ public final class GlassdustHulk extends CardImpl {
private static final FilterPermanent filter = new FilterArtifactPermanent("another artifact"); private static final FilterPermanent filter = new FilterArtifactPermanent("another artifact");
static { static {
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
} }
@ -40,9 +37,8 @@ public final class GlassdustHulk extends CardImpl {
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// Whenever another artifact enters the battlefield under your control, Glassdust Hulk gets +1/+1 until end of turn and can't be blocked this turn. // Whenever another artifact enters the battlefield under your control, Glassdust Hulk gets +1/+1 until end of turn and can't be blocked this turn.
Ability ability = new EntersBattlefieldControlledTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn), filter, Ability ability = new EntersBattlefieldControlledTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn), filter);
"Whenever another artifact enters the battlefield under your control, {this} gets +1/+1 until end of turn and can't be blocked this turn."); ability.addEffect(new CantBeBlockedSourceEffect(Duration.EndOfTurn).setText("and can't be blocked this turn"));
ability.addEffect(new CantBeBlockedSourceEffect(Duration.EndOfTurn));
this.addAbility(ability); this.addAbility(ability);
this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{W/U}"))); this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{W/U}")));

View file

@ -35,7 +35,7 @@ public final class GoblinAssassin extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever Goblin Assassin or another Goblin enters the battlefield, each player flips a coin. Each player whose coin comes up tails sacrifices a creature. // Whenever Goblin Assassin or another Goblin enters the battlefield, each player flips a coin. Each player whose coin comes up tails sacrifices a creature.
this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility(new GoblinAssassinTriggeredEffect(), filter)); this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility(new GoblinAssassinTriggeredEffect(), filter, false, false));
} }
private GoblinAssassin(final GoblinAssassin card) { private GoblinAssassin(final GoblinAssassin card) {

View file

@ -1,9 +1,8 @@
package mage.cards.g; package mage.cards.g;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -12,7 +11,7 @@ import mage.constants.SubType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.PowerPredicate; import mage.filter.predicate.mageobject.PowerPredicate;
/** /**
@ -21,26 +20,23 @@ import mage.filter.predicate.mageobject.PowerPredicate;
*/ */
public final class GodtrackerOfJund extends CardImpl { public final class GodtrackerOfJund extends CardImpl {
final private static FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature with power 5 or greater");
static { static {
filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 4)); filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 4));
} }
private static final String rule = "Whenever a creature with power 5 or greater enters the battlefield under your control, you may put a +1/+1 counter on {this}.";
public GodtrackerOfJund(UUID ownerId, CardSetInfo setInfo) { public GodtrackerOfJund(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}{G}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}{G}");
this.subtype.add(SubType.ELF); this.subtype.add(SubType.ELF);
this.subtype.add(SubType.SHAMAN); this.subtype.add(SubType.SHAMAN);
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever a creature with power 5 or greater enters the battlefield under your control, you may put a +1/+1 counter on Godtracker of Jund. // Whenever a creature with power 5 or greater enters the battlefield under your control, you may put a +1/+1 counter on Godtracker of Jund.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter, true, rule, true)); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter, true));
} }
private GodtrackerOfJund(final GodtrackerOfJund card) { private GodtrackerOfJund(final GodtrackerOfJund card) {

View file

@ -1,9 +1,8 @@
package mage.cards.g; package mage.cards.g;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -28,8 +27,8 @@ public final class GoldnightCommander extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever another creature enters the battlefield under your control, creatures you control get +1/+1 until end of turn. // Whenever another creature enters the battlefield under your control, creatures you control get +1/+1 until end of turn.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
new BoostControlledEffect(1, 1, Duration.EndOfTurn), StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, null, true)); new BoostControlledEffect(1, 1, Duration.EndOfTurn), StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false));
} }
private GoldnightCommander(final GoldnightCommander card) { private GoldnightCommander(final GoldnightCommander card) {

View file

@ -29,9 +29,7 @@ public final class GoodFortuneUnicorn extends CardImpl {
// Whenever another creature enters the battlefield under your control, put a +1/+1 counter on that creature. // Whenever another creature enters the battlefield under your control, put a +1/+1 counter on that creature.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()), Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()),
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT, StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT
"Whenever another creature enters the battlefield under your control, " +
"put a +1/+1 counter on that creature."
)); ));
} }

View file

@ -26,7 +26,7 @@ public final class GravePeril extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{B}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{B}");
// When a nonblack creature enters the battlefield, sacrifice Grave Peril. If you do, destroy that creature. // When a nonblack creature enters the battlefield, sacrifice Grave Peril. If you do, destroy that creature.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new GravePerilEffect(), StaticFilters.FILTER_PERMANENT_CREATURE_NON_BLACK, false, SetTargetPointer.PERMANENT, null).setTriggerPhrase("When a nonblack creature enters the battlefield, ")); this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new GravePerilEffect(), StaticFilters.FILTER_PERMANENT_CREATURE_NON_BLACK, false, SetTargetPointer.PERMANENT).setTriggerPhrase("When a nonblack creature enters the battlefield, "));
} }
private GravePeril(final GravePeril card) { private GravePeril(final GravePeril card) {

View file

@ -1,9 +1,8 @@
package mage.cards.g; package mage.cards.g;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -31,8 +30,8 @@ public final class GriffinProtector extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// Whenever another creature enters the battlefield under your control, Griffin Protector gets +1/+1 until end of turn. // Whenever another creature enters the battlefield under your control, Griffin Protector gets +1/+1 until end of turn.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn),
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, null, true)); StaticFilters.FILTER_ANOTHER_CREATURE, false));
} }

View file

@ -39,11 +39,10 @@ public final class HalanaKessigRanger extends CardImpl {
this.addAbility(ReachAbility.getInstance()); this.addAbility(ReachAbility.getInstance());
// Whenever another creature enters the battlefield under your control, you may pay {2}. When you do, that creature deals damage equal to its power to target creature. // Whenever another creature enters the battlefield under your control, you may pay {2}. When you do, that creature deals damage equal to its power to target creature.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
Zone.BATTLEFIELD, new DoIfCostPaid(new HalanaKessigRangerTriggerEffect(), new GenericManaCost(2)), new DoIfCostPaid(new HalanaKessigRangerTriggerEffect(), new GenericManaCost(2))
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT, .setText("you may pay {2}. When you do, that creature deals damage equal to its power to target creature."),
"Whenever another creature enters the battlefield under your control, you may pay {2}. " + StaticFilters.FILTER_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT
"When you do, that creature deals damage equal to its power to target creature."
)); ));
// Partner // Partner

View file

@ -1,9 +1,8 @@
package mage.cards.h; package mage.cards.h;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.GainLifeEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -27,8 +26,8 @@ public final class HealerOfThePride extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// Whenever another creature enters the battlefield under your control, you gain 2 life. // Whenever another creature enters the battlefield under your control, you gain 2 life.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(2), this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(2),
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, null, true)); StaticFilters.FILTER_ANOTHER_CREATURE, false));
} }

View file

@ -1,8 +1,7 @@
package mage.cards.h; package mage.cards.h;
import java.util.UUID; import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.AttachEffect;
@ -35,9 +34,9 @@ public final class HerosBlade extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(3, 2))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(3, 2)));
// Whenever a legendary creature enters the battlefield under your control, you may attach Hero's Blade to it. // Whenever a legendary creature enters the battlefield under your control, you may attach Hero's Blade to it.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new AttachEffect(Outcome.Detriment, "attach {this} to it"), Zone.BATTLEFIELD, new AttachEffect(Outcome.Detriment, "attach {this} to it"),
filter, true, SetTargetPointer.PERMANENT, null, true)); filter, true, SetTargetPointer.PERMANENT));
// Equip {4} // Equip {4}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(4))); this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(4)));

View file

@ -39,8 +39,8 @@ public final class HungryDragonsnake extends CardImpl {
// Whenever a creature enters the battlefield under an opponents's control, put a +1/+1 counter on Hungry Dragonsnake. // Whenever a creature enters the battlefield under an opponents's control, put a +1/+1 counter on Hungry Dragonsnake.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD,
new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter, false, new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter, false
"Whenever a creature enters the battlefield under an opponents's control, put a +1/+1 counter on {this}.", false)); ));
} }
private HungryDragonsnake(final HungryDragonsnake card) { private HungryDragonsnake(final HungryDragonsnake card) {

View file

@ -21,7 +21,7 @@ import java.util.UUID;
*/ */
public final class IcebergCancrix extends CardImpl { public final class IcebergCancrix extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent(); private static final FilterPermanent filter = new FilterPermanent("another snow permanent");
static { static {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
@ -38,9 +38,7 @@ public final class IcebergCancrix extends CardImpl {
// Whenever another snow permanent enters the battlefield under your control, you may have target player put the top two cards of their library into their graveyard. // Whenever another snow permanent enters the battlefield under your control, you may have target player put the top two cards of their library into their graveyard.
Ability ability = new EntersBattlefieldControlledTriggeredAbility( Ability ability = new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new MillCardsTargetEffect(2), filter, Zone.BATTLEFIELD, new MillCardsTargetEffect(2), filter, true
true, "Whenever another snow permanent enters the battlefield under your control, " +
"you may have target player mill two cards."
); );
ability.addTarget(new TargetPlayer()); ability.addTarget(new TargetPlayer());
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,9 +1,7 @@
package mage.cards.i; package mage.cards.i;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldOpponentTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.AttachEffect;
@ -11,32 +9,22 @@ import mage.abilities.effects.common.continuous.ControlEnchantedEffect;
import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.*;
import mage.constants.SubType; import mage.filter.StaticFilters;
import mage.constants.Outcome;
import mage.constants.SetTargetPointer;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
* *
* @author fireshoes * @author fireshoes
*/ */
public final class IllusoryGains extends CardImpl { public final class IllusoryGains extends CardImpl {
private static final FilterPermanent filter = new FilterCreaturePermanent("a creature");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public IllusoryGains(UUID ownerId, CardSetInfo setInfo) { public IllusoryGains(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}{U}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}{U}");
this.subtype.add(SubType.AURA); this.subtype.add(SubType.AURA);
@ -52,8 +40,8 @@ public final class IllusoryGains extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ControlEnchantedEffect())); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ControlEnchantedEffect()));
// Whenever a creature enters the battlefield under an opponent's control, attach Illusory Gains to that creature. // Whenever a creature enters the battlefield under an opponent's control, attach Illusory Gains to that creature.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldOpponentTriggeredAbility(
Zone.BATTLEFIELD, new IllusoryGainsEffect(), filter, false, SetTargetPointer.PERMANENT, "Whenever a creature enters the battlefield under an opponent's control, attach Illusory Gains to that creature.")); Zone.BATTLEFIELD, new IllusoryGainsEffect(), StaticFilters.FILTER_PERMANENT_CREATURE, false, SetTargetPointer.PERMANENT));
} }
private IllusoryGains(final IllusoryGains card) { private IllusoryGains(final IllusoryGains card) {
@ -68,8 +56,9 @@ public final class IllusoryGains extends CardImpl {
class IllusoryGainsEffect extends OneShotEffect { class IllusoryGainsEffect extends OneShotEffect {
public IllusoryGainsEffect() { IllusoryGainsEffect() {
super(Outcome.Detriment); super(Outcome.Detriment);
staticText = "attach {this} to that creature";
} }
private IllusoryGainsEffect(final IllusoryGainsEffect effect) { private IllusoryGainsEffect(final IllusoryGainsEffect effect) {

View file

@ -15,7 +15,6 @@ import mage.constants.Duration;
import mage.constants.SetTargetPointer; import mage.constants.SetTargetPointer;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
/** /**
* *
@ -29,7 +28,7 @@ public final class InTheWebOfWar extends CardImpl {
// Whenever a creature enters the battlefield under your control, it gets +2/+0 and gains haste until end of turn. // Whenever a creature enters the battlefield under your control, it gets +2/+0 and gains haste until end of turn.
Effect effect = new BoostTargetEffect(2,0, Duration.EndOfTurn); Effect effect = new BoostTargetEffect(2,0, Duration.EndOfTurn);
effect.setText("it gets +2/+0"); effect.setText("it gets +2/+0");
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, effect, StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT, null); Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, effect, StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT);
effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn); effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn);
effect.setText("and gains haste until end of turn"); effect.setText("and gains haste until end of turn");
ability.addEffect(effect); ability.addEffect(effect);

View file

@ -66,7 +66,7 @@ public final class InallaArchmageRitualist extends CardImpl {
Ability ability = new ConditionalInterveningIfTriggeredAbility( Ability ability = new ConditionalInterveningIfTriggeredAbility(
new EntersBattlefieldControlledTriggeredAbility(Zone.ALL, new DoIfCostPaid( new EntersBattlefieldControlledTriggeredAbility(Zone.ALL, new DoIfCostPaid(
new InallaArchmageRitualistEffect(), new ManaCostsImpl<>("{1}"), "Pay {1} to create a token copy?"), new InallaArchmageRitualistEffect(), new ManaCostsImpl<>("{1}"), "Pay {1} to create a token copy?"),
filter, false, SetTargetPointer.PERMANENT, ""), filter, false, SetTargetPointer.PERMANENT),
SourceOnBattlefieldOrCommandZoneCondition.instance, SourceOnBattlefieldOrCommandZoneCondition.instance,
"Whenever another nontoken Wizard enters the battlefield under your control, " "Whenever another nontoken Wizard enters the battlefield under your control, "
+ "{this} is in the command zone or on the battlefield, " + "{this} is in the command zone or on the battlefield, "

View file

@ -30,7 +30,7 @@ public final class InventorsGoggles extends CardImpl {
// Whenever an Artificer enters the battlefield under your control, you may attach Inventor's Goggles to it. // Whenever an Artificer enters the battlefield under your control, you may attach Inventor's Goggles to it.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new AttachEffect(Outcome.BoostCreature, "attach {this} to it"), Zone.BATTLEFIELD, new AttachEffect(Outcome.BoostCreature, "attach {this} to it"),
filter, true, SetTargetPointer.PERMANENT, null filter, true, SetTargetPointer.PERMANENT
)); ));
// Equip {2} // Equip {2}

View file

@ -4,7 +4,7 @@ import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.ObjectColor; import mage.ObjectColor;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -38,10 +38,10 @@ public final class IvyLaneDenizen extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// Whenever another green creature enters the battlefield under your control, put a +1/+1 counter on target creature. // Whenever another green creature enters the battlefield under your control, put a +1/+1 counter on target creature.
Ability ability = new EntersBattlefieldAllTriggeredAbility( Ability ability = new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new AddCountersTargetEffect(CounterType.P1P1.createInstance()), new AddCountersTargetEffect(CounterType.P1P1.createInstance()),
filter, false, null, true); filter, false);
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -13,8 +13,6 @@ import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID; import java.util.UUID;
@ -23,12 +21,6 @@ import java.util.UUID;
*/ */
public final class JuniperOrderRanger extends CardImpl { public final class JuniperOrderRanger extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another creature");
static {
filter.add(AnotherPredicate.instance);
}
public JuniperOrderRanger(UUID ownerId, CardSetInfo setInfo) { public JuniperOrderRanger(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{W}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
@ -40,11 +32,10 @@ public final class JuniperOrderRanger extends CardImpl {
// Whenever another creature enters the battlefield under your control, put a +1/+1 counter on that creature and a +1/+1 counter on Juniper Order Ranger. // Whenever another creature enters the battlefield under your control, put a +1/+1 counter on that creature and a +1/+1 counter on Juniper Order Ranger.
Ability ability = new EntersBattlefieldControlledTriggeredAbility( Ability ability = new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()), Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()),
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, StaticFilters.FILTER_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT
SetTargetPointer.PERMANENT, "Whenever another creature enters the battlefield " +
"under your control, put a +1/+1 counter on that creature and a +1/+1 counter on {this}."
); );
ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance())); ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance())
.setText("and a +1/+1 counter on {this}"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -17,6 +17,7 @@ import mage.constants.SubType;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterNonlandPermanent; import mage.filter.common.FilterNonlandPermanent;
import mage.filter.predicate.permanent.TokenPredicate; import mage.filter.predicate.permanent.TokenPredicate;
@ -51,12 +52,10 @@ public final class JunkWinder extends CardImpl {
// Whenever a token enters the battlefield under your control, tap target nonland permanent an opponent controls. It doesn't untap during its controller's next untap step. // Whenever a token enters the battlefield under your control, tap target nonland permanent an opponent controls. It doesn't untap during its controller's next untap step.
Ability ability = new EntersBattlefieldControlledTriggeredAbility( Ability ability = new EntersBattlefieldControlledTriggeredAbility(
new TapTargetEffect(), filter, "Whenever a token enters the battlefield " + new TapTargetEffect(), StaticFilters.FILTER_PERMANENT_TOKEN
"under your control, tap target nonland permanent an opponent controls. " +
"It doesn't untap during its controller's next untap step."
); );
ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect()); ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect("It"));
ability.addTarget(new TargetPermanent(filter2)); ability.addTarget(new TargetPermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_NON_LAND));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -30,8 +30,9 @@ public final class KavuLair extends CardImpl {
// Whenever a creature with power 4 or greater enters the battlefield, its controller draws a card. // Whenever a creature with power 4 or greater enters the battlefield, its controller draws a card.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD,
new DrawCardTargetEffect(1), filter, false, SetTargetPointer.PLAYER, new DrawCardTargetEffect(1).setText("its controller draws a card"),
"Whenever a creature with power 4 or greater enters the battlefield, its controller draws a card.")); filter, false, SetTargetPointer.PLAYER
));
} }
private KavuLair(final KavuLair card) { private KavuLair(final KavuLair card) {

View file

@ -1,10 +1,9 @@
package mage.cards.k; package mage.cards.k;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.TrampleAbility;
@ -30,9 +29,11 @@ public final class KruinStriker extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Whenever another creature enters the battlefield under your control, Kruin Striker gets +1/+0 and gains trample until end of turn. // Whenever another creature enters the battlefield under your control, Kruin Striker gets +1/+0 and gains trample until end of turn.
Ability ability = new EntersBattlefieldAllTriggeredAbility(new BoostSourceEffect(1, 0, Duration.EndOfTurn), StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, Ability ability = new EntersBattlefieldControlledTriggeredAbility(
"Whenever another creature enters the battlefield under your control, Kruin Striker gets +1/+0 and gains trample until end of turn."); new BoostSourceEffect(1, 0, Duration.EndOfTurn).setText("{this} gets +1/+0"),
ability.addEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.EndOfTurn)); StaticFilters.FILTER_ANOTHER_CREATURE);
ability.addEffect(new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.EndOfTurn).
setText("and gains trample until end of turn"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -31,7 +31,7 @@ public final class LethalVapors extends CardImpl {
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new DestroyTargetEffect().setText("destroy it"), new DestroyTargetEffect().setText("destroy it"),
StaticFilters.FILTER_PERMANENT_A_CREATURE, StaticFilters.FILTER_PERMANENT_A_CREATURE,
false, SetTargetPointer.PERMANENT, null)); false, SetTargetPointer.PERMANENT));
// {0}: Destroy Lethal Vapors. You skip your next turn. Any player may activate this ability. // {0}: Destroy Lethal Vapors. You skip your next turn. Any player may activate this ability.
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroySourceEffect(), new ManaCostsImpl<>("{0}")); SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroySourceEffect(), new ManaCostsImpl<>("{0}"));

View file

@ -28,7 +28,7 @@ public final class LlanowarStalker extends CardImpl {
// Whenever another creature enters the battlefield under your control, Llanowar Stalker gets +1/+0 until end of turn. // Whenever another creature enters the battlefield under your control, Llanowar Stalker gets +1/+0 until end of turn.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
new BoostSourceEffect(1, 0, Duration.EndOfTurn), new BoostSourceEffect(1, 0, Duration.EndOfTurn),
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, null StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE
)); ));
} }

View file

@ -3,7 +3,7 @@ package mage.cards.l;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeXTargetCost; import mage.abilities.costs.common.SacrificeXTargetCost;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
@ -12,8 +12,8 @@ import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.keyword.InvestigateEffect; import mage.abilities.effects.keyword.InvestigateEffect;
import mage.cards.*; import mage.cards.*;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.common.FilterPermanentCard; import mage.filter.common.FilterPermanentCard;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.mageobject.AnotherPredicate;
@ -30,7 +30,7 @@ import mage.target.common.TargetOpponent;
*/ */
public final class LonisCryptozoologist extends CardImpl { public final class LonisCryptozoologist extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another nontoken creature"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another nontoken creature");
private static final FilterControlledPermanent filter2 = new FilterControlledPermanent(SubType.CLUE, "Clues"); private static final FilterControlledPermanent filter2 = new FilterControlledPermanent(SubType.CLUE, "Clues");
static { static {
@ -49,7 +49,7 @@ public final class LonisCryptozoologist extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever another nontoken creature enters the battlefield under your control, investigate. // Whenever another nontoken creature enters the battlefield under your control, investigate.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new InvestigateEffect(), filter, false, null, true)); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new InvestigateEffect(), filter));
// {T}, Sacrifice X Clues: Target opponent reveals the top X cards of their library. // {T}, Sacrifice X Clues: Target opponent reveals the top X cards of their library.
// You may put a nonland permanent card with mana value X or less from among them onto the battlefield under your control. // You may put a nonland permanent card with mana value X or less from among them onto the battlefield under your control.

View file

@ -28,7 +28,7 @@ public final class ManaEchoes extends CardImpl {
// Whenever a creature enters the battlefield, you may add X mana of {C}, where X is the number of creatures you control that share a creature type with it. // Whenever a creature enters the battlefield, you may add X mana of {C}, where X is the number of creatures you control that share a creature type with it.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD,
new ManaEchoesEffect(), StaticFilters.FILTER_PERMANENT_A_CREATURE, true, SetTargetPointer.PERMANENT, "")); new ManaEchoesEffect(), StaticFilters.FILTER_PERMANENT_A_CREATURE, true, SetTargetPointer.PERMANENT));
} }
private ManaEchoes(final ManaEchoes card) { private ManaEchoes(final ManaEchoes card) {

View file

@ -11,10 +11,8 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard; import mage.filter.common.FilterCreatureCard;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
@ -26,11 +24,6 @@ import java.util.UUID;
public final class MaraudingRaptor extends CardImpl { public final class MaraudingRaptor extends CardImpl {
private static final FilterCard filter = new FilterCreatureCard("creature spells"); private static final FilterCard filter = new FilterCreatureCard("creature spells");
private static final FilterPermanent filter2 = new FilterCreaturePermanent("another creature");
static {
filter2.add(AnotherPredicate.instance);
}
public MaraudingRaptor(UUID ownerId, CardSetInfo setInfo) { public MaraudingRaptor(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
@ -45,10 +38,7 @@ public final class MaraudingRaptor extends CardImpl {
// Whenever another creature enters the battlefield under your control, Marauding Raptor deals 2 damage to it. If a Dinosaur is dealt damage this way, Marauding Raptor gets +2/+0 until end of turn. // Whenever another creature enters the battlefield under your control, Marauding Raptor deals 2 damage to it. If a Dinosaur is dealt damage this way, Marauding Raptor gets +2/+0 until end of turn.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new MaraudingRaptorEffect(), Zone.BATTLEFIELD, new MaraudingRaptorEffect(),
filter2, false, SetTargetPointer.PERMANENT, StaticFilters.FILTER_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT
"Whenever another creature enters the battlefield under your control, " +
"{this} deals 2 damage to it. If a Dinosaur is dealt damage this way, " +
"{this} gets +2/+0 until end of turn."
)); ));
} }
@ -66,6 +56,7 @@ class MaraudingRaptorEffect extends OneShotEffect {
MaraudingRaptorEffect() { MaraudingRaptorEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "{this} deals 2 damage to it. If a Dinosaur is dealt damage this way, {this} gets +2/+0 until end of turn";
} }
private MaraudingRaptorEffect(final MaraudingRaptorEffect effect) { private MaraudingRaptorEffect(final MaraudingRaptorEffect effect) {
@ -88,4 +79,4 @@ class MaraudingRaptorEffect extends OneShotEffect {
} }
return true; return true;
} }
} }

View file

@ -1,8 +1,7 @@
package mage.cards.m; package mage.cards.m;
import java.util.UUID; import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.Effect; import mage.abilities.effects.Effect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -33,7 +32,7 @@ public final class MightyEmergence extends CardImpl {
// Whenever a creature with power 5 or greater enters the battlefield under your control, you may put two +1/+1 counters on it. // Whenever a creature with power 5 or greater enters the battlefield under your control, you may put two +1/+1 counters on it.
Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance(2)); Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance(2));
effect.setText("you may put two +1/+1 counters on it"); effect.setText("you may put two +1/+1 counters on it");
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, effect, filter, true, SetTargetPointer.PERMANENT, "", true)); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, effect, filter, true, SetTargetPointer.PERMANENT));
} }
private MightyEmergence(final MightyEmergence card) { private MightyEmergence(final MightyEmergence card) {

View file

@ -21,7 +21,7 @@ import java.util.UUID;
*/ */
public final class MiirymSentinelWyrm extends CardImpl { public final class MiirymSentinelWyrm extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.DRAGON); private static final FilterPermanent filter = new FilterControlledPermanent(SubType.DRAGON, "another nontoken Dragon");
static { static {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
@ -45,10 +45,9 @@ public final class MiirymSentinelWyrm extends CardImpl {
// Whenever another nontoken Dragon enters the battlefield under your control, create a token that's a copy of it, except the token isn't legendary if that Dragon is legendary. // Whenever another nontoken Dragon enters the battlefield under your control, create a token that's a copy of it, except the token isn't legendary if that Dragon is legendary.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new CreateTokenCopyTargetEffect(true).setIsntLegendary(true), Zone.BATTLEFIELD, new CreateTokenCopyTargetEffect(true).setIsntLegendary(true)
filter, false, SetTargetPointer.PERMANENT, "Whenever another nontoken Dragon " + .setText("create a token that's a copy of it, except the token isn't legendary"),
"enters the battlefield under your control, create a token that's a copy of it, " + filter, false, SetTargetPointer.PERMANENT
"except the token isn't legendary."
)); ));
} }

View file

@ -14,8 +14,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTarget;
@ -37,7 +35,7 @@ public final class MinionReflector extends CardImpl {
new MinionReflectorEffect(), new ManaCostsImpl<>("{2}"), "Pay {2} " + new MinionReflectorEffect(), new ManaCostsImpl<>("{2}"), "Pay {2} " +
"to create a token that's a copy of that creature that entered the battlefield?" "to create a token that's a copy of that creature that entered the battlefield?"
), ),
StaticFilters.FILTER_CREATURE_NON_TOKEN, false, SetTargetPointer.PERMANENT, null StaticFilters.FILTER_CREATURE_NON_TOKEN, false, SetTargetPointer.PERMANENT
)); ));
} }

View file

@ -10,10 +10,7 @@ import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.SetTargetPointer; import mage.constants.SetTargetPointer;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.Game; import mage.game.Game;
import mage.players.Player; import mage.players.Player;
@ -29,11 +26,8 @@ public final class MirrorMarch extends CardImpl {
// Whenever a nontoken creature enters the battlefield under your control, flip a coin until you lose a flip. For each flip you won, create a token that's a copy of that creature. Those tokens gain haste. Exile them at the beginning of the next end step. // Whenever a nontoken creature enters the battlefield under your control, flip a coin until you lose a flip. For each flip you won, create a token that's a copy of that creature. Those tokens gain haste. Exile them at the beginning of the next end step.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new MirrorMarchEffect(), StaticFilters.FILTER_CREATURE_NON_TOKEN, false, SetTargetPointer.PERMANENT, Zone.BATTLEFIELD, new MirrorMarchEffect(), StaticFilters.FILTER_CREATURE_NON_TOKEN,
"Whenever a nontoken creature enters the battlefield under your control, " + false, SetTargetPointer.PERMANENT
"flip a coin until you lose a flip. For each flip you won, " +
"create a token that's a copy of that creature. Those tokens gain haste. " +
"Exile them at the beginning of the next end step."
)); ));
} }
@ -51,6 +45,9 @@ class MirrorMarchEffect extends OneShotEffect {
MirrorMarchEffect() { MirrorMarchEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "flip a coin until you lose a flip. For each flip you won, " +
"create a token that's a copy of that creature. Those tokens gain haste. " +
"Exile them at the beginning of the next end step.";
} }
private MirrorMarchEffect(final MirrorMarchEffect effect) { private MirrorMarchEffect(final MirrorMarchEffect effect) {
@ -86,4 +83,4 @@ class MirrorMarchEffect extends OneShotEffect {
} }
return true; return true;
} }
} }

View file

@ -37,7 +37,7 @@ public final class Mirrorworks extends CardImpl {
Effect effect = new DoIfCostPaid(new CreateTokenCopyTargetEffect(true), Effect effect = new DoIfCostPaid(new CreateTokenCopyTargetEffect(true),
new ManaCostsImpl<>("{2}"), "Create a token that's a copy of that artifact?"); new ManaCostsImpl<>("{2}"), "Create a token that's a copy of that artifact?");
effect.setText("you may pay {2}. If you do, create a token that's a copy of that artifact"); effect.setText("you may pay {2}. If you do, create a token that's a copy of that artifact");
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, effect, filter, false, SetTargetPointer.PERMANENT, null)); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, effect, filter, false, SetTargetPointer.PERMANENT));
} }
private Mirrorworks(final Mirrorworks card) { private Mirrorworks(final Mirrorworks card) {

View file

@ -4,7 +4,6 @@ import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.SacrificeSourceEffect; import mage.abilities.effects.common.SacrificeSourceEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -13,7 +12,6 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.target.TargetPlayer;
import mage.target.common.TargetPlayerOrPlaneswalker; import mage.target.common.TargetPlayerOrPlaneswalker;
/** /**
@ -21,8 +19,6 @@ import mage.target.common.TargetPlayerOrPlaneswalker;
* @author jeffwadsworth * @author jeffwadsworth
*/ */
public final class MoggBombers extends CardImpl { public final class MoggBombers extends CardImpl {
private static final String rule = "When another creature enters the battlefield, sacrifice {this} and it deals 3 damage to target player or planeswalker.";
public MoggBombers(UUID ownerId, CardSetInfo setInfo) { public MoggBombers(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
@ -32,15 +28,9 @@ public final class MoggBombers extends CardImpl {
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
// When another creature enters the battlefield, sacrifice Mogg Bombers and it deals 3 damage to target player. // When another creature enters the battlefield, sacrifice Mogg Bombers and it deals 3 damage to target player.
Effect sacrificeMoggBombers = new SacrificeSourceEffect(); Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD,
Effect damageTargetPlayer = new DamageTargetEffect(3); new SacrificeSourceEffect(), StaticFilters.FILTER_ANOTHER_CREATURE, false);
Ability ability = new EntersBattlefieldAllTriggeredAbility( ability.addEffect(new DamageTargetEffect(3, "it").concatBy("and"));
Zone.BATTLEFIELD,
sacrificeMoggBombers,
StaticFilters.FILTER_ANOTHER_CREATURE,
false,
rule);
ability.addEffect(damageTargetPlayer);
ability.addTarget(new TargetPlayerOrPlaneswalker()); ability.addTarget(new TargetPlayerOrPlaneswalker());
this.addAbility(ability); this.addAbility(ability);

View file

@ -42,10 +42,8 @@ public final class MoltenEchoes extends CardImpl {
filter.add(ChosenSubtypePredicate.TRUE); filter.add(ChosenSubtypePredicate.TRUE);
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new MoltenEchoesEffect(), Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new MoltenEchoesEffect(),
filter, false, SetTargetPointer.PERMANENT, filter, false, SetTargetPointer.PERMANENT
"Whenever a nontoken creature of the chosen type enters the battlefield under your control, " );
+ "create a token that's a copy of that creature. "
+ "That token gains haste. Exile it at the beginning of the next end step.");
this.addAbility(ability); this.addAbility(ability);
} }
@ -95,4 +93,3 @@ class MoltenEchoesEffect extends OneShotEffect {
return false; return false;
} }
} }

View file

@ -28,7 +28,7 @@ public final class MonkeyCage extends CardImpl {
// When a creature enters the battlefield, sacrifice Monkey Cage and create X 2/2 green Monkey creature tokens, where X is that creature's converted mana cost. // When a creature enters the battlefield, sacrifice Monkey Cage and create X 2/2 green Monkey creature tokens, where X is that creature's converted mana cost.
Ability ability = new EntersBattlefieldAllTriggeredAbility( Ability ability = new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new SacrificeSourceEffect(), StaticFilters.FILTER_PERMANENT_A_CREATURE, Zone.BATTLEFIELD, new SacrificeSourceEffect(), StaticFilters.FILTER_PERMANENT_A_CREATURE,
false, SetTargetPointer.PERMANENT, null false, SetTargetPointer.PERMANENT
).setTriggerPhrase("When a creature enters the battlefield, "); ).setTriggerPhrase("When a creature enters the battlefield, ");
ability.addEffect(new MonkeyCageEffect()); ability.addEffect(new MonkeyCageEffect());
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,4 +1,3 @@
package mage.cards.n; package mage.cards.n;
import java.util.UUID; import java.util.UUID;
@ -43,18 +42,18 @@ public final class NaturesWrath extends CardImpl {
// Whenever a player puts an Island or blue permanent onto the battlefield, they sacrifice an Island or blue permanent. // Whenever a player puts an Island or blue permanent onto the battlefield, they sacrifice an Island or blue permanent.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new SacrificeEffect(filterBlue, 1, ""), new SacrificeEffect(filterBlue, 1, "that player"),
filterBlue, filterBlue,
false, SetTargetPointer.PLAYER, false, SetTargetPointer.PLAYER
"Whenever a player puts an Island or blue permanent onto the battlefield, they sacrifice an Island or blue permanent.")); ).setTriggerPhrase("Whenever a player puts an Island or blue permanent onto the battlefield, "));
// Whenever a player puts a Swamp or black permanent onto the battlefield, they sacrifice a Swamp or black permanent. // Whenever a player puts a Swamp or black permanent onto the battlefield, they sacrifice a Swamp or black permanent.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new SacrificeEffect(filterBlack, 1, ""), new SacrificeEffect(filterBlack, 1, "that player"),
filterBlack, filterBlack,
false, SetTargetPointer.PLAYER, false, SetTargetPointer.PLAYER
"Whenever a player puts a Swamp or black permanent onto the battlefield, they sacrifice a Swamp or black permanent.")); ).setTriggerPhrase("Whenever a player puts a Swamp or black permanent onto the battlefield, "));
} }
private NaturesWrath(final NaturesWrath card) { private NaturesWrath(final NaturesWrath card) {

View file

@ -19,7 +19,7 @@ import java.util.UUID;
*/ */
public final class Necroduality extends CardImpl { public final class Necroduality extends CardImpl {
private static final FilterPermanent filter = new FilterControlledCreaturePermanent(SubType.ZOMBIE); private static final FilterPermanent filter = new FilterControlledCreaturePermanent(SubType.ZOMBIE, "a nontoken Zombie");
static { static {
filter.add(TokenPredicate.FALSE); filter.add(TokenPredicate.FALSE);
@ -29,11 +29,9 @@ public final class Necroduality extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}");
// Whenever a nontoken Zombie enters the battlefield under your control, create a token that's a copy of that creature. // Whenever a nontoken Zombie enters the battlefield under your control, create a token that's a copy of that creature.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
Zone.BATTLEFIELD, new CreateTokenCopyTargetEffect(true), filter, false, new CreateTokenCopyTargetEffect(true).setText("create a token that's a copy of that creature"),
SetTargetPointer.PERMANENT, "Whenever a nontoken Zombie enters the battlefield " + filter, false, SetTargetPointer.PERMANENT));
"under your control, create a token that's a copy of that creature."
));
} }
private Necroduality(final Necroduality card) { private Necroduality(final Necroduality card) {

View file

@ -2,14 +2,14 @@ package mage.cards.n;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldOpponentTriggeredAbility;
import mage.abilities.effects.common.LoseLifeTargetEffect; import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterLandPermanent; import mage.filter.StaticFilters;
import java.util.UUID; import java.util.UUID;
@ -18,12 +18,6 @@ import java.util.UUID;
*/ */
public final class NightshadeHarvester extends CardImpl { public final class NightshadeHarvester extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent();
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public NightshadeHarvester(UUID ownerId, CardSetInfo setInfo) { public NightshadeHarvester(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
@ -33,10 +27,9 @@ public final class NightshadeHarvester extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever a land enters the battlefield under an opponent's control, that player loses 1 life. Put a +1/+1 counter on Nightshade Harvester. // Whenever a land enters the battlefield under an opponent's control, that player loses 1 life. Put a +1/+1 counter on Nightshade Harvester.
Ability ability = new EntersBattlefieldAllTriggeredAbility( Ability ability = new EntersBattlefieldOpponentTriggeredAbility(
Zone.BATTLEFIELD, new LoseLifeTargetEffect(1), filter, false, Zone.BATTLEFIELD, new LoseLifeTargetEffect(1), StaticFilters.FILTER_LAND_A, false,
SetTargetPointer.PLAYER, "Whenever a land enters the battlefield under an opponent's control, " + SetTargetPointer.PLAYER
"that player loses 1 life. Put a +1/+1 counter on {this}."
); );
ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance())); ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance()));
this.addAbility(ability); this.addAbility(ability);

View file

@ -36,7 +36,7 @@ public final class NoxiousGhoul extends CardImpl {
// Whenever Noxious Ghoul or another Zombie enters the battlefield, all non-Zombie creatures get -1/-1 until end of turn. // Whenever Noxious Ghoul or another Zombie enters the battlefield, all non-Zombie creatures get -1/-1 until end of turn.
this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility(new BoostAllEffect( this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility(new BoostAllEffect(
-1, -1, Duration.EndOfTurn, filter, false -1, -1, Duration.EndOfTurn, filter, false
), filter2)); ), filter2, false, false));
} }
private NoxiousGhoul(final NoxiousGhoul card) { private NoxiousGhoul(final NoxiousGhoul card) {

View file

@ -37,7 +37,7 @@ public final class ObsidianBattleAxe extends CardImpl {
// Whenever a Warrior creature enters the battlefield, you may attach Obsidian Battle-Axe to it. // Whenever a Warrior creature enters the battlefield, you may attach Obsidian Battle-Axe to it.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new AttachEffect(Outcome.Detriment, "attach {this} to it"), Zone.BATTLEFIELD, new AttachEffect(Outcome.Detriment, "attach {this} to it"),
filter, true, SetTargetPointer.PERMANENT, null)); filter, true, SetTargetPointer.PERMANENT));
// Equip {3} // Equip {3}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(3), new TargetControlledCreaturePermanent(), false)); this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(3), new TargetControlledCreaturePermanent(), false));
} }

View file

@ -1,38 +1,23 @@
package mage.cards.o; package mage.cards.o;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.keyword.HasteAbility; import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.*;
import mage.constants.SubType; import mage.filter.StaticFilters;
import mage.constants.Duration;
import mage.constants.SetTargetPointer; import java.util.UUID;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
/** /**
* *
* @author jeffwadsworth * @author jeffwadsworth
*/ */
public final class OgreBattledriver extends CardImpl { public final class OgreBattledriver extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another creature");
static {
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(AnotherPredicate.instance);
}
private static final String rule = "Whenever another creature enters the battlefield under your control, that creature gets +2/+0 and gains haste until end of turn.";
public OgreBattledriver(UUID ownerId, CardSetInfo setInfo) { public OgreBattledriver(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}");
@ -43,8 +28,11 @@ public final class OgreBattledriver extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// Whenever another creature enters the battlefield under your control, that creature gets +2/+0 and gains haste until end of turn. // Whenever another creature enters the battlefield under your control, that creature gets +2/+0 and gains haste until end of turn.
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new BoostTargetEffect(2, 0, Duration.EndOfTurn), filter, false, SetTargetPointer.PERMANENT, rule, true); Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
ability.addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn)); new BoostTargetEffect(2, 0, Duration.EndOfTurn).setText("that creature gets +2/+0"),
StaticFilters.FILTER_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT);
ability.addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn)
.setText("and gains haste until end of turn"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -46,7 +46,7 @@ public final class OliviaMobilizedForWar extends CardImpl {
effect.setText("and it becomes a Vampire in addition to its other types"); effect.setText("and it becomes a Vampire in addition to its other types");
doIfCostPaid.addEffect(effect); doIfCostPaid.addEffect(effect);
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, doIfCostPaid, this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, doIfCostPaid,
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT, null)); StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT));
} }
private OliviaMobilizedForWar(final OliviaMobilizedForWar card) { private OliviaMobilizedForWar(final OliviaMobilizedForWar card) {

View file

@ -29,7 +29,7 @@ public final class OnduSpiritdancer extends CardImpl {
// Whenever an enchantment enters the battlefield under your control, you may create a token that's a copy of it. Do this only once each turn. // Whenever an enchantment enters the battlefield under your control, you may create a token that's a copy of it. Do this only once each turn.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new CreateTokenCopyTargetEffect().setText("create a token that's a copy of it"), Zone.BATTLEFIELD, new CreateTokenCopyTargetEffect().setText("create a token that's a copy of it"),
StaticFilters.FILTER_PERMANENT_ENCHANTMENT, true, SetTargetPointer.PERMANENT, null StaticFilters.FILTER_PERMANENT_ENCHANTMENT, true, SetTargetPointer.PERMANENT
).setDoOnlyOnceEachTurn(true).setTriggerPhrase("Whenever an enchantment enters the battlefield under your control, ")); ).setDoOnlyOnceEachTurn(true).setTriggerPhrase("Whenever an enchantment enters the battlefield under your control, "));
} }

View file

@ -36,7 +36,7 @@ public final class OrchardWarden extends CardImpl {
this.toughness = new MageInt(6); this.toughness = new MageInt(6);
// Whenever another Treefolk creature enters the battlefield under your control, you may gain life equal to that creature's toughness. // Whenever another Treefolk creature enters the battlefield under your control, you may gain life equal to that creature's toughness.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new OrchardWardenffect(), filter, true, SetTargetPointer.PERMANENT, "")); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new OrchardWardenffect(), filter, true, SetTargetPointer.PERMANENT));
} }
private OrchardWarden(final OrchardWarden card) { private OrchardWarden(final OrchardWarden card) {

View file

@ -1,13 +1,12 @@
package mage.cards.o; package mage.cards.o;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterArtifactPermanent;
import java.util.UUID; import java.util.UUID;
@ -16,12 +15,6 @@ import java.util.UUID;
*/ */
public final class OvalchaseDaredevil extends CardImpl { public final class OvalchaseDaredevil extends CardImpl {
private static final FilterPermanent filter = new FilterArtifactPermanent("an artifact");
static {
filter.add(TargetController.YOU.getControllerPredicate());
}
public OvalchaseDaredevil(UUID ownerId, CardSetInfo setInfo) { public OvalchaseDaredevil(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
@ -30,9 +23,9 @@ public final class OvalchaseDaredevil extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever an artifact enters the battlefield under your control, you may return Ovalchase Daredevil from your graveyard to your hand. // Whenever an artifact enters the battlefield under your control, you may return Ovalchase Daredevil from your graveyard to your hand.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.GRAVEYARD, new ReturnSourceFromGraveyardToHandEffect(), filter, Zone.GRAVEYARD, new ReturnSourceFromGraveyardToHandEffect(), StaticFilters.FILTER_PERMANENT_ARTIFACT,
true, SetTargetPointer.NONE, null, true true, SetTargetPointer.NONE
)); ));
} }

View file

@ -1,4 +1,3 @@
package mage.cards.o; package mage.cards.o;
import java.util.UUID; import java.util.UUID;
@ -11,8 +10,6 @@ import mage.constants.SetTargetPointer;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledLandPermanent; import mage.filter.common.FilterControlledLandPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate;
/** /**
* *
@ -31,9 +28,8 @@ public final class Overburden extends CardImpl {
new ReturnToHandChosenPermanentEffect(RETURN_FILTER), new ReturnToHandChosenPermanentEffect(RETURN_FILTER),
StaticFilters.FILTER_CREATURE_NON_TOKEN, StaticFilters.FILTER_CREATURE_NON_TOKEN,
false, false,
SetTargetPointer.PLAYER, SetTargetPointer.PLAYER
"Whenever a player puts a nontoken creature onto the battlefield," ).setTriggerPhrase("Whenever a player puts a nontoken creature onto the battlefield, "));
+ " that player returns a land they control to its owner's hand."));
} }
private Overburden(final Overburden card) { private Overburden(final Overburden card) {

View file

@ -40,7 +40,7 @@ public final class Paleoloth extends CardImpl {
this.toughness = new MageInt(5); this.toughness = new MageInt(5);
// Whenever another creature with power 5 or greater enters the battlefield under your control, you may return target creature card from your graveyard to your hand. // Whenever another creature with power 5 or greater enters the battlefield under your control, you may return target creature card from your graveyard to your hand.
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToHandTargetEffect(), filter, true, rule); Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToHandTargetEffect(), filter, true);
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE)); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE));
this.addAbility(ability); this.addAbility(ability);

View file

@ -30,7 +30,7 @@ public final class Pandemonium extends CardImpl {
Ability ability = new EntersBattlefieldAllTriggeredAbility( Ability ability = new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new PandemoniumEffect(), Zone.BATTLEFIELD, new PandemoniumEffect(),
StaticFilters.FILTER_PERMANENT_A_CREATURE, StaticFilters.FILTER_PERMANENT_A_CREATURE,
false, SetTargetPointer.PERMANENT, "" false, SetTargetPointer.PERMANENT
); );
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
ability.setTargetAdjuster(PandemoniumAdjuster.instance); ability.setTargetAdjuster(PandemoniumAdjuster.instance);

View file

@ -23,7 +23,7 @@ public final class PathOfDiscovery extends CardImpl {
// Whenever a creature enters the battlefield under your control, it explores. (Reveal the top card of your library. Put that card into your hand if it's a land. Otherwise, put a +1/+1 counter on the creature, then put the card back or put it into your graveyard.) // Whenever a creature enters the battlefield under your control, it explores. (Reveal the top card of your library. Put that card into your hand if it's a land. Otherwise, put a +1/+1 counter on the creature, then put the card back or put it into your graveyard.)
this.addAbility(new EntersBattlefieldControlledTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new ExploreTargetEffect(), Zone.BATTLEFIELD, new ExploreTargetEffect(),
StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT, null)); StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT));
} }

View file

@ -1,11 +1,8 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; import mage.abilities.common.EntersBattlefieldThisOrAnotherTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
@ -18,18 +15,18 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/** /**
* @author fireshoes * @author fireshoes
*/ */
public final class PiousEvangel extends CardImpl { public final class PiousEvangel extends CardImpl {
private static final FilterPermanent filter = new FilterCreaturePermanent("{this} or another creature");
private static final FilterControlledPermanent filter2 = new FilterControlledPermanent("another permanent"); private static final FilterControlledPermanent filter2 = new FilterControlledPermanent("another permanent");
static { static {
@ -46,7 +43,8 @@ public final class PiousEvangel extends CardImpl {
this.secondSideCardClazz = mage.cards.w.WaywardDisciple.class; this.secondSideCardClazz = mage.cards.w.WaywardDisciple.class;
// Whenever Pious Evangel or another creature enters the battlefield under your control, you gain 1 life. // Whenever Pious Evangel or another creature enters the battlefield under your control, you gain 1 life.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new GainLifeEffect(1), filter)); this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility(new GainLifeEffect(1),
StaticFilters.FILTER_PERMANENT_CREATURE, false, true));
// {2}, {T}, Sacrifice another permanent: Transform Pious Evangel. // {2}, {T}, Sacrifice another permanent: Transform Pious Evangel.
this.addAbility(new TransformAbility()); this.addAbility(new TransformAbility());
@ -64,4 +62,4 @@ public final class PiousEvangel extends CardImpl {
public PiousEvangel copy() { public PiousEvangel copy() {
return new PiousEvangel(this); return new PiousEvangel(this);
} }
} }

View file

@ -1,4 +1,3 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID; import java.util.UUID;
@ -24,9 +23,7 @@ public final class PoisonbellyOgre extends CardImpl {
static { static {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
} }
private static final String RULE = "Whenever another creature enters the battlefield, its controller loses 1 life.";
public PoisonbellyOgre(UUID ownerId, CardSetInfo setInfo) { public PoisonbellyOgre(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}");
this.subtype.add(SubType.OGRE); this.subtype.add(SubType.OGRE);
@ -35,8 +32,9 @@ public final class PoisonbellyOgre extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// Whenever another creature enters the battlefield, its controller loses 1 life. // Whenever another creature enters the battlefield, its controller loses 1 life.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new LoseLifeTargetEffect(1), filter, false, SetTargetPointer.PLAYER, RULE, false)); this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD,
new LoseLifeTargetEffect(1).setText("its controller loses 1 life"),
filter, false, SetTargetPointer.PLAYER));
} }
private PoisonbellyOgre(final PoisonbellyOgre card) { private PoisonbellyOgre(final PoisonbellyOgre card) {

View file

@ -1,44 +1,30 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldOpponentTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.LoseLifeTargetEffect; import mage.abilities.effects.common.LoseLifeTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SetTargetPointer; import mage.constants.SetTargetPointer;
import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterLandPermanent; import mage.filter.StaticFilters;
import java.util.UUID;
/** /**
*
* @author jeffwadsworth * @author jeffwadsworth
*
*/ */
public final class PollutedBonds extends CardImpl { public final class PollutedBonds extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent("a land");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public PollutedBonds(UUID ownerId, CardSetInfo setInfo) { public PollutedBonds(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}{B}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}{B}");
// Whenever a land enters the battlefield under an opponent's control, that player loses 2 life and you gain 2 life. // Whenever a land enters the battlefield under an opponent's control, that player loses 2 life and you gain 2 life.
Ability ability = new EntersBattlefieldAllTriggeredAbility( Ability ability = new EntersBattlefieldOpponentTriggeredAbility(Zone.BATTLEFIELD,
Zone.BATTLEFIELD, new LoseLifeTargetEffect(2), StaticFilters.FILTER_LAND_A, false, SetTargetPointer.PLAYER);
new LoseLifeTargetEffect(2), ability.addEffect(new GainLifeEffect(2).concatBy("and"));
filter,
false,
SetTargetPointer.PLAYER,
"Whenever a land enters the battlefield under an opponent's control, that player loses 2 life and you gain 2 life.");
ability.addEffect(new GainLifeEffect(2));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -38,7 +38,7 @@ public final class Portcullis extends CardImpl {
String rule = "Whenever a creature enters the battlefield, if there are two or more other creatures on the battlefield, exile that creature."; String rule = "Whenever a creature enters the battlefield, if there are two or more other creatures on the battlefield, exile that creature.";
String rule2 = " Return that card to the battlefield under its owner's control when {this} leaves the battlefield."; String rule2 = " Return that card to the battlefield under its owner's control when {this} leaves the battlefield.";
TriggeredAbility ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new PortcullisExileEffect(), TriggeredAbility ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new PortcullisExileEffect(),
StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT, rule); StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT);
MoreThanXCreaturesOnBFCondition condition = new MoreThanXCreaturesOnBFCondition(2); MoreThanXCreaturesOnBFCondition condition = new MoreThanXCreaturesOnBFCondition(2);
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, condition, rule + rule2)); this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, condition, rule + rule2));

View file

@ -1,4 +1,3 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID; import java.util.UUID;
@ -58,11 +57,8 @@ public final class PrestonTheVanisher extends CardImpl {
effect.setOnlyColor(ObjectColor.WHITE); effect.setOnlyColor(ObjectColor.WHITE);
effect.setOnlySubType(SubType.ILLUSION); effect.setOnlySubType(SubType.ILLUSION);
effect.setText("create a token that's a copy of that creature, except it's a 0/1 white Illusion"); effect.setText("create a token that's a copy of that creature, except it's a 0/1 white Illusion");
this.addAbility( this.addAbility(new EntersBattlefieldCastTriggeredAbility(Zone.BATTLEFIELD, effect, triggerFilter,
new EntersBattlefieldCastTriggeredAbility(Zone.BATTLEFIELD, effect, triggerFilter, false, false, false, SetTargetPointer.PERMANENT, false));
SetTargetPointer.PERMANENT, null,
true));
// {1}{W}, Sacrifice five Illusions: Exile target nonland permanent. // {1}{W}, Sacrifice five Illusions: Exile target nonland permanent.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(),
new ManaCostsImpl<>("{1}{W}")); new ManaCostsImpl<>("{1}{W}"));

View file

@ -1,9 +1,8 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -13,6 +12,7 @@ import mage.constants.Duration;
import mage.constants.SetTargetPointer; import mage.constants.SetTargetPointer;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.mageobject.AnotherPredicate;
@ -29,8 +29,6 @@ public final class PrimalForcemage extends CardImpl {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
} }
private static final String rule = "Whenever another creature enters the battlefield under your control, that creature gets +3/+3 until end of turn.";
public PrimalForcemage(UUID ownerId, CardSetInfo setInfo) { public PrimalForcemage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}");
this.subtype.add(SubType.ELF); this.subtype.add(SubType.ELF);
@ -39,10 +37,10 @@ public final class PrimalForcemage extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever another creature enters the battlefield under your control, that creature gets +3/+3 until end of turn. // Whenever another creature enters the battlefield under your control, that creature gets +3/+3 until end of turn.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, Zone.BATTLEFIELD,
new BoostTargetEffect(3, 3, Duration.EndOfTurn), new BoostTargetEffect(3, 3, Duration.EndOfTurn).setText("that creature gets +3/+3 until end of turn"),
filter, false, SetTargetPointer.PERMANENT, rule, true)); StaticFilters.FILTER_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT));
} }
private PrimalForcemage(final PrimalForcemage card) { private PrimalForcemage(final PrimalForcemage card) {

View file

@ -1,9 +1,8 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID; import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldOpponentTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.AttachEffect;
@ -18,6 +17,7 @@ import mage.constants.SetTargetPointer;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
@ -53,8 +53,8 @@ public final class PrisonTerm extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBlockAttackActivateAttachedEffect())); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBlockAttackActivateAttachedEffect()));
// Whenever a creature enters the battlefield under an opponent's control, you may attach Prison Term to that creature. // Whenever a creature enters the battlefield under an opponent's control, you may attach Prison Term to that creature.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldOpponentTriggeredAbility(
Zone.BATTLEFIELD, new PrisonTermEffect(), filter, true, SetTargetPointer.PERMANENT, "Whenever a creature enters the battlefield under an opponent's control, you may attach Prison Term to that creature.")); Zone.BATTLEFIELD, new PrisonTermEffect(), StaticFilters.FILTER_PERMANENT_A_CREATURE, true, SetTargetPointer.PERMANENT));
} }
private PrisonTerm(final PrisonTerm card) { private PrisonTerm(final PrisonTerm card) {
@ -69,8 +69,9 @@ public final class PrisonTerm extends CardImpl {
class PrisonTermEffect extends OneShotEffect { class PrisonTermEffect extends OneShotEffect {
public PrisonTermEffect() { PrisonTermEffect() {
super(Outcome.Detriment); super(Outcome.Detriment);
staticText = "attach {this} to that creature";
} }
private PrisonTermEffect(final PrisonTermEffect effect) { private PrisonTermEffect(final PrisonTermEffect effect) {

View file

@ -1,7 +1,7 @@
package mage.cards.q; package mage.cards.q;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.costs.common.DiscardCardCost; import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
@ -10,7 +10,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterControlledArtifactPermanent; import mage.filter.StaticFilters;
import java.util.UUID; import java.util.UUID;
@ -27,8 +27,9 @@ public final class QuicksmithGenius extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever an artifact enters the battlefield under your control, you may discard a card. If you do, draw a card. // Whenever an artifact enters the battlefield under your control, you may discard a card. If you do, draw a card.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
Zone.BATTLEFIELD, new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new DiscardCardCost()), new FilterControlledArtifactPermanent("an artifact"), false, null, true)); new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new DiscardCardCost()),
StaticFilters.FILTER_PERMANENT_ARTIFACT, false));
} }
private QuicksmithGenius(final QuicksmithGenius card) { private QuicksmithGenius(final QuicksmithGenius card) {

View file

@ -44,7 +44,7 @@ public final class RampagingFerocidon extends CardImpl {
// Whenever another creature enters the battlefield, Rampaging Ferocidon deals 1 damage to that creature's controller. // Whenever another creature enters the battlefield, Rampaging Ferocidon deals 1 damage to that creature's controller.
this.addAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new DamageTargetEffect(1, true, "that creature's controller"), filter, false, SetTargetPointer.PLAYER, "")); Zone.BATTLEFIELD, new DamageTargetEffect(1, true, "that creature's controller"), filter, false, SetTargetPointer.PLAYER));
} }
private RampagingFerocidon(final RampagingFerocidon card) { private RampagingFerocidon(final RampagingFerocidon card) {

View file

@ -1,15 +1,13 @@
package mage.cards.r; package mage.cards.r;
import java.util.UUID; import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
import mage.game.permanent.token.TreefolkShamanToken; import mage.game.permanent.token.TreefolkShamanToken;
@ -20,12 +18,7 @@ import mage.game.permanent.token.TreefolkShamanToken;
*/ */
public final class ReachOfBranches extends CardImpl { public final class ReachOfBranches extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent("a Forest"); private static final FilterLandPermanent filter = new FilterLandPermanent(SubType.FOREST, "a Forest");
static {
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(SubType.FOREST.getPredicate());
}
public ReachOfBranches(UUID ownerId, CardSetInfo setInfo) { public ReachOfBranches(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.TRIBAL, CardType.INSTANT}, "{4}{G}"); super(ownerId, setInfo, new CardType[]{CardType.TRIBAL, CardType.INSTANT}, "{4}{G}");
@ -33,8 +26,10 @@ public final class ReachOfBranches extends CardImpl {
// Create a 2/5 green Treefolk Shaman creature token. // Create a 2/5 green Treefolk Shaman creature token.
this.getSpellAbility().addEffect(new CreateTokenEffect(new TreefolkShamanToken())); this.getSpellAbility().addEffect(new CreateTokenEffect(new TreefolkShamanToken()));
// Whenever a Forest enters the battlefield under your control, you may return Reach of Branches from your graveyard to your hand. // Whenever a Forest enters the battlefield under your control, you may return Reach of Branches from your graveyard to your hand.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToHandEffect(), filter, true, "", true)); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.GRAVEYARD,
new ReturnSourceFromGraveyardToHandEffect(), filter, true));
} }
private ReachOfBranches(final ReachOfBranches card) { private ReachOfBranches(final ReachOfBranches card) {

View file

@ -1,9 +1,8 @@
package mage.cards.r; package mage.cards.r;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.DamagePlayersEffect; import mage.abilities.effects.common.DamagePlayersEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -11,7 +10,7 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterControlledArtifactPermanent; import mage.filter.StaticFilters;
/** /**
* *
@ -27,9 +26,8 @@ public final class RecklessFireweaver extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// Whenever an artifact enters the battlefield under your control, Reckless Fireweaver deals 1 damage to each opponent. // Whenever an artifact enters the battlefield under your control, Reckless Fireweaver deals 1 damage to each opponent.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new DamagePlayersEffect(1, TargetController.OPPONENT), this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new DamagePlayersEffect(1, TargetController.OPPONENT),
new FilterControlledArtifactPermanent(), false, StaticFilters.FILTER_PERMANENT_ARTIFACT, false));
"Whenever an artifact enters the battlefield under your control, Reckless Fireweaver deals 1 damage to each opponent."));
} }
private RecklessFireweaver(final RecklessFireweaver card) { private RecklessFireweaver(final RecklessFireweaver card) {

Some files were not shown because too many files have changed in this diff Show more