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,
new DamageTargetEffect(2).setText("{this} deals 2 damage to it"),
StaticFilters.FILTER_PERMANENT_A_CREATURE,
false, SetTargetPointer.PERMANENT, null));
false, SetTargetPointer.PERMANENT));
}
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.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new AjanisChosenEffect(), filter,
false, SetTargetPointer.PERMANENT, null));
false, SetTargetPointer.PERMANENT));
}
private AjanisChosen(final AjanisChosen card) {

View file

@ -1,7 +1,7 @@
package mage.cards.a;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.MillCardsEachPlayerEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -27,8 +27,8 @@ public final class AltarOfTheBrood extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}");
// Whenever another permanent enters the battlefield under your control, each opponent mills a card.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD,
new MillCardsEachPlayerEffect(1, TargetController.OPPONENT), filter, false, null, true));
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
new MillCardsEachPlayerEffect(1, TargetController.OPPONENT), filter, false));
}
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,
// you may destroy target artifact or enchantment.
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
new DestroyTargetEffect(), StaticFilters.FILTER_PERMANENT_CREATURE, true,
"Whenever a creature enters the battlefield under your control, "
+ "you may destroy target artifact or enchantment");
new DestroyTargetEffect(), StaticFilters.FILTER_PERMANENT_CREATURE, true
);
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT));
this.addAbility(ability);
}

View file

@ -1,6 +1,6 @@
package mage.cards.a;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldOpponentTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.GainLifeEffect;
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)));
// Whenever a creature enters the battlefield under an opponent's control, you gain 1 life.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
new GainLifeEffect(1), StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES,
"Whenever a creature enters the battlefield under an opponent's control, you gain 1 life."
this.addAbility(new EntersBattlefieldOpponentTriggeredAbility(
new GainLifeEffect(1), StaticFilters.FILTER_PERMANENT_A_CREATURE, false
));
}

View file

@ -1,4 +1,3 @@
package mage.cards.b;
import java.util.UUID;
@ -29,12 +28,10 @@ import mage.game.permanent.token.Token;
*/
public final class BaruFistOfKrosa extends CardImpl {
private static final FilterLandPermanent forestFilter = new FilterLandPermanent("Forest");
private static final FilterCreaturePermanent greenCreatureFilter = new FilterCreaturePermanent("green creatures you control");
private static final FilterLandPermanent forestFilter = new FilterLandPermanent(SubType.FOREST, "a Forest");
private static final FilterCreaturePermanent greenCreatureFilter = new FilterCreaturePermanent("green creatures");
static {
forestFilter.add(SubType.FOREST.getPredicate());
greenCreatureFilter.add(TargetController.YOU.getControllerPredicate());
greenCreatureFilter.add(new ColorPredicate(ObjectColor.GREEN));
}
@ -47,8 +44,10 @@ public final class BaruFistOfKrosa extends CardImpl {
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.
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.addEffect(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, greenCreatureFilter));
Ability ability = new EntersBattlefieldAllTriggeredAbility(new BoostControlledEffect(1, 1, 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);
// 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;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.TapTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -37,7 +36,7 @@ public final class BindingMummy extends CardImpl {
this.toughness = new MageInt(2);
// 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));
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.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
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 {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("nontoken creature");
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another nontoken creature");
static {
filter.add(TokenPredicate.FALSE);
@ -45,9 +45,7 @@ public final class BrambleSovereign extends CardImpl {
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD,
new DoIfCostPaid(new BrambleSovereignEffect(), new ManaCostsImpl<>("{1}{G}")),
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."
filter, false, SetTargetPointer.PERMANENT
));
}
@ -65,7 +63,7 @@ class BrambleSovereignEffect extends OneShotEffect {
BrambleSovereignEffect() {
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) {

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}.
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.setText("and add {B}.");
ability.addEffect(effect);

View file

@ -4,7 +4,7 @@ import mage.MageInt;
import mage.MageObjectReference;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.effects.AsThoughEffectImpl;
@ -15,8 +15,7 @@ import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.util.CardUtil;
@ -127,7 +126,6 @@ class ChainerNightmareAdeptWatcher extends Watcher {
}
morMap.computeIfAbsent(event.getAdditionalReference().getApprovingMageObjectReference(), m -> new HashMap<>())
.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
= 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() {
super(Zone.BATTLEFIELD, gainHasteUntilNextTurnEffect, filter, false,
SetTargetPointer.PERMANENT, abilityText);
super(Zone.BATTLEFIELD, gainHasteUntilNextTurnEffect, StaticFilters.FILTER_CREATURE_NON_TOKEN, false,
SetTargetPointer.PERMANENT);
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) {
@ -188,11 +178,9 @@ class ChainerNightmareAdeptTriggeredAbility extends EntersBattlefieldAllTriggere
@Override
public boolean checkTrigger(GameEvent event, Game game) {
if (!super.checkTrigger(event, game)) {
return false;
CastFromHandWatcher watcher = game.getState().getWatcher(CastFromHandWatcher.class);
return watcher != null && !watcher.spellWasCastFromHand(event.getTargetId())
&& super.checkTrigger(event, game);
}
CastFromHandWatcher watcher = game.getState().getWatcher(CastFromHandWatcher.class);
return watcher != null && !watcher.spellWasCastFromHand(event.getTargetId());
}
}

View file

@ -2,7 +2,7 @@ package mage.cards.c;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.RestrictionEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
@ -10,8 +10,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.Permanent;
@ -22,13 +21,6 @@ import java.util.UUID;
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{G}");
this.subtype.add(SubType.HUMAN);
@ -41,8 +33,9 @@ public final class ChampionOfLambholt extends CardImpl {
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.
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) {

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.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new AttachEffect(Outcome.Detriment, "attach {this} to it"),
filter, true, SetTargetPointer.PERMANENT, null));
filter, true, SetTargetPointer.PERMANENT));
// Equip {3}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(3), new TargetControlledCreaturePermanent(), false));
}

View file

@ -1,7 +1,7 @@
package mage.cards.c;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -26,14 +26,13 @@ public final class CloudstoneCurio extends CardImpl {
static {
filter.add(Predicates.not(CardType.ARTIFACT.getPredicate()));
filter.add(TargetController.YOU.getControllerPredicate());
}
public CloudstoneCurio(UUID ownerId, CardSetInfo setInfo) {
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.
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.
this.addAbility(new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new ConfoundingConundrumEffect(), filter,
false, SetTargetPointer.PLAYER, ""
false, SetTargetPointer.PLAYER
), ConfoundingConundrumCondition.instance, "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."

View file

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

View file

@ -4,7 +4,7 @@ import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.TapTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -37,7 +37,7 @@ public final class CourtStreetDenizen extends CardImpl {
this.toughness = new MageInt(2);
// 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));
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.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new CreamOfTheCropEffect(),
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."));
StaticFilters.FILTER_PERMANENT_CREATURE, true, SetTargetPointer.PERMANENT
));
}
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.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
new CreateTokenEffect(new ZombieDecayedToken()),
filter, "Whenever a land enters the battlefield under enchanted player's control, " +
"you create a 2/2 black Zombie creature token with decayed."
));
new CreateTokenEffect(new ZombieDecayedToken()).setText("you create a 2/2 black Zombie creature token with decayed."),
filter
).setTriggerPhrase("Whenever a land enters the battlefield under enchanted player's control, "));
}
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.
// 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(),
StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PLAYER, "");
StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PLAYER);
ability.addTarget(new TargetCreaturePermanent());
ability.setTargetAdjuster(DeathMatchAdjuster.instance);
this.addAbility(ability);

View file

@ -1,4 +1,3 @@
package mage.cards.d;
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.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter,
"Whenever another Warrior enters the battlefield under your team's control,"
+ " put a +1/+1 counter on {this}"
));
new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter
).setTriggerPhrase("Whenever another Warrior enters the battlefield under your team's control, "));
}
private DecoratedChampion(final DecoratedChampion card) {

View file

@ -1,32 +1,28 @@
package mage.cards.d;
import java.util.UUID;
import mage.ObjectColor;
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.discard.DiscardTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.target.TargetPlayer;
import java.util.UUID;
/**
*
* @author jeffwadsworth
*/
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 String rule2 = "Whenever a black creature enters the battlefield under your control, you may have target player discard a card.";
private static final FilterControlledPermanent filterBlue = new FilterControlledCreaturePermanent();
private static final FilterControlledPermanent filterBlack = new FilterControlledCreaturePermanent();
private static final FilterCreaturePermanent filterBlue = new FilterCreaturePermanent("a blue creature");
private static final FilterCreaturePermanent filterBlack = new FilterCreaturePermanent("a black creature");
static {
filterBlue.add(new ColorPredicate(ObjectColor.BLUE));
@ -36,14 +32,14 @@ public final class DireUndercurrents extends CardImpl {
public DireUndercurrents(UUID ownerId, CardSetInfo setInfo) {
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.
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());
this.addAbility(ability);
// 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());
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.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new AttachEffect(Outcome.Detriment, "attach {this} to it"),
filter, true, SetTargetPointer.PERMANENT, null));
filter, true, SetTargetPointer.PERMANENT));
// Equip {3}
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)));
// 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) {

View file

@ -50,7 +50,7 @@ public final class DragonFangs extends CardImpl {
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.
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) {
@ -94,4 +94,3 @@ class DragonFangsEffect extends OneShotEffect {
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)));
// 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) {

View file

@ -50,7 +50,7 @@ public final class DragonShadow extends CardImpl {
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.
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) {

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.
Effect effect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn);
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.
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
@ -45,8 +45,7 @@ public final class DragonTempest extends CardImpl {
new DragonTempestDamageEffect(),
new FilterCreaturePermanent(SubType.DRAGON, "a Dragon"),
false,
SetTargetPointer.NONE,
""
SetTargetPointer.NONE
);
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);

View file

@ -52,7 +52,7 @@ public final class DragonWings extends CardImpl {
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.
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) {
@ -96,4 +96,3 @@ class DragonWingsEffect extends OneShotEffect {
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.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
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."
Zone.BATTLEFIELD, new DualNatureCreateTokenEffect(), filter, false, SetTargetPointer.PERMANENT
));
// 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"),
new GenericManaCost(1)
), 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.

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
// 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) {

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.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new DoIfCostPaid(new EmielTheBlessedEffect(), new ManaCostsImpl<>("{G/W}")),
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."
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT
));
}
@ -62,6 +60,7 @@ class EmielTheBlessedEffect extends OneShotEffect {
EmielTheBlessedEffect() {
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) {

View file

@ -33,7 +33,7 @@ public final class EssenceWarden extends CardImpl {
this.toughness = new MageInt(1);
// 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) {

View file

@ -1,10 +1,8 @@
package mage.cards.f;
import java.util.StringTokenizer;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldOpponentTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenCopyTargetEffect;
import mage.abilities.keyword.FlyingAbility;
@ -13,25 +11,20 @@ import mage.cards.CardSetInfo;
import mage.cards.Cards;
import mage.cards.CardsImpl;
import mage.constants.*;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.targetpointer.FixedTarget;
import java.util.StringTokenizer;
import java.util.UUID;
/**
* @author LevelX2
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
@ -44,8 +37,8 @@ public final class FaerieArtisans extends CardImpl {
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.
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new FaerieArtisansEffect(), filterNontoken, false, SetTargetPointer.PERMANENT,
"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}.");
Ability ability = new EntersBattlefieldOpponentTriggeredAbility(Zone.BATTLEFIELD,
new FaerieArtisansEffect(), StaticFilters.FILTER_CREATURE_NON_TOKEN, false, SetTargetPointer.PERMANENT);
this.addAbility(ability);
}

View file

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

View file

@ -1,4 +1,3 @@
package mage.cards.f;
import java.util.UUID;
@ -18,8 +17,6 @@ import mage.constants.Outcome;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.targetpointer.FixedTarget;
@ -34,12 +31,10 @@ public final class FlameshadowConjuring extends CardImpl {
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.
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new DoIfCostPaid(
new FlameshadowConjuringEffect(), new ManaCostsImpl<>("{R}"), "Pay {R} to create a token that's a copy of that creature that entered the battlefield?"),
StaticFilters.FILTER_CONTROLLED_CREATURE_NON_TOKEN, false, SetTargetPointer.PERMANENT,
"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(new FlameshadowConjuringEffect(), new ManaCostsImpl<>("{R}"),
"Pay {R} to create a token that's a copy of that creature that entered the battlefield?"),
StaticFilters.FILTER_CREATURE_NON_TOKEN, false, SetTargetPointer.PERMANENT);
this.addAbility(ability);
}

View file

@ -3,7 +3,7 @@ package mage.cards.f;
import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -36,7 +36,8 @@ public final class FoundryStreetDenizen extends CardImpl {
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.
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) {

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.
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"),
ruleTrigger2);
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.
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.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.MyrToken;
@ -30,7 +28,7 @@ public final class GenesisChamber extends CardImpl {
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.
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,
SourceUntappedCondition.instance,
"Whenever a nontoken creature enters the battlefield, "

View file

@ -1,4 +1,3 @@
package mage.cards.g;
import java.util.UUID;
@ -14,7 +13,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.TargetController;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterArtifactPermanent;
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");
static {
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(AnotherPredicate.instance);
}
@ -40,9 +37,8 @@ public final class GlassdustHulk extends CardImpl {
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.
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));
Ability ability = new EntersBattlefieldControlledTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn), filter);
ability.addEffect(new CantBeBlockedSourceEffect(Duration.EndOfTurn).setText("and can't be blocked this turn"));
this.addAbility(ability);
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);
// 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) {

View file

@ -1,9 +1,8 @@
package mage.cards.g;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -12,7 +11,7 @@ import mage.constants.SubType;
import mage.constants.ComparisonType;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.PowerPredicate;
/**
@ -21,26 +20,23 @@ import mage.filter.predicate.mageobject.PowerPredicate;
*/
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 {
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) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}{G}");
this.subtype.add(SubType.ELF);
this.subtype.add(SubType.SHAMAN);
this.power = 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.
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) {

View file

@ -1,9 +1,8 @@
package mage.cards.g;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -28,8 +27,8 @@ public final class GoldnightCommander extends CardImpl {
this.toughness = new MageInt(2);
// 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,
new BoostControlledEffect(1, 1, Duration.EndOfTurn), StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, null, true));
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
new BoostControlledEffect(1, 1, Duration.EndOfTurn), StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false));
}
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.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()),
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."
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT
));
}

View file

@ -26,7 +26,7 @@ public final class GravePeril extends CardImpl {
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.
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) {

View file

@ -1,9 +1,8 @@
package mage.cards.g;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
@ -31,8 +30,8 @@ public final class GriffinProtector extends CardImpl {
this.addAbility(FlyingAbility.getInstance());
// 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),
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, null, true));
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn),
StaticFilters.FILTER_ANOTHER_CREATURE, false));
}

View file

@ -39,11 +39,10 @@ public final class HalanaKessigRanger extends CardImpl {
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.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new DoIfCostPaid(new HalanaKessigRangerTriggerEffect(), new GenericManaCost(2)),
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT,
"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(Zone.BATTLEFIELD,
new DoIfCostPaid(new HalanaKessigRangerTriggerEffect(), new GenericManaCost(2))
.setText("you may pay {2}. When you do, that creature deals damage equal to its power to target creature."),
StaticFilters.FILTER_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT
));
// Partner

View file

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

View file

@ -1,8 +1,7 @@
package mage.cards.h;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.GenericManaCost;
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)));
// 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"),
filter, true, SetTargetPointer.PERMANENT, null, true));
filter, true, SetTargetPointer.PERMANENT));
// Equip {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.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD,
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));
new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter, false
));
}
private HungryDragonsnake(final HungryDragonsnake card) {

View file

@ -21,7 +21,7 @@ import java.util.UUID;
*/
public final class IcebergCancrix extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent();
private static final FilterPermanent filter = new FilterPermanent("another snow permanent");
static {
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.
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new MillCardsTargetEffect(2), filter,
true, "Whenever another snow permanent enters the battlefield under your control, " +
"you may have target player mill two cards."
Zone.BATTLEFIELD, new MillCardsTargetEffect(2), filter, true
);
ability.addTarget(new TargetPlayer());
this.addAbility(ability);

View file

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

View file

@ -15,7 +15,6 @@ import mage.constants.Duration;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
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.
Effect effect = new BoostTargetEffect(2,0, Duration.EndOfTurn);
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.setText("and gains haste until end of turn");
ability.addEffect(effect);

View file

@ -66,7 +66,7 @@ public final class InallaArchmageRitualist extends CardImpl {
Ability ability = new ConditionalInterveningIfTriggeredAbility(
new EntersBattlefieldControlledTriggeredAbility(Zone.ALL, new DoIfCostPaid(
new InallaArchmageRitualistEffect(), new ManaCostsImpl<>("{1}"), "Pay {1} to create a token copy?"),
filter, false, SetTargetPointer.PERMANENT, ""),
filter, false, SetTargetPointer.PERMANENT),
SourceOnBattlefieldOrCommandZoneCondition.instance,
"Whenever another nontoken Wizard enters the battlefield under your control, "
+ "{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.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new AttachEffect(Outcome.BoostCreature, "attach {this} to it"),
filter, true, SetTargetPointer.PERMANENT, null
filter, true, SetTargetPointer.PERMANENT
));
// Equip {2}

View file

@ -4,7 +4,7 @@ import java.util.UUID;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -38,10 +38,10 @@ public final class IvyLaneDenizen extends CardImpl {
this.toughness = new MageInt(3);
// 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,
new AddCountersTargetEffect(CounterType.P1P1.createInstance()),
filter, false, null, true);
filter, false);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}

View file

@ -13,8 +13,6 @@ import mage.constants.SubType;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import java.util.UUID;
@ -23,12 +21,6 @@ import java.util.UUID;
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{W}");
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.
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()),
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 and a +1/+1 counter on {this}."
StaticFilters.FILTER_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT
);
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);
}

View file

@ -17,6 +17,7 @@ import mage.constants.SubType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterNonlandPermanent;
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.
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
new TapTargetEffect(), filter, "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."
new TapTargetEffect(), StaticFilters.FILTER_PERMANENT_TOKEN
);
ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect());
ability.addTarget(new TargetPermanent(filter2));
ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect("It"));
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_NON_LAND));
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.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD,
new DrawCardTargetEffect(1), filter, false, SetTargetPointer.PLAYER,
"Whenever a creature with power 4 or greater enters the battlefield, its controller draws a card."));
new DrawCardTargetEffect(1).setText("its controller draws a card"),
filter, false, SetTargetPointer.PLAYER
));
}
private KavuLair(final KavuLair card) {

View file

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

View file

@ -31,7 +31,7 @@ public final class LethalVapors extends CardImpl {
Zone.BATTLEFIELD,
new DestroyTargetEffect().setText("destroy it"),
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.
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.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
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 mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeXTargetCost;
import mage.abilities.costs.common.TapSourceCost;
@ -12,8 +12,8 @@ import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.keyword.InvestigateEffect;
import mage.cards.*;
import mage.constants.*;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.common.FilterPermanentCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.AnotherPredicate;
@ -30,7 +30,7 @@ import mage.target.common.TargetOpponent;
*/
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");
static {
@ -49,7 +49,7 @@ public final class LonisCryptozoologist extends CardImpl {
this.toughness = new MageInt(2);
// 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.
// 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.
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) {

View file

@ -11,10 +11,8 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterCard;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
@ -26,11 +24,6 @@ import java.util.UUID;
public final class MaraudingRaptor extends CardImpl {
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) {
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.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new MaraudingRaptorEffect(),
filter2, 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."
StaticFilters.FILTER_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT
));
}
@ -66,6 +56,7 @@ class MaraudingRaptorEffect extends OneShotEffect {
MaraudingRaptorEffect() {
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) {

View file

@ -1,8 +1,7 @@
package mage.cards.m;
import java.util.UUID;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
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.
Effect effect = new AddCountersTargetEffect(CounterType.P1P1.createInstance(2));
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) {

View file

@ -21,7 +21,7 @@ import java.util.UUID;
*/
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 {
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.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new CreateTokenCopyTargetEffect(true).setIsntLegendary(true),
filter, false, SetTargetPointer.PERMANENT, "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."
Zone.BATTLEFIELD, new CreateTokenCopyTargetEffect(true).setIsntLegendary(true)
.setText("create a token that's a copy of it, except the token isn't legendary"),
filter, false, SetTargetPointer.PERMANENT
));
}

View file

@ -14,8 +14,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.targetpointer.FixedTarget;
@ -37,7 +35,7 @@ public final class MinionReflector extends CardImpl {
new MinionReflectorEffect(), new ManaCostsImpl<>("{2}"), "Pay {2} " +
"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.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.Game;
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.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new MirrorMarchEffect(), StaticFilters.FILTER_CREATURE_NON_TOKEN, false, SetTargetPointer.PERMANENT,
"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."
Zone.BATTLEFIELD, new MirrorMarchEffect(), StaticFilters.FILTER_CREATURE_NON_TOKEN,
false, SetTargetPointer.PERMANENT
));
}
@ -51,6 +45,9 @@ class MirrorMarchEffect extends OneShotEffect {
MirrorMarchEffect() {
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) {

View file

@ -37,7 +37,7 @@ public final class Mirrorworks extends CardImpl {
Effect effect = new DoIfCostPaid(new CreateTokenCopyTargetEffect(true),
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");
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) {

View file

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

View file

@ -42,10 +42,8 @@ public final class MoltenEchoes extends CardImpl {
filter.add(ChosenSubtypePredicate.TRUE);
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new MoltenEchoesEffect(),
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.");
filter, false, SetTargetPointer.PERMANENT
);
this.addAbility(ability);
}
@ -95,4 +93,3 @@ class MoltenEchoesEffect extends OneShotEffect {
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.
Ability ability = new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new SacrificeSourceEffect(), StaticFilters.FILTER_PERMANENT_A_CREATURE,
false, SetTargetPointer.PERMANENT, null
false, SetTargetPointer.PERMANENT
).setTriggerPhrase("When a creature enters the battlefield, ");
ability.addEffect(new MonkeyCageEffect());
this.addAbility(ability);

View file

@ -1,4 +1,3 @@
package mage.cards.n;
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.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD,
new SacrificeEffect(filterBlue, 1, ""),
new SacrificeEffect(filterBlue, 1, "that player"),
filterBlue,
false, SetTargetPointer.PLAYER,
"Whenever a player puts an Island or blue permanent onto the battlefield, they sacrifice an Island or blue permanent."));
false, SetTargetPointer.PLAYER
).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.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD,
new SacrificeEffect(filterBlack, 1, ""),
new SacrificeEffect(filterBlack, 1, "that player"),
filterBlack,
false, SetTargetPointer.PLAYER,
"Whenever a player puts a Swamp or black permanent onto the battlefield, they sacrifice a Swamp or black permanent."));
false, SetTargetPointer.PLAYER
).setTriggerPhrase("Whenever a player puts a Swamp or black permanent onto the battlefield, "));
}
private NaturesWrath(final NaturesWrath card) {

View file

@ -19,7 +19,7 @@ import java.util.UUID;
*/
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 {
filter.add(TokenPredicate.FALSE);
@ -29,11 +29,9 @@ public final class Necroduality extends CardImpl {
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.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new CreateTokenCopyTargetEffect(true), filter, false,
SetTargetPointer.PERMANENT, "Whenever a nontoken Zombie enters the battlefield " +
"under your control, create a token that's a copy of that creature."
));
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
new CreateTokenCopyTargetEffect(true).setText("create a token that's a copy of that creature"),
filter, false, SetTargetPointer.PERMANENT));
}
private Necroduality(final Necroduality card) {

View file

@ -2,14 +2,14 @@ package mage.cards.n;
import mage.MageInt;
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.counter.AddCountersSourceEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.counters.CounterType;
import mage.filter.common.FilterLandPermanent;
import mage.filter.StaticFilters;
import java.util.UUID;
@ -18,12 +18,6 @@ import java.util.UUID;
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
@ -33,10 +27,9 @@ public final class NightshadeHarvester extends CardImpl {
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.
Ability ability = new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new LoseLifeTargetEffect(1), filter, false,
SetTargetPointer.PLAYER, "Whenever a land enters the battlefield under an opponent's control, " +
"that player loses 1 life. Put a +1/+1 counter on {this}."
Ability ability = new EntersBattlefieldOpponentTriggeredAbility(
Zone.BATTLEFIELD, new LoseLifeTargetEffect(1), StaticFilters.FILTER_LAND_A, false,
SetTargetPointer.PLAYER
);
ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance()));
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.
this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility(new BoostAllEffect(
-1, -1, Duration.EndOfTurn, filter, false
), filter2));
), filter2, false, false));
}
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.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new AttachEffect(Outcome.Detriment, "attach {this} to it"),
filter, true, SetTargetPointer.PERMANENT, null));
filter, true, SetTargetPointer.PERMANENT));
// Equip {3}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(3), new TargetControlledCreaturePermanent(), false));
}

View file

@ -1,23 +1,17 @@
package mage.cards.o;
import java.util.UUID;
import mage.MageInt;
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.GainAbilityTargetEffect;
import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.SetTargetPointer;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.constants.*;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
*
@ -25,15 +19,6 @@ import mage.filter.predicate.mageobject.AnotherPredicate;
*/
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) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}");
this.subtype.add(SubType.OGRE);
@ -43,8 +28,11 @@ public final class OgreBattledriver extends CardImpl {
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.
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new BoostTargetEffect(2, 0, Duration.EndOfTurn), filter, false, SetTargetPointer.PERMANENT, rule, true);
ability.addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn));
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
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);
}

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");
doIfCostPaid.addEffect(effect);
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) {

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.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
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, "));
}

View file

@ -36,7 +36,7 @@ public final class OrchardWarden extends CardImpl {
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.
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) {

View file

@ -1,13 +1,12 @@
package mage.cards.o;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterArtifactPermanent;
import mage.filter.StaticFilters;
import java.util.UUID;
@ -16,12 +15,6 @@ import java.util.UUID;
*/
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) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
this.subtype.add(SubType.HUMAN);
@ -30,9 +23,9 @@ public final class OvalchaseDaredevil extends CardImpl {
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.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.GRAVEYARD, new ReturnSourceFromGraveyardToHandEffect(), filter,
true, SetTargetPointer.NONE, null, true
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.GRAVEYARD, new ReturnSourceFromGraveyardToHandEffect(), StaticFilters.FILTER_PERMANENT_ARTIFACT,
true, SetTargetPointer.NONE
));
}

View file

@ -1,4 +1,3 @@
package mage.cards.o;
import java.util.UUID;
@ -11,8 +10,6 @@ import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.StaticFilters;
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),
StaticFilters.FILTER_CREATURE_NON_TOKEN,
false,
SetTargetPointer.PLAYER,
"Whenever a player puts a nontoken creature onto the battlefield,"
+ " that player returns a land they control to its owner's hand."));
SetTargetPointer.PLAYER
).setTriggerPhrase("Whenever a player puts a nontoken creature onto the battlefield, "));
}
private Overburden(final Overburden card) {

View file

@ -40,7 +40,7 @@ public final class Paleoloth extends CardImpl {
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.
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));
this.addAbility(ability);

View file

@ -30,7 +30,7 @@ public final class Pandemonium extends CardImpl {
Ability ability = new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new PandemoniumEffect(),
StaticFilters.FILTER_PERMANENT_A_CREATURE,
false, SetTargetPointer.PERMANENT, ""
false, SetTargetPointer.PERMANENT
);
ability.addTarget(new TargetAnyTarget());
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.)
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
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;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.EntersBattlefieldThisOrAnotherTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.costs.common.TapSourceCost;
@ -18,18 +15,18 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/**
* @author fireshoes
*/
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");
static {
@ -46,7 +43,8 @@ public final class PiousEvangel extends CardImpl {
this.secondSideCardClazz = mage.cards.w.WaywardDisciple.class;
// 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.
this.addAbility(new TransformAbility());

View file

@ -1,4 +1,3 @@
package mage.cards.p;
import java.util.UUID;
@ -25,8 +24,6 @@ public final class PoisonbellyOgre extends CardImpl {
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) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}");
this.subtype.add(SubType.OGRE);
@ -35,8 +32,9 @@ public final class PoisonbellyOgre extends CardImpl {
this.toughness = new MageInt(3);
// 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) {

View file

@ -1,44 +1,30 @@
package mage.cards.p;
import java.util.UUID;
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.LoseLifeTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SetTargetPointer;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterLandPermanent;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
*
* @author jeffwadsworth
*
*/
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) {
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.
Ability ability = new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD,
new LoseLifeTargetEffect(2),
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));
Ability ability = new EntersBattlefieldOpponentTriggeredAbility(Zone.BATTLEFIELD,
new LoseLifeTargetEffect(2), StaticFilters.FILTER_LAND_A, false, SetTargetPointer.PLAYER);
ability.addEffect(new GainLifeEffect(2).concatBy("and"));
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 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(),
StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT, rule);
StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT);
MoreThanXCreaturesOnBFCondition condition = new MoreThanXCreaturesOnBFCondition(2);
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, condition, rule + rule2));

View file

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

View file

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

View file

@ -1,9 +1,8 @@
package mage.cards.p;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldOpponentTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.AttachEffect;
@ -18,6 +17,7 @@ import mage.constants.SetTargetPointer;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game;
import mage.game.permanent.Permanent;
@ -53,8 +53,8 @@ public final class PrisonTerm extends CardImpl {
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.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
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."));
this.addAbility(new EntersBattlefieldOpponentTriggeredAbility(
Zone.BATTLEFIELD, new PrisonTermEffect(), StaticFilters.FILTER_PERMANENT_A_CREATURE, true, SetTargetPointer.PERMANENT));
}
private PrisonTerm(final PrisonTerm card) {
@ -69,8 +69,9 @@ public final class PrisonTerm extends CardImpl {
class PrisonTermEffect extends OneShotEffect {
public PrisonTermEffect() {
PrisonTermEffect() {
super(Outcome.Detriment);
staticText = "attach {this} to that creature";
}
private PrisonTermEffect(final PrisonTermEffect effect) {

View file

@ -1,7 +1,7 @@
package mage.cards.q;
import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
@ -10,7 +10,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.common.FilterControlledArtifactPermanent;
import mage.filter.StaticFilters;
import java.util.UUID;
@ -27,8 +27,9 @@ public final class QuicksmithGenius extends CardImpl {
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.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new DiscardCardCost()), new FilterControlledArtifactPermanent("an artifact"), false, null, true));
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new DiscardCardCost()),
StaticFilters.FILTER_PERMANENT_ARTIFACT, false));
}
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.
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) {

View file

@ -1,15 +1,13 @@
package mage.cards.r;
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.ReturnSourceFromGraveyardToHandEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterLandPermanent;
import mage.game.permanent.token.TreefolkShamanToken;
@ -20,12 +18,7 @@ import mage.game.permanent.token.TreefolkShamanToken;
*/
public final class ReachOfBranches extends CardImpl {
private static final FilterLandPermanent filter = new FilterLandPermanent("a Forest");
static {
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(SubType.FOREST.getPredicate());
}
private static final FilterLandPermanent filter = new FilterLandPermanent(SubType.FOREST, "a Forest");
public ReachOfBranches(UUID ownerId, CardSetInfo setInfo) {
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.
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.
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) {

View file

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

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