diff --git a/Mage.Sets/src/mage/cards/a/AetherFlash.java b/Mage.Sets/src/mage/cards/a/AetherFlash.java
index 089c5bb6912..31f57440cbf 100644
--- a/Mage.Sets/src/mage/cards/a/AetherFlash.java
+++ b/Mage.Sets/src/mage/cards/a/AetherFlash.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/a/AjanisChosen.java b/Mage.Sets/src/mage/cards/a/AjanisChosen.java
index 01839811448..23340adfc18 100644
--- a/Mage.Sets/src/mage/cards/a/AjanisChosen.java
+++ b/Mage.Sets/src/mage/cards/a/AjanisChosen.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/a/AltarOfTheBrood.java b/Mage.Sets/src/mage/cards/a/AltarOfTheBrood.java
index 5353f2b626a..ae95e39f1ed 100644
--- a/Mage.Sets/src/mage/cards/a/AltarOfTheBrood.java
+++ b/Mage.Sets/src/mage/cards/a/AltarOfTheBrood.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/a/AuraShards.java b/Mage.Sets/src/mage/cards/a/AuraShards.java
index 82056033ce7..953e45c7265 100644
--- a/Mage.Sets/src/mage/cards/a/AuraShards.java
+++ b/Mage.Sets/src/mage/cards/a/AuraShards.java
@@ -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);
}
diff --git a/Mage.Sets/src/mage/cards/a/AuthorityOfTheConsuls.java b/Mage.Sets/src/mage/cards/a/AuthorityOfTheConsuls.java
index 505feb03a18..57be546d8bf 100644
--- a/Mage.Sets/src/mage/cards/a/AuthorityOfTheConsuls.java
+++ b/Mage.Sets/src/mage/cards/a/AuthorityOfTheConsuls.java
@@ -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
));
}
diff --git a/Mage.Sets/src/mage/cards/b/BaruFistOfKrosa.java b/Mage.Sets/src/mage/cards/b/BaruFistOfKrosa.java
index 510d5272714..c44ad5aa49d 100644
--- a/Mage.Sets/src/mage/cards/b/BaruFistOfKrosa.java
+++ b/Mage.Sets/src/mage/cards/b/BaruFistOfKrosa.java
@@ -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.
diff --git a/Mage.Sets/src/mage/cards/b/BindingMummy.java b/Mage.Sets/src/mage/cards/b/BindingMummy.java
index c9ef6c8b18a..3bfd286b6d0 100644
--- a/Mage.Sets/src/mage/cards/b/BindingMummy.java
+++ b/Mage.Sets/src/mage/cards/b/BindingMummy.java
@@ -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);
}
diff --git a/Mage.Sets/src/mage/cards/b/BrainstealerDragon.java b/Mage.Sets/src/mage/cards/b/BrainstealerDragon.java
index 721b3e171db..a979328ed7a 100644
--- a/Mage.Sets/src/mage/cards/b/BrainstealerDragon.java
+++ b/Mage.Sets/src/mage/cards/b/BrainstealerDragon.java
@@ -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
));
}
diff --git a/Mage.Sets/src/mage/cards/b/BrambleSovereign.java b/Mage.Sets/src/mage/cards/b/BrambleSovereign.java
index 0f3692f7d2a..82802cf07b6 100644
--- a/Mage.Sets/src/mage/cards/b/BrambleSovereign.java
+++ b/Mage.Sets/src/mage/cards/b/BrambleSovereign.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/c/CarnivalOfSouls.java b/Mage.Sets/src/mage/cards/c/CarnivalOfSouls.java
index df31f1d6e26..04ceef3cdf3 100644
--- a/Mage.Sets/src/mage/cards/c/CarnivalOfSouls.java
+++ b/Mage.Sets/src/mage/cards/c/CarnivalOfSouls.java
@@ -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);
diff --git a/Mage.Sets/src/mage/cards/c/ChainerNightmareAdept.java b/Mage.Sets/src/mage/cards/c/ChainerNightmareAdept.java
index 2faa3d47b01..f789b25528c 100644
--- a/Mage.Sets/src/mage/cards/c/ChainerNightmareAdept.java
+++ b/Mage.Sets/src/mage/cards/c/ChainerNightmareAdept.java
@@ -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());
+ return watcher != null && !watcher.spellWasCastFromHand(event.getTargetId())
+ && super.checkTrigger(event, game);
}
+
}
diff --git a/Mage.Sets/src/mage/cards/c/ChampionOfLambholt.java b/Mage.Sets/src/mage/cards/c/ChampionOfLambholt.java
index 95a51cbd631..8b839d33380 100644
--- a/Mage.Sets/src/mage/cards/c/ChampionOfLambholt.java
+++ b/Mage.Sets/src/mage/cards/c/ChampionOfLambholt.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/c/CloakAndDagger.java b/Mage.Sets/src/mage/cards/c/CloakAndDagger.java
index e6891bdf7f2..2b30e60cfc7 100644
--- a/Mage.Sets/src/mage/cards/c/CloakAndDagger.java
+++ b/Mage.Sets/src/mage/cards/c/CloakAndDagger.java
@@ -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));
}
diff --git a/Mage.Sets/src/mage/cards/c/CloudstoneCurio.java b/Mage.Sets/src/mage/cards/c/CloudstoneCurio.java
index adffb3960e9..9a728c33b86 100644
--- a/Mage.Sets/src/mage/cards/c/CloudstoneCurio.java
+++ b/Mage.Sets/src/mage/cards/c/CloudstoneCurio.java
@@ -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));
}
diff --git a/Mage.Sets/src/mage/cards/c/ConfoundingConundrum.java b/Mage.Sets/src/mage/cards/c/ConfoundingConundrum.java
index b8bf0b977d5..ced9f3a7ff4 100644
--- a/Mage.Sets/src/mage/cards/c/ConfoundingConundrum.java
+++ b/Mage.Sets/src/mage/cards/c/ConfoundingConundrum.java
@@ -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."
diff --git a/Mage.Sets/src/mage/cards/c/ConfusionInTheRanks.java b/Mage.Sets/src/mage/cards/c/ConfusionInTheRanks.java
index 0ce70db5687..49fd99a41d9 100644
--- a/Mage.Sets/src/mage/cards/c/ConfusionInTheRanks.java
+++ b/Mage.Sets/src/mage/cards/c/ConfusionInTheRanks.java
@@ -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);
diff --git a/Mage.Sets/src/mage/cards/c/CourtStreetDenizen.java b/Mage.Sets/src/mage/cards/c/CourtStreetDenizen.java
index cd528de8ece..6ad8b7e4b0f 100644
--- a/Mage.Sets/src/mage/cards/c/CourtStreetDenizen.java
+++ b/Mage.Sets/src/mage/cards/c/CourtStreetDenizen.java
@@ -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);
}
diff --git a/Mage.Sets/src/mage/cards/c/CreamOfTheCrop.java b/Mage.Sets/src/mage/cards/c/CreamOfTheCrop.java
index bd0acf3e318..2a4c744143b 100644
--- a/Mage.Sets/src/mage/cards/c/CreamOfTheCrop.java
+++ b/Mage.Sets/src/mage/cards/c/CreamOfTheCrop.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/c/CurseOfTheRestlessDead.java b/Mage.Sets/src/mage/cards/c/CurseOfTheRestlessDead.java
index 6d3746e0bbf..2d2448eded7 100644
--- a/Mage.Sets/src/mage/cards/c/CurseOfTheRestlessDead.java
+++ b/Mage.Sets/src/mage/cards/c/CurseOfTheRestlessDead.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/d/DeathMatch.java b/Mage.Sets/src/mage/cards/d/DeathMatch.java
index aac3287254c..8593bf2cf3a 100644
--- a/Mage.Sets/src/mage/cards/d/DeathMatch.java
+++ b/Mage.Sets/src/mage/cards/d/DeathMatch.java
@@ -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);
diff --git a/Mage.Sets/src/mage/cards/d/DecoratedChampion.java b/Mage.Sets/src/mage/cards/d/DecoratedChampion.java
index c0b14f601f5..95b119392f5 100644
--- a/Mage.Sets/src/mage/cards/d/DecoratedChampion.java
+++ b/Mage.Sets/src/mage/cards/d/DecoratedChampion.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/d/DireUndercurrents.java b/Mage.Sets/src/mage/cards/d/DireUndercurrents.java
index 4f2180f11be..6de961e0e55 100644
--- a/Mage.Sets/src/mage/cards/d/DireUndercurrents.java
+++ b/Mage.Sets/src/mage/cards/d/DireUndercurrents.java
@@ -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);
diff --git a/Mage.Sets/src/mage/cards/d/DivinersWand.java b/Mage.Sets/src/mage/cards/d/DivinersWand.java
index 109ca960617..4be82f95d10 100644
--- a/Mage.Sets/src/mage/cards/d/DivinersWand.java
+++ b/Mage.Sets/src/mage/cards/d/DivinersWand.java
@@ -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));
diff --git a/Mage.Sets/src/mage/cards/d/DragonBreath.java b/Mage.Sets/src/mage/cards/d/DragonBreath.java
index dbee2e55c1c..a80cd72f37a 100644
--- a/Mage.Sets/src/mage/cards/d/DragonBreath.java
+++ b/Mage.Sets/src/mage/cards/d/DragonBreath.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/d/DragonFangs.java b/Mage.Sets/src/mage/cards/d/DragonFangs.java
index 7f4a158bbaa..21fc5f98653 100644
--- a/Mage.Sets/src/mage/cards/d/DragonFangs.java
+++ b/Mage.Sets/src/mage/cards/d/DragonFangs.java
@@ -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;
}
}
-
diff --git a/Mage.Sets/src/mage/cards/d/DragonScales.java b/Mage.Sets/src/mage/cards/d/DragonScales.java
index 5ab2a65a75b..a61065ce8e4 100644
--- a/Mage.Sets/src/mage/cards/d/DragonScales.java
+++ b/Mage.Sets/src/mage/cards/d/DragonScales.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/d/DragonShadow.java b/Mage.Sets/src/mage/cards/d/DragonShadow.java
index e28e7822b23..28b42a6864c 100644
--- a/Mage.Sets/src/mage/cards/d/DragonShadow.java
+++ b/Mage.Sets/src/mage/cards/d/DragonShadow.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/d/DragonTempest.java b/Mage.Sets/src/mage/cards/d/DragonTempest.java
index 30b2bb7e7c4..0a091cba5b1 100644
--- a/Mage.Sets/src/mage/cards/d/DragonTempest.java
+++ b/Mage.Sets/src/mage/cards/d/DragonTempest.java
@@ -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);
diff --git a/Mage.Sets/src/mage/cards/d/DragonWings.java b/Mage.Sets/src/mage/cards/d/DragonWings.java
index 12b0ace69a2..35795e6a119 100644
--- a/Mage.Sets/src/mage/cards/d/DragonWings.java
+++ b/Mage.Sets/src/mage/cards/d/DragonWings.java
@@ -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;
}
}
-
diff --git a/Mage.Sets/src/mage/cards/d/DualNature.java b/Mage.Sets/src/mage/cards/d/DualNature.java
index b07a95169a6..f43406eb629 100644
--- a/Mage.Sets/src/mage/cards/d/DualNature.java
+++ b/Mage.Sets/src/mage/cards/d/DualNature.java
@@ -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.
diff --git a/Mage.Sets/src/mage/cards/d/DurableHandicraft.java b/Mage.Sets/src/mage/cards/d/DurableHandicraft.java
index 1ea08e05aff..5bea30313b6 100644
--- a/Mage.Sets/src/mage/cards/d/DurableHandicraft.java
+++ b/Mage.Sets/src/mage/cards/d/DurableHandicraft.java
@@ -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.
diff --git a/Mage.Sets/src/mage/cards/e/EldraziMimic.java b/Mage.Sets/src/mage/cards/e/EldraziMimic.java
index 31a9ee878bc..e659d7e5b15 100644
--- a/Mage.Sets/src/mage/cards/e/EldraziMimic.java
+++ b/Mage.Sets/src/mage/cards/e/EldraziMimic.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/e/EmielTheBlessed.java b/Mage.Sets/src/mage/cards/e/EmielTheBlessed.java
index 899d12582f7..49b2dd597df 100644
--- a/Mage.Sets/src/mage/cards/e/EmielTheBlessed.java
+++ b/Mage.Sets/src/mage/cards/e/EmielTheBlessed.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/e/EssenceWarden.java b/Mage.Sets/src/mage/cards/e/EssenceWarden.java
index 4695f837325..9e3fba1c2a0 100644
--- a/Mage.Sets/src/mage/cards/e/EssenceWarden.java
+++ b/Mage.Sets/src/mage/cards/e/EssenceWarden.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/f/FaerieArtisans.java b/Mage.Sets/src/mage/cards/f/FaerieArtisans.java
index 712ad3c610e..667d7b1f983 100644
--- a/Mage.Sets/src/mage/cards/f/FaerieArtisans.java
+++ b/Mage.Sets/src/mage/cards/f/FaerieArtisans.java
@@ -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);
}
diff --git a/Mage.Sets/src/mage/cards/f/FlameKinWarScout.java b/Mage.Sets/src/mage/cards/f/FlameKinWarScout.java
index 6c1046b0115..11ba2ab376b 100644
--- a/Mage.Sets/src/mage/cards/f/FlameKinWarScout.java
+++ b/Mage.Sets/src/mage/cards/f/FlameKinWarScout.java
@@ -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
));
}
diff --git a/Mage.Sets/src/mage/cards/f/FlameshadowConjuring.java b/Mage.Sets/src/mage/cards/f/FlameshadowConjuring.java
index c0c5e9d2b4c..a6de2903cbe 100644
--- a/Mage.Sets/src/mage/cards/f/FlameshadowConjuring.java
+++ b/Mage.Sets/src/mage/cards/f/FlameshadowConjuring.java
@@ -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);
}
diff --git a/Mage.Sets/src/mage/cards/f/FoundryStreetDenizen.java b/Mage.Sets/src/mage/cards/f/FoundryStreetDenizen.java
index b8e08a8265c..ce1316c104f 100644
--- a/Mage.Sets/src/mage/cards/f/FoundryStreetDenizen.java
+++ b/Mage.Sets/src/mage/cards/f/FoundryStreetDenizen.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/f/FrontierSiege.java b/Mage.Sets/src/mage/cards/f/FrontierSiege.java
index 1b873be84da..d489208aeb2 100644
--- a/Mage.Sets/src/mage/cards/f/FrontierSiege.java
+++ b/Mage.Sets/src/mage/cards/f/FrontierSiege.java
@@ -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));
diff --git a/Mage.Sets/src/mage/cards/g/GamorreanPrisonGuard.java b/Mage.Sets/src/mage/cards/g/GamorreanPrisonGuard.java
index 8290f3ce347..dfb0afb3c88 100644
--- a/Mage.Sets/src/mage/cards/g/GamorreanPrisonGuard.java
+++ b/Mage.Sets/src/mage/cards/g/GamorreanPrisonGuard.java
@@ -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));
}
diff --git a/Mage.Sets/src/mage/cards/g/GenesisChamber.java b/Mage.Sets/src/mage/cards/g/GenesisChamber.java
index 65114a74a0c..ee632e42c8b 100644
--- a/Mage.Sets/src/mage/cards/g/GenesisChamber.java
+++ b/Mage.Sets/src/mage/cards/g/GenesisChamber.java
@@ -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, "
diff --git a/Mage.Sets/src/mage/cards/g/GlassdustHulk.java b/Mage.Sets/src/mage/cards/g/GlassdustHulk.java
index f60213c79c7..4baa8e6d8e0 100644
--- a/Mage.Sets/src/mage/cards/g/GlassdustHulk.java
+++ b/Mage.Sets/src/mage/cards/g/GlassdustHulk.java
@@ -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}")));
diff --git a/Mage.Sets/src/mage/cards/g/GoblinAssassin.java b/Mage.Sets/src/mage/cards/g/GoblinAssassin.java
index bbcac83dde6..15577a263f3 100644
--- a/Mage.Sets/src/mage/cards/g/GoblinAssassin.java
+++ b/Mage.Sets/src/mage/cards/g/GoblinAssassin.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/g/GodtrackerOfJund.java b/Mage.Sets/src/mage/cards/g/GodtrackerOfJund.java
index 93561bd5dbe..c23432679cf 100644
--- a/Mage.Sets/src/mage/cards/g/GodtrackerOfJund.java
+++ b/Mage.Sets/src/mage/cards/g/GodtrackerOfJund.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/g/GoldnightCommander.java b/Mage.Sets/src/mage/cards/g/GoldnightCommander.java
index 40828048848..a494e46f10b 100644
--- a/Mage.Sets/src/mage/cards/g/GoldnightCommander.java
+++ b/Mage.Sets/src/mage/cards/g/GoldnightCommander.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/g/GoodFortuneUnicorn.java b/Mage.Sets/src/mage/cards/g/GoodFortuneUnicorn.java
index e9ce719adb3..48a8a8dd4f3 100644
--- a/Mage.Sets/src/mage/cards/g/GoodFortuneUnicorn.java
+++ b/Mage.Sets/src/mage/cards/g/GoodFortuneUnicorn.java
@@ -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
));
}
diff --git a/Mage.Sets/src/mage/cards/g/GravePeril.java b/Mage.Sets/src/mage/cards/g/GravePeril.java
index 8835ca56f47..2f6c1dba1b6 100644
--- a/Mage.Sets/src/mage/cards/g/GravePeril.java
+++ b/Mage.Sets/src/mage/cards/g/GravePeril.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/g/GriffinProtector.java b/Mage.Sets/src/mage/cards/g/GriffinProtector.java
index 50a48d2ae85..70cc929fc09 100644
--- a/Mage.Sets/src/mage/cards/g/GriffinProtector.java
+++ b/Mage.Sets/src/mage/cards/g/GriffinProtector.java
@@ -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));
}
diff --git a/Mage.Sets/src/mage/cards/h/HalanaKessigRanger.java b/Mage.Sets/src/mage/cards/h/HalanaKessigRanger.java
index 6074d500343..0621a1d8573 100644
--- a/Mage.Sets/src/mage/cards/h/HalanaKessigRanger.java
+++ b/Mage.Sets/src/mage/cards/h/HalanaKessigRanger.java
@@ -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
diff --git a/Mage.Sets/src/mage/cards/h/HealerOfThePride.java b/Mage.Sets/src/mage/cards/h/HealerOfThePride.java
index 59d8340e2d5..04c457cf4b7 100644
--- a/Mage.Sets/src/mage/cards/h/HealerOfThePride.java
+++ b/Mage.Sets/src/mage/cards/h/HealerOfThePride.java
@@ -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));
}
diff --git a/Mage.Sets/src/mage/cards/h/HerosBlade.java b/Mage.Sets/src/mage/cards/h/HerosBlade.java
index e84590068de..2f985a064fd 100644
--- a/Mage.Sets/src/mage/cards/h/HerosBlade.java
+++ b/Mage.Sets/src/mage/cards/h/HerosBlade.java
@@ -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)));
diff --git a/Mage.Sets/src/mage/cards/h/HungryDragonsnake.java b/Mage.Sets/src/mage/cards/h/HungryDragonsnake.java
index 5082da0c62e..c033b897167 100644
--- a/Mage.Sets/src/mage/cards/h/HungryDragonsnake.java
+++ b/Mage.Sets/src/mage/cards/h/HungryDragonsnake.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/i/IcebergCancrix.java b/Mage.Sets/src/mage/cards/i/IcebergCancrix.java
index da7610aa5c0..1386deb6bce 100644
--- a/Mage.Sets/src/mage/cards/i/IcebergCancrix.java
+++ b/Mage.Sets/src/mage/cards/i/IcebergCancrix.java
@@ -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);
diff --git a/Mage.Sets/src/mage/cards/i/IllusoryGains.java b/Mage.Sets/src/mage/cards/i/IllusoryGains.java
index 4ab932eb459..31f2cb32a60 100644
--- a/Mage.Sets/src/mage/cards/i/IllusoryGains.java
+++ b/Mage.Sets/src/mage/cards/i/IllusoryGains.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/i/InTheWebOfWar.java b/Mage.Sets/src/mage/cards/i/InTheWebOfWar.java
index 6a22ece41d2..9a1d11d89c1 100644
--- a/Mage.Sets/src/mage/cards/i/InTheWebOfWar.java
+++ b/Mage.Sets/src/mage/cards/i/InTheWebOfWar.java
@@ -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);
diff --git a/Mage.Sets/src/mage/cards/i/InallaArchmageRitualist.java b/Mage.Sets/src/mage/cards/i/InallaArchmageRitualist.java
index abf48230b04..2dab6172b89 100644
--- a/Mage.Sets/src/mage/cards/i/InallaArchmageRitualist.java
+++ b/Mage.Sets/src/mage/cards/i/InallaArchmageRitualist.java
@@ -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, "
diff --git a/Mage.Sets/src/mage/cards/i/InventorsGoggles.java b/Mage.Sets/src/mage/cards/i/InventorsGoggles.java
index 345b171287c..f616ec7f425 100644
--- a/Mage.Sets/src/mage/cards/i/InventorsGoggles.java
+++ b/Mage.Sets/src/mage/cards/i/InventorsGoggles.java
@@ -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}
diff --git a/Mage.Sets/src/mage/cards/i/IvyLaneDenizen.java b/Mage.Sets/src/mage/cards/i/IvyLaneDenizen.java
index 369ebb50b8b..d92fdf2e8b1 100644
--- a/Mage.Sets/src/mage/cards/i/IvyLaneDenizen.java
+++ b/Mage.Sets/src/mage/cards/i/IvyLaneDenizen.java
@@ -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);
}
diff --git a/Mage.Sets/src/mage/cards/j/JuniperOrderRanger.java b/Mage.Sets/src/mage/cards/j/JuniperOrderRanger.java
index 8cde404161e..b8807351357 100644
--- a/Mage.Sets/src/mage/cards/j/JuniperOrderRanger.java
+++ b/Mage.Sets/src/mage/cards/j/JuniperOrderRanger.java
@@ -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);
}
diff --git a/Mage.Sets/src/mage/cards/j/JunkWinder.java b/Mage.Sets/src/mage/cards/j/JunkWinder.java
index aca56968a4c..3a87ca2b8b5 100644
--- a/Mage.Sets/src/mage/cards/j/JunkWinder.java
+++ b/Mage.Sets/src/mage/cards/j/JunkWinder.java
@@ -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);
}
diff --git a/Mage.Sets/src/mage/cards/k/KavuLair.java b/Mage.Sets/src/mage/cards/k/KavuLair.java
index 8199d5ee8ac..1598a4891cc 100644
--- a/Mage.Sets/src/mage/cards/k/KavuLair.java
+++ b/Mage.Sets/src/mage/cards/k/KavuLair.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/k/KruinStriker.java b/Mage.Sets/src/mage/cards/k/KruinStriker.java
index 9e6207ac02e..4641dd8f2f3 100644
--- a/Mage.Sets/src/mage/cards/k/KruinStriker.java
+++ b/Mage.Sets/src/mage/cards/k/KruinStriker.java
@@ -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);
}
diff --git a/Mage.Sets/src/mage/cards/l/LethalVapors.java b/Mage.Sets/src/mage/cards/l/LethalVapors.java
index 9c69bf2f7b5..0d71438ce62 100644
--- a/Mage.Sets/src/mage/cards/l/LethalVapors.java
+++ b/Mage.Sets/src/mage/cards/l/LethalVapors.java
@@ -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}"));
diff --git a/Mage.Sets/src/mage/cards/l/LlanowarStalker.java b/Mage.Sets/src/mage/cards/l/LlanowarStalker.java
index b7a3802c16e..f495f888ff8 100644
--- a/Mage.Sets/src/mage/cards/l/LlanowarStalker.java
+++ b/Mage.Sets/src/mage/cards/l/LlanowarStalker.java
@@ -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
));
}
diff --git a/Mage.Sets/src/mage/cards/l/LonisCryptozoologist.java b/Mage.Sets/src/mage/cards/l/LonisCryptozoologist.java
index 7d263ce5d75..df5253de8f1 100644
--- a/Mage.Sets/src/mage/cards/l/LonisCryptozoologist.java
+++ b/Mage.Sets/src/mage/cards/l/LonisCryptozoologist.java
@@ -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.
diff --git a/Mage.Sets/src/mage/cards/m/ManaEchoes.java b/Mage.Sets/src/mage/cards/m/ManaEchoes.java
index cdfbe7f3217..589565447fb 100644
--- a/Mage.Sets/src/mage/cards/m/ManaEchoes.java
+++ b/Mage.Sets/src/mage/cards/m/ManaEchoes.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/m/MaraudingRaptor.java b/Mage.Sets/src/mage/cards/m/MaraudingRaptor.java
index e73ec6b6505..34eb561ec33 100644
--- a/Mage.Sets/src/mage/cards/m/MaraudingRaptor.java
+++ b/Mage.Sets/src/mage/cards/m/MaraudingRaptor.java
@@ -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) {
@@ -88,4 +79,4 @@ class MaraudingRaptorEffect extends OneShotEffect {
}
return true;
}
-}
\ No newline at end of file
+}
diff --git a/Mage.Sets/src/mage/cards/m/MightyEmergence.java b/Mage.Sets/src/mage/cards/m/MightyEmergence.java
index 723cedaa30d..2be5bec6dcc 100644
--- a/Mage.Sets/src/mage/cards/m/MightyEmergence.java
+++ b/Mage.Sets/src/mage/cards/m/MightyEmergence.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/m/MiirymSentinelWyrm.java b/Mage.Sets/src/mage/cards/m/MiirymSentinelWyrm.java
index 93257ecac1f..02fcb9ab42a 100644
--- a/Mage.Sets/src/mage/cards/m/MiirymSentinelWyrm.java
+++ b/Mage.Sets/src/mage/cards/m/MiirymSentinelWyrm.java
@@ -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
));
}
diff --git a/Mage.Sets/src/mage/cards/m/MinionReflector.java b/Mage.Sets/src/mage/cards/m/MinionReflector.java
index d2d81a576b1..8f0ca60f587 100644
--- a/Mage.Sets/src/mage/cards/m/MinionReflector.java
+++ b/Mage.Sets/src/mage/cards/m/MinionReflector.java
@@ -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
));
}
diff --git a/Mage.Sets/src/mage/cards/m/MirrorMarch.java b/Mage.Sets/src/mage/cards/m/MirrorMarch.java
index c01c1233847..fc6029cad23 100644
--- a/Mage.Sets/src/mage/cards/m/MirrorMarch.java
+++ b/Mage.Sets/src/mage/cards/m/MirrorMarch.java
@@ -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) {
@@ -86,4 +83,4 @@ class MirrorMarchEffect extends OneShotEffect {
}
return true;
}
-}
\ No newline at end of file
+}
diff --git a/Mage.Sets/src/mage/cards/m/Mirrorworks.java b/Mage.Sets/src/mage/cards/m/Mirrorworks.java
index c24e7df320b..e90448beb82 100644
--- a/Mage.Sets/src/mage/cards/m/Mirrorworks.java
+++ b/Mage.Sets/src/mage/cards/m/Mirrorworks.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/m/MoggBombers.java b/Mage.Sets/src/mage/cards/m/MoggBombers.java
index a19631b9414..0649085c46a 100644
--- a/Mage.Sets/src/mage/cards/m/MoggBombers.java
+++ b/Mage.Sets/src/mage/cards/m/MoggBombers.java
@@ -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;
/**
@@ -21,8 +19,6 @@ import mage.target.common.TargetPlayerOrPlaneswalker;
* @author jeffwadsworth
*/
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);
diff --git a/Mage.Sets/src/mage/cards/m/MoltenEchoes.java b/Mage.Sets/src/mage/cards/m/MoltenEchoes.java
index 03bf6733048..3cb593e1d54 100644
--- a/Mage.Sets/src/mage/cards/m/MoltenEchoes.java
+++ b/Mage.Sets/src/mage/cards/m/MoltenEchoes.java
@@ -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;
}
}
-
diff --git a/Mage.Sets/src/mage/cards/m/MonkeyCage.java b/Mage.Sets/src/mage/cards/m/MonkeyCage.java
index b8d93e7e18b..06d44d9e332 100644
--- a/Mage.Sets/src/mage/cards/m/MonkeyCage.java
+++ b/Mage.Sets/src/mage/cards/m/MonkeyCage.java
@@ -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);
diff --git a/Mage.Sets/src/mage/cards/n/NaturesWrath.java b/Mage.Sets/src/mage/cards/n/NaturesWrath.java
index a7f83722991..5c1f75e3930 100644
--- a/Mage.Sets/src/mage/cards/n/NaturesWrath.java
+++ b/Mage.Sets/src/mage/cards/n/NaturesWrath.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/n/Necroduality.java b/Mage.Sets/src/mage/cards/n/Necroduality.java
index 765756ee5de..55a0feee072 100644
--- a/Mage.Sets/src/mage/cards/n/Necroduality.java
+++ b/Mage.Sets/src/mage/cards/n/Necroduality.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/n/NightshadeHarvester.java b/Mage.Sets/src/mage/cards/n/NightshadeHarvester.java
index c13bddcd6a4..1ec67edf21a 100644
--- a/Mage.Sets/src/mage/cards/n/NightshadeHarvester.java
+++ b/Mage.Sets/src/mage/cards/n/NightshadeHarvester.java
@@ -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);
diff --git a/Mage.Sets/src/mage/cards/n/NoxiousGhoul.java b/Mage.Sets/src/mage/cards/n/NoxiousGhoul.java
index 852de264283..9558448b7e9 100644
--- a/Mage.Sets/src/mage/cards/n/NoxiousGhoul.java
+++ b/Mage.Sets/src/mage/cards/n/NoxiousGhoul.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/o/ObsidianBattleAxe.java b/Mage.Sets/src/mage/cards/o/ObsidianBattleAxe.java
index eb2849fa870..087bcdb84e3 100644
--- a/Mage.Sets/src/mage/cards/o/ObsidianBattleAxe.java
+++ b/Mage.Sets/src/mage/cards/o/ObsidianBattleAxe.java
@@ -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));
}
diff --git a/Mage.Sets/src/mage/cards/o/OgreBattledriver.java b/Mage.Sets/src/mage/cards/o/OgreBattledriver.java
index d0ac16a8ead..dd3932d5bd3 100644
--- a/Mage.Sets/src/mage/cards/o/OgreBattledriver.java
+++ b/Mage.Sets/src/mage/cards/o/OgreBattledriver.java
@@ -1,38 +1,23 @@
-
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;
/**
*
* @author jeffwadsworth
*/
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}");
@@ -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);
}
diff --git a/Mage.Sets/src/mage/cards/o/OliviaMobilizedForWar.java b/Mage.Sets/src/mage/cards/o/OliviaMobilizedForWar.java
index d80cbc4b82c..57a498f34f6 100644
--- a/Mage.Sets/src/mage/cards/o/OliviaMobilizedForWar.java
+++ b/Mage.Sets/src/mage/cards/o/OliviaMobilizedForWar.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/o/OnduSpiritdancer.java b/Mage.Sets/src/mage/cards/o/OnduSpiritdancer.java
index ef5dd61308e..b57645082c3 100644
--- a/Mage.Sets/src/mage/cards/o/OnduSpiritdancer.java
+++ b/Mage.Sets/src/mage/cards/o/OnduSpiritdancer.java
@@ -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, "));
}
diff --git a/Mage.Sets/src/mage/cards/o/OrchardWarden.java b/Mage.Sets/src/mage/cards/o/OrchardWarden.java
index 1da8a5b3136..1bffe4d9231 100644
--- a/Mage.Sets/src/mage/cards/o/OrchardWarden.java
+++ b/Mage.Sets/src/mage/cards/o/OrchardWarden.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/o/OvalchaseDaredevil.java b/Mage.Sets/src/mage/cards/o/OvalchaseDaredevil.java
index f6b336afc4d..770b0e7896f 100644
--- a/Mage.Sets/src/mage/cards/o/OvalchaseDaredevil.java
+++ b/Mage.Sets/src/mage/cards/o/OvalchaseDaredevil.java
@@ -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
));
}
diff --git a/Mage.Sets/src/mage/cards/o/Overburden.java b/Mage.Sets/src/mage/cards/o/Overburden.java
index a0e3ed8352c..ee2256701ef 100644
--- a/Mage.Sets/src/mage/cards/o/Overburden.java
+++ b/Mage.Sets/src/mage/cards/o/Overburden.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/p/Paleoloth.java b/Mage.Sets/src/mage/cards/p/Paleoloth.java
index a7d7bf81dbc..55c07823a88 100644
--- a/Mage.Sets/src/mage/cards/p/Paleoloth.java
+++ b/Mage.Sets/src/mage/cards/p/Paleoloth.java
@@ -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);
diff --git a/Mage.Sets/src/mage/cards/p/Pandemonium.java b/Mage.Sets/src/mage/cards/p/Pandemonium.java
index a6911d7f34e..138c6a08e3a 100644
--- a/Mage.Sets/src/mage/cards/p/Pandemonium.java
+++ b/Mage.Sets/src/mage/cards/p/Pandemonium.java
@@ -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);
diff --git a/Mage.Sets/src/mage/cards/p/PathOfDiscovery.java b/Mage.Sets/src/mage/cards/p/PathOfDiscovery.java
index cefdcb90c80..1bef216fd21 100644
--- a/Mage.Sets/src/mage/cards/p/PathOfDiscovery.java
+++ b/Mage.Sets/src/mage/cards/p/PathOfDiscovery.java
@@ -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));
}
diff --git a/Mage.Sets/src/mage/cards/p/PiousEvangel.java b/Mage.Sets/src/mage/cards/p/PiousEvangel.java
index c7ac5cb8e30..47dfa82fdc8 100644
--- a/Mage.Sets/src/mage/cards/p/PiousEvangel.java
+++ b/Mage.Sets/src/mage/cards/p/PiousEvangel.java
@@ -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());
@@ -64,4 +62,4 @@ public final class PiousEvangel extends CardImpl {
public PiousEvangel copy() {
return new PiousEvangel(this);
}
-}
\ No newline at end of file
+}
diff --git a/Mage.Sets/src/mage/cards/p/PoisonbellyOgre.java b/Mage.Sets/src/mage/cards/p/PoisonbellyOgre.java
index 29c1ecaf7ae..1cfb91ae3de 100644
--- a/Mage.Sets/src/mage/cards/p/PoisonbellyOgre.java
+++ b/Mage.Sets/src/mage/cards/p/PoisonbellyOgre.java
@@ -1,4 +1,3 @@
-
package mage.cards.p;
import java.util.UUID;
@@ -24,9 +23,7 @@ public final class PoisonbellyOgre extends CardImpl {
static {
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) {
diff --git a/Mage.Sets/src/mage/cards/p/PollutedBonds.java b/Mage.Sets/src/mage/cards/p/PollutedBonds.java
index 56ef30de570..6a7307b1746 100644
--- a/Mage.Sets/src/mage/cards/p/PollutedBonds.java
+++ b/Mage.Sets/src/mage/cards/p/PollutedBonds.java
@@ -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);
}
diff --git a/Mage.Sets/src/mage/cards/p/Portcullis.java b/Mage.Sets/src/mage/cards/p/Portcullis.java
index 31dfbe5c0e7..a23bcdb003d 100644
--- a/Mage.Sets/src/mage/cards/p/Portcullis.java
+++ b/Mage.Sets/src/mage/cards/p/Portcullis.java
@@ -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));
diff --git a/Mage.Sets/src/mage/cards/p/PrestonTheVanisher.java b/Mage.Sets/src/mage/cards/p/PrestonTheVanisher.java
index 3f5bd901824..166a367b63d 100644
--- a/Mage.Sets/src/mage/cards/p/PrestonTheVanisher.java
+++ b/Mage.Sets/src/mage/cards/p/PrestonTheVanisher.java
@@ -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}"));
diff --git a/Mage.Sets/src/mage/cards/p/PrimalForcemage.java b/Mage.Sets/src/mage/cards/p/PrimalForcemage.java
index 29b37d06f45..3e40d583f4c 100644
--- a/Mage.Sets/src/mage/cards/p/PrimalForcemage.java
+++ b/Mage.Sets/src/mage/cards/p/PrimalForcemage.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/p/PrisonTerm.java b/Mage.Sets/src/mage/cards/p/PrisonTerm.java
index 093d12207e2..458f1a9ff13 100644
--- a/Mage.Sets/src/mage/cards/p/PrisonTerm.java
+++ b/Mage.Sets/src/mage/cards/p/PrisonTerm.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/q/QuicksmithGenius.java b/Mage.Sets/src/mage/cards/q/QuicksmithGenius.java
index 3981e8a50bd..038e6ba6b9f 100644
--- a/Mage.Sets/src/mage/cards/q/QuicksmithGenius.java
+++ b/Mage.Sets/src/mage/cards/q/QuicksmithGenius.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/r/RampagingFerocidon.java b/Mage.Sets/src/mage/cards/r/RampagingFerocidon.java
index d254ab1c611..2c6be8bde26 100644
--- a/Mage.Sets/src/mage/cards/r/RampagingFerocidon.java
+++ b/Mage.Sets/src/mage/cards/r/RampagingFerocidon.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/r/ReachOfBranches.java b/Mage.Sets/src/mage/cards/r/ReachOfBranches.java
index b72b0439d7c..152a707873b 100644
--- a/Mage.Sets/src/mage/cards/r/ReachOfBranches.java
+++ b/Mage.Sets/src/mage/cards/r/ReachOfBranches.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/r/RecklessFireweaver.java b/Mage.Sets/src/mage/cards/r/RecklessFireweaver.java
index bf1f6ef5650..2877d319f65 100644
--- a/Mage.Sets/src/mage/cards/r/RecklessFireweaver.java
+++ b/Mage.Sets/src/mage/cards/r/RecklessFireweaver.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/cards/r/RedtoothVanguard.java b/Mage.Sets/src/mage/cards/r/RedtoothVanguard.java
index 5ba0a2f30a4..7181b509cef 100644
--- a/Mage.Sets/src/mage/cards/r/RedtoothVanguard.java
+++ b/Mage.Sets/src/mage/cards/r/RedtoothVanguard.java
@@ -1,7 +1,7 @@
package mage.cards.r;
import mage.MageInt;
-import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
+import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect;
@@ -9,7 +9,7 @@ import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.*;
-import mage.filter.common.FilterEnchantmentPermanent;
+import mage.filter.StaticFilters;
import java.util.UUID;
@@ -18,12 +18,6 @@ import java.util.UUID;
*/
public final class RedtoothVanguard extends CardImpl {
- private static final FilterEnchantmentPermanent filter = new FilterEnchantmentPermanent("an enchantment");
-
- static {
- filter.add(TargetController.YOU.getControllerPredicate());
- }
-
public RedtoothVanguard(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
@@ -36,13 +30,9 @@ public final class RedtoothVanguard extends CardImpl {
this.addAbility(TrampleAbility.getInstance());
// Whenever an enchantment enters the battlefield under your control, you may pay 2. If you do, return Redtooth Vanguard from your graveyard to your hand.
- this.addAbility(new EntersBattlefieldAllTriggeredAbility(
- Zone.GRAVEYARD,
- new DoIfCostPaid(
- new ReturnSourceFromGraveyardToHandEffect(),
- new GenericManaCost(2)
- ),
- filter, false, SetTargetPointer.NONE, null, true
+ this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.GRAVEYARD,
+ new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect(), new GenericManaCost(2)),
+ StaticFilters.FILTER_PERMANENT_ENCHANTMENT, false, SetTargetPointer.NONE
));
}
diff --git a/Mage.Sets/src/mage/cards/r/ReplicationSpecialist.java b/Mage.Sets/src/mage/cards/r/ReplicationSpecialist.java
index cf6a8f285a3..464250c36c8 100644
--- a/Mage.Sets/src/mage/cards/r/ReplicationSpecialist.java
+++ b/Mage.Sets/src/mage/cards/r/ReplicationSpecialist.java
@@ -47,7 +47,7 @@ public final class ReplicationSpecialist extends CardImpl {
new CreateTokenCopyTargetEffect()
.setText("create a token that's a copy of that artifact"),
new ManaCostsImpl<>("{1}{U}")
- ), filter, false, SetTargetPointer.PERMANENT, null
+ ), filter, false, SetTargetPointer.PERMANENT
));
}
diff --git a/Mage.Sets/src/mage/cards/r/RikuOfTwoReflections.java b/Mage.Sets/src/mage/cards/r/RikuOfTwoReflections.java
index 4a593a2ef61..fe9a97518d2 100644
--- a/Mage.Sets/src/mage/cards/r/RikuOfTwoReflections.java
+++ b/Mage.Sets/src/mage/cards/r/RikuOfTwoReflections.java
@@ -56,7 +56,7 @@ public final class RikuOfTwoReflections extends CardImpl {
effect = new DoIfCostPaid(new CreateTokenCopyTargetEffect(true),
new ManaCostsImpl<>("{G}{U}"), "Create a token that's a copy of that creature?");
effect.setText("you may pay {G}{U}. If you do, create a token that's a copy of that creature");
- this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, effect, filterPermanent, false, SetTargetPointer.PERMANENT, null));
+ this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, effect, filterPermanent, false, SetTargetPointer.PERMANENT));
}
private RikuOfTwoReflections(final RikuOfTwoReflections card) {
diff --git a/Mage.Sets/src/mage/cards/r/RiverSneak.java b/Mage.Sets/src/mage/cards/r/RiverSneak.java
index d0dd5602a94..f38be7a97c8 100644
--- a/Mage.Sets/src/mage/cards/r/RiverSneak.java
+++ b/Mage.Sets/src/mage/cards/r/RiverSneak.java
@@ -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.continuous.BoostSourceEffect;
import mage.abilities.keyword.CantBeBlockedSourceAbility;
import mage.constants.SubType;
@@ -11,7 +10,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
-import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
@@ -26,7 +24,6 @@ public final class RiverSneak extends CardImpl {
static {
filter.add(AnotherPredicate.instance);
- filter.add(TargetController.YOU.getControllerPredicate());
filter.add(SubType.MERFOLK.getPredicate());
}
@@ -41,8 +38,9 @@ public final class RiverSneak extends CardImpl {
// River Sneak can't be blocked.
this.addAbility(new CantBeBlockedSourceAbility());
- // Whenever another Merfolk enters the battlefield under your control, River sneak gets +1/+1 until end of turn.
- this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 1, Duration.EndOfTurn), filter, false, null, true));
+ // Whenever another Merfolk enters the battlefield under your control, River Sneak gets +1/+1 until end of turn.
+ this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
+ new BoostSourceEffect(1, 1, Duration.EndOfTurn), filter, false));
}
private RiverSneak(final RiverSneak card) {
diff --git a/Mage.Sets/src/mage/cards/r/RoninWarclub.java b/Mage.Sets/src/mage/cards/r/RoninWarclub.java
index 70ac5ef13f5..e8f5d0fc18c 100644
--- a/Mage.Sets/src/mage/cards/r/RoninWarclub.java
+++ b/Mage.Sets/src/mage/cards/r/RoninWarclub.java
@@ -28,7 +28,7 @@ public final class RoninWarclub extends CardImpl {
// Whenever a creature enters the battlefield under your control, attach Ronin Warclub to that creature.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new AttachEffect(Outcome.BoostCreature, "attach {this} to that creature"),
- StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT, null));
+ StaticFilters.FILTER_PERMANENT_A_CREATURE, false, SetTargetPointer.PERMANENT));
// Equip {5} ({5}: Attach to target creature you control. Equip only as a sorcery.)
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(5)));
diff --git a/Mage.Sets/src/mage/cards/s/SagesRowDenizen.java b/Mage.Sets/src/mage/cards/s/SagesRowDenizen.java
index 513c462ce07..1644e394500 100644
--- a/Mage.Sets/src/mage/cards/s/SagesRowDenizen.java
+++ b/Mage.Sets/src/mage/cards/s/SagesRowDenizen.java
@@ -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.MillCardsTargetEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@@ -38,7 +38,7 @@ public final class SagesRowDenizen extends CardImpl {
this.toughness = new MageInt(3);
// Whenever another blue creature enters the battlefield under your control, target player puts the top two cards of their library into their graveyard.
- Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(2), filter, false, null, true);
+ Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new MillCardsTargetEffect(2), filter, false);
ability.addTarget(new TargetPlayer());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/s/SaiOfTheShinobi.java b/Mage.Sets/src/mage/cards/s/SaiOfTheShinobi.java
index c658920ce1c..061965915cd 100644
--- a/Mage.Sets/src/mage/cards/s/SaiOfTheShinobi.java
+++ b/Mage.Sets/src/mage/cards/s/SaiOfTheShinobi.java
@@ -1,8 +1,6 @@
-
package mage.cards.s;
-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;
@@ -10,14 +8,10 @@ import mage.abilities.effects.common.continuous.BoostEquippedEffect;
import mage.abilities.keyword.EquipAbility;
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 java.util.UUID;
/**
*
@@ -25,21 +19,18 @@ import mage.filter.common.FilterCreaturePermanent;
*/
public final class SaiOfTheShinobi extends CardImpl {
- private static final FilterPermanent filter = new FilterCreaturePermanent("a creature");
- static {
- filter.add(TargetController.YOU.getControllerPredicate());
- }
-
public SaiOfTheShinobi(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{1}");
this.subtype.add(SubType.EQUIPMENT);
// Equipped creature gets +1/+1.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 1)));
+
// Whenever a creature enters the battlefield under your control, you may attach Sai of the Shinobi 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));
+ StaticFilters.FILTER_PERMANENT_A_CREATURE, true, SetTargetPointer.PERMANENT));
+
// Equip {2}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2), false));
}
diff --git a/Mage.Sets/src/mage/cards/s/SalivatingGremlins.java b/Mage.Sets/src/mage/cards/s/SalivatingGremlins.java
index d9565dd7464..e2b795078b1 100644
--- a/Mage.Sets/src/mage/cards/s/SalivatingGremlins.java
+++ b/Mage.Sets/src/mage/cards/s/SalivatingGremlins.java
@@ -1,10 +1,9 @@
-
package mage.cards.s;
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.Effect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
@@ -15,7 +14,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Zone;
-import mage.filter.common.FilterControlledArtifactPermanent;
+import mage.filter.StaticFilters;
/**
*
@@ -32,9 +31,8 @@ public final class SalivatingGremlins extends CardImpl {
// Whenever an artifact enters the battlefield under your control, Salivating Gremlins gets +2/+0 and gains trample until end of turn.
Effect effect = new BoostSourceEffect(2, 0, Duration.EndOfTurn);
effect.setText("{this} gets +2/+0");
- Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD,
- effect,
- new FilterControlledArtifactPermanent("an artifact"), false, null, true);
+ Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
+ effect, StaticFilters.FILTER_PERMANENT_ARTIFACT, false);
effect = new GainAbilitySourceEffect(TrampleAbility.getInstance(), Duration.EndOfTurn);
effect.setText("and gains trample until end of turn");
ability.addEffect(effect);
diff --git a/Mage.Sets/src/mage/cards/s/SeedTheLand.java b/Mage.Sets/src/mage/cards/s/SeedTheLand.java
index 791abe81732..770f406eff9 100644
--- a/Mage.Sets/src/mage/cards/s/SeedTheLand.java
+++ b/Mage.Sets/src/mage/cards/s/SeedTheLand.java
@@ -1,4 +1,3 @@
-
package mage.cards.s;
import java.util.UUID;
@@ -23,8 +22,9 @@ public final class SeedTheLand extends CardImpl {
// Whenever a land enters the battlefield, its controller creates a 1/1 green Snake creature token.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD,
- new CreateTokenTargetEffect(new SnakeToken()), StaticFilters.FILTER_LAND, false, SetTargetPointer.PLAYER,
- "Whenever a land enters the battlefield, its controller creates a 1/1 green Snake creature token."));
+ new CreateTokenTargetEffect(new SnakeToken()).setText("its controller creates a 1/1 green Snake creature token"),
+ StaticFilters.FILTER_LAND, false, SetTargetPointer.PLAYER
+ ));
}
private SeedTheLand(final SeedTheLand card) {
diff --git a/Mage.Sets/src/mage/cards/s/SelvalaHeartOfTheWilds.java b/Mage.Sets/src/mage/cards/s/SelvalaHeartOfTheWilds.java
index 1be68b25e79..6514a80f92e 100644
--- a/Mage.Sets/src/mage/cards/s/SelvalaHeartOfTheWilds.java
+++ b/Mage.Sets/src/mage/cards/s/SelvalaHeartOfTheWilds.java
@@ -17,7 +17,6 @@ import mage.constants.*;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicate;
-import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
@@ -28,14 +27,6 @@ import mage.players.Player;
*/
public final class SelvalaHeartOfTheWilds extends CardImpl {
- private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another creature");
-
- static {
- filter.add(AnotherPredicate.instance);
- }
-
- private static final String rule = "Whenever another creature enters the battlefield, its controller may draw a card if its power is greater than each other creature's power.";
-
public SelvalaHeartOfTheWilds(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{G}");
this.supertype.add(SuperType.LEGENDARY);
@@ -45,7 +36,8 @@ public final class SelvalaHeartOfTheWilds extends CardImpl {
this.toughness = new MageInt(3);
// Whenever another creature enters the battlefield, its controller may draw a card if its power is greater than each other creature's power.
- this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new SelvalaHeartOfTheWildsEffect(), filter, false, SetTargetPointer.PERMANENT, rule));
+ this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new SelvalaHeartOfTheWildsEffect(),
+ StaticFilters.FILTER_ANOTHER_CREATURE, false, SetTargetPointer.PERMANENT));
// {G}, {T}: Add X mana in any combination of colors, where X is the greatest power among creatures you control.
ManaEffect manaEffect = new AddManaInAnyCombinationEffect(
@@ -75,9 +67,9 @@ class SelvalaHeartOfTheWildsEffect extends OneShotEffect {
filter2.add(new GreatestPowerPredicate());
}
- public SelvalaHeartOfTheWildsEffect() {
+ SelvalaHeartOfTheWildsEffect() {
super(Outcome.Benefit);
- this.staticText = "that creature's controller may draw a card";
+ this.staticText = "its controller may draw a card if its power is greater than each other creature's power";
}
private SelvalaHeartOfTheWildsEffect(final SelvalaHeartOfTheWildsEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/s/SerraRedeemer.java b/Mage.Sets/src/mage/cards/s/SerraRedeemer.java
index 3a8ec9b50c4..b58bc7e86ff 100644
--- a/Mage.Sets/src/mage/cards/s/SerraRedeemer.java
+++ b/Mage.Sets/src/mage/cards/s/SerraRedeemer.java
@@ -42,7 +42,7 @@ public final class SerraRedeemer extends CardImpl {
// Whenever another creature with power 2 or less enters the battlefield under your control, put two +1/+1 counters on that creature.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance(2)),
- filter, false, SetTargetPointer.PERMANENT, null
+ filter, false, SetTargetPointer.PERMANENT
));
}
diff --git a/Mage.Sets/src/mage/cards/s/SerumTank.java b/Mage.Sets/src/mage/cards/s/SerumTank.java
index 52875eee5c0..9188cc7c939 100644
--- a/Mage.Sets/src/mage/cards/s/SerumTank.java
+++ b/Mage.Sets/src/mage/cards/s/SerumTank.java
@@ -26,7 +26,7 @@ public final class SerumTank extends CardImpl {
// Whenever {this} or another artifact comes into play, put a charge counter on {this}.
this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility(
- new AddCountersSourceEffect(CounterType.CHARGE.createInstance()), StaticFilters.FILTER_PERMANENT_ARTIFACT
+ new AddCountersSourceEffect(CounterType.CHARGE.createInstance()), StaticFilters.FILTER_PERMANENT_ARTIFACT, false, false
));
// {3}, {tap}, Remove a charge counter from {this}: Draw a card.
diff --git a/Mage.Sets/src/mage/cards/s/ShadowAlleyDenizen.java b/Mage.Sets/src/mage/cards/s/ShadowAlleyDenizen.java
index 769ae1b0c86..376565fd994 100644
--- a/Mage.Sets/src/mage/cards/s/ShadowAlleyDenizen.java
+++ b/Mage.Sets/src/mage/cards/s/ShadowAlleyDenizen.java
@@ -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.Effect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.keyword.IntimidateAbility;
@@ -43,7 +43,7 @@ public final class ShadowAlleyDenizen extends CardImpl {
// Whenever another black creature enters the battlefield under your control, target creature gains intimidate until end of turn.
Effect effect = new GainAbilityTargetEffect(IntimidateAbility.getInstance(), Duration.EndOfTurn);
effect.setText("target creature gains intimidate until end of turn. (It can't be blocked except by artifact creatures and/or creatures that share a color with it.)");
- Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, effect, filter, false, null, true);
+ Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, effect, filter, false);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/s/ShatteredAngel.java b/Mage.Sets/src/mage/cards/s/ShatteredAngel.java
index 3704cb771c9..0594d39842a 100644
--- a/Mage.Sets/src/mage/cards/s/ShatteredAngel.java
+++ b/Mage.Sets/src/mage/cards/s/ShatteredAngel.java
@@ -1,20 +1,16 @@
-
-
package mage.cards.s;
-import java.util.UUID;
import mage.MageInt;
-import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
+import mage.abilities.common.EntersBattlefieldOpponentTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.keyword.FlyingAbility;
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.FilterPermanent;
-import mage.filter.common.FilterLandPermanent;
+import mage.filter.StaticFilters;
+
+import java.util.UUID;
/**
*
@@ -22,11 +18,6 @@ import mage.filter.common.FilterLandPermanent;
*/
public final class ShatteredAngel extends CardImpl {
- private static final FilterPermanent filter = new FilterLandPermanent("a land");
- static {
- filter.add(TargetController.OPPONENT.getControllerPredicate());
- }
-
public ShatteredAngel (UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{W}{W}");
this.subtype.add(SubType.PHYREXIAN);
@@ -37,9 +28,9 @@ public final class ShatteredAngel extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
+
// Whenever a land enters the battlefield under an opponent's control, you may gain 3 life.
- this.addAbility(new EntersBattlefieldAllTriggeredAbility(
- Zone.BATTLEFIELD, new GainLifeEffect(3), filter, true, "Whenever a land enters the battlefield under an opponent's control, you may gain 3 life."));
+ this.addAbility(new EntersBattlefieldOpponentTriggeredAbility(new GainLifeEffect(3), StaticFilters.FILTER_LAND_A, true));
}
private ShatteredAngel(final ShatteredAngel card) {
diff --git a/Mage.Sets/src/mage/cards/s/ShieldedByFaith.java b/Mage.Sets/src/mage/cards/s/ShieldedByFaith.java
index 1ad7f8d5186..6f04766ffac 100644
--- a/Mage.Sets/src/mage/cards/s/ShieldedByFaith.java
+++ b/Mage.Sets/src/mage/cards/s/ShieldedByFaith.java
@@ -48,7 +48,7 @@ public final class ShieldedByFaith extends CardImpl {
// Whenever a creature enters the battlefield, you may attach Shielded by Faith to that creature.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new AttachEffect(Outcome.Benefit, "attach {this} to that creature"),
- StaticFilters.FILTER_PERMANENT_A_CREATURE, true, SetTargetPointer.PERMANENT, null, false));
+ StaticFilters.FILTER_PERMANENT_A_CREATURE, true, SetTargetPointer.PERMANENT));
}
private ShieldedByFaith(final ShieldedByFaith card) {
diff --git a/Mage.Sets/src/mage/cards/s/SigardasAid.java b/Mage.Sets/src/mage/cards/s/SigardasAid.java
index b0237912207..814ed3e68ab 100644
--- a/Mage.Sets/src/mage/cards/s/SigardasAid.java
+++ b/Mage.Sets/src/mage/cards/s/SigardasAid.java
@@ -39,7 +39,7 @@ public final class SigardasAid extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CastAsThoughItHadFlashAllEffect(Duration.WhileOnBattlefield, filterCard, false)));
// Whenever an Equipment enters the battlefield under your control, you may attach it to target creature you control.
- Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new SigardasAidEffect(), filter, true, SetTargetPointer.PERMANENT, "");
+ Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, new SigardasAidEffect(), filter, true, SetTargetPointer.PERMANENT);
ability.addTarget(new TargetControlledCreaturePermanent());
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/s/SireOfStagnation.java b/Mage.Sets/src/mage/cards/s/SireOfStagnation.java
index 434096236a6..64350419f10 100644
--- a/Mage.Sets/src/mage/cards/s/SireOfStagnation.java
+++ b/Mage.Sets/src/mage/cards/s/SireOfStagnation.java
@@ -1,21 +1,20 @@
-
package mage.cards.s;
-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.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.ExileCardsFromTopOfLibraryTargetEffect;
import mage.abilities.keyword.DevoidAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.SubType;
import mage.constants.SetTargetPointer;
-import mage.constants.TargetController;
+import mage.constants.SubType;
import mage.constants.Zone;
-import mage.filter.common.FilterLandPermanent;
+import mage.filter.StaticFilters;
+
+import java.util.UUID;
/**
*
@@ -23,13 +22,6 @@ import mage.filter.common.FilterLandPermanent;
*/
public final class SireOfStagnation extends CardImpl {
- private static final FilterLandPermanent filter = new FilterLandPermanent();
- private static final String rule = "Whenever a land enters the battlefield under an opponent's control, that player exiles the top two cards of their library and you draw two cards.";
-
- static {
- filter.add(TargetController.OPPONENT.getControllerPredicate());
- }
-
public SireOfStagnation(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}{B}");
this.subtype.add(SubType.ELDRAZI);
@@ -40,9 +32,9 @@ public final class SireOfStagnation extends CardImpl {
this.addAbility(new DevoidAbility(this.color));
// Whenever a land enters the battlefield under an opponent's control, that player exiles the top two cards of their library and you draw two cards.
- Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD,
- new ExileCardsFromTopOfLibraryTargetEffect(2), filter, false, SetTargetPointer.PLAYER, rule, false);
- ability.addEffect(new DrawCardSourceControllerEffect(2));
+ Ability ability = new EntersBattlefieldOpponentTriggeredAbility(Zone.BATTLEFIELD,
+ new ExileCardsFromTopOfLibraryTargetEffect(2), StaticFilters.FILTER_LAND_A, false, SetTargetPointer.PLAYER);
+ ability.addEffect(new DrawCardSourceControllerEffect(2).concatBy("and you"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/s/SmokeShroud.java b/Mage.Sets/src/mage/cards/s/SmokeShroud.java
index 3d3a5ca2e6e..69ada956387 100644
--- a/Mage.Sets/src/mage/cards/s/SmokeShroud.java
+++ b/Mage.Sets/src/mage/cards/s/SmokeShroud.java
@@ -27,7 +27,7 @@ import java.util.UUID;
*/
public final class SmokeShroud extends CardImpl {
- private static final FilterPermanent filter = new FilterPermanent(SubType.NINJA, "");
+ private static final FilterPermanent filter = new FilterPermanent(SubType.NINJA, "a Ninja");
public SmokeShroud(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}");
@@ -51,9 +51,8 @@ public final class SmokeShroud extends CardImpl {
// When a Ninja enters the battlefield under your control, you may return Smoke Shroud from your graveyard to the battlefield attached to that creature.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.GRAVEYARD, new SmokeShroudEffect(), filter, true,
- SetTargetPointer.PERMANENT, "When a Ninja enters the battlefield under your control, " +
- "you may return {this} from your graveyard to the battlefield attached to that creature."
- ));
+ SetTargetPointer.PERMANENT
+ ).setTriggerPhrase("When a Ninja enters the battlefield under your control, "));
}
private SmokeShroud(final SmokeShroud card) {
@@ -70,6 +69,7 @@ class SmokeShroudEffect extends OneShotEffect {
SmokeShroudEffect() {
super(Outcome.Benefit);
+ staticText = "return {this} from your graveyard to the battlefield attached to that creature";
}
private SmokeShroudEffect(final SmokeShroudEffect effect) {
@@ -96,4 +96,3 @@ class SmokeShroudEffect extends OneShotEffect {
return false;
}
}
-
diff --git a/Mage.Sets/src/mage/cards/s/SpreadingPlague.java b/Mage.Sets/src/mage/cards/s/SpreadingPlague.java
index 526c14d3ccd..cd904b3da3a 100644
--- a/Mage.Sets/src/mage/cards/s/SpreadingPlague.java
+++ b/Mage.Sets/src/mage/cards/s/SpreadingPlague.java
@@ -24,13 +24,11 @@ import mage.game.permanent.Permanent;
*/
public final class SpreadingPlague extends CardImpl {
- private static final String RULE = "Whenever a creature enters the battlefield, destroy all other creatures that share a color with it. They can't be regenerated.";
-
public SpreadingPlague(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{B}");
// Whenever a creature enters the battlefield, destroy all other creatures that share a color with it. They can't be regenerated.
- this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new SpreadingPlagueEffect(), StaticFilters.FILTER_PERMANENT_CREATURE, false, SetTargetPointer.PERMANENT, RULE));
+ this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new SpreadingPlagueEffect(), StaticFilters.FILTER_PERMANENT_CREATURE, false, SetTargetPointer.PERMANENT));
}
diff --git a/Mage.Sets/src/mage/cards/s/StormriderRig.java b/Mage.Sets/src/mage/cards/s/StormriderRig.java
index c5aeeb6c2e3..b897b2e4f9d 100644
--- a/Mage.Sets/src/mage/cards/s/StormriderRig.java
+++ b/Mage.Sets/src/mage/cards/s/StormriderRig.java
@@ -1,8 +1,7 @@
-
package mage.cards.s;
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;
@@ -31,9 +30,9 @@ public final class StormriderRig extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 1)));
// Whenever a creature enters the battlefield under your control, you may attach Stormrider Rig to it.
- this.addAbility(new EntersBattlefieldAllTriggeredAbility(
+ this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new AttachEffect(Outcome.Detriment, "attach {this} to it"),
- StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT, true, SetTargetPointer.PERMANENT, null, true));
+ StaticFilters.FILTER_PERMANENT_CREATURE, true, SetTargetPointer.PERMANENT));
// Equip {2}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2), false));
diff --git a/Mage.Sets/src/mage/cards/s/SuleimansLegacy.java b/Mage.Sets/src/mage/cards/s/SuleimansLegacy.java
index 946cc848d9e..a23ce83b5a2 100644
--- a/Mage.Sets/src/mage/cards/s/SuleimansLegacy.java
+++ b/Mage.Sets/src/mage/cards/s/SuleimansLegacy.java
@@ -1,4 +1,3 @@
-
package mage.cards.s;
import java.util.UUID;
@@ -38,9 +37,9 @@ public final class SuleimansLegacy extends CardImpl {
// Whenever a Djinn or Efreet enters the battlefield, destroy it. It can't be regenerated.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
- Zone.BATTLEFIELD, new DestroyTargetEffect(true), filter, false, SetTargetPointer.PERMANENT,
- "Whenever a Djinn or Efreet enters the battlefield, destroy it. It can't be regenerated."
- ));
+ Zone.BATTLEFIELD, new DestroyTargetEffect("destroy it. It can't be regenerated.", true),
+ filter, false, SetTargetPointer.PERMANENT
+ ).setTriggerPhrase("Whenever a Djinn or Efreet enters the battlefield, "));
}
private SuleimansLegacy(final SuleimansLegacy card) {
diff --git a/Mage.Sets/src/mage/cards/s/SunstrikeLegionnaire.java b/Mage.Sets/src/mage/cards/s/SunstrikeLegionnaire.java
index df4bcfcaec4..d64b43d1a9d 100644
--- a/Mage.Sets/src/mage/cards/s/SunstrikeLegionnaire.java
+++ b/Mage.Sets/src/mage/cards/s/SunstrikeLegionnaire.java
@@ -46,7 +46,7 @@ public final class SunstrikeLegionnaire extends CardImpl {
// Sunstrike Legionnaire doesn't untap during your untap step.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepSourceEffect()));
// Whenever another creature enters the battlefield, untap Sunstrike Legionnaire.
- this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new UntapSourceEffect(), untapFilter, false, null));
+ this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new UntapSourceEffect(), untapFilter, false));
// {tap}: Tap target creature with converted mana cost 3 or less.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new TapSourceCost());
ability.addTarget(new TargetCreaturePermanent(tapFilter));
diff --git a/Mage.Sets/src/mage/cards/s/SurrakAndGoreclaw.java b/Mage.Sets/src/mage/cards/s/SurrakAndGoreclaw.java
index ef4a83054b7..f2d05fe3fed 100644
--- a/Mage.Sets/src/mage/cards/s/SurrakAndGoreclaw.java
+++ b/Mage.Sets/src/mage/cards/s/SurrakAndGoreclaw.java
@@ -56,7 +56,7 @@ public final class SurrakAndGoreclaw extends CardImpl {
Zone.BATTLEFIELD,
new AddCountersTargetEffect(CounterType.P1P1.createInstance())
.setText("put a +1/+1 counter on it"),
- filter, false, SetTargetPointer.PERMANENT, null
+ filter, false, SetTargetPointer.PERMANENT
);
ability.addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance())
.setText("it gains haste until end of turn"));
diff --git a/Mage.Sets/src/mage/cards/s/SwordOfTheMeek.java b/Mage.Sets/src/mage/cards/s/SwordOfTheMeek.java
index d1407dfaab5..dcf10830c4f 100644
--- a/Mage.Sets/src/mage/cards/s/SwordOfTheMeek.java
+++ b/Mage.Sets/src/mage/cards/s/SwordOfTheMeek.java
@@ -42,7 +42,7 @@ public final class SwordOfTheMeek extends CardImpl {
// Equip {2}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2), false));
// Whenever a 1/1 creature enters the battlefield under your control, you may return Sword of the Meek from your graveyard to the battlefield, then attach it to that creature.
- this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.GRAVEYARD, new SwordOfTheMeekEffect(), filter, true, SetTargetPointer.PERMANENT, ""));
+ this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.GRAVEYARD, new SwordOfTheMeekEffect(), filter, true, SetTargetPointer.PERMANENT));
}
private SwordOfTheMeek(final SwordOfTheMeek card) {
diff --git a/Mage.Sets/src/mage/cards/t/TaintedAether.java b/Mage.Sets/src/mage/cards/t/TaintedAether.java
index 4a0b1c4babb..0c5add58a9c 100644
--- a/Mage.Sets/src/mage/cards/t/TaintedAether.java
+++ b/Mage.Sets/src/mage/cards/t/TaintedAether.java
@@ -1,4 +1,3 @@
-
package mage.cards.t;
import java.util.UUID;
@@ -16,23 +15,24 @@ import mage.filter.predicate.Predicates;
/**
*
* @author LoneFox
-
*/
public final class TaintedAether extends CardImpl {
- private static final FilterControlledPermanent filter = new FilterControlledPermanent("a creature or a land");
+ private static final FilterControlledPermanent filter = new FilterControlledPermanent("a creature or land");
static {
- filter.add(Predicates.or(CardType.CREATURE.getPredicate(), CardType.LAND.getPredicate()));
+ filter.add(Predicates.or(
+ CardType.CREATURE.getPredicate(),
+ CardType.LAND.getPredicate()
+ ));
}
public TaintedAether(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{B}{B}");
// Whenever a creature enters the battlefield, its controller sacrifices a creature or land.
- this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new SacrificeEffect(filter, 1, ""),
- StaticFilters.FILTER_PERMANENT_CREATURES, false, SetTargetPointer.PLAYER,
- "Whenever a creature enters the battlefield, its controller sacrifices a creature or land."));
+ this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new SacrificeEffect(filter, 1, "its controller"),
+ StaticFilters.FILTER_PERMANENT_CREATURE, false, SetTargetPointer.PLAYER));
}
private TaintedAether(final TaintedAether card) {
diff --git a/Mage.Sets/src/mage/cards/t/TectonicInstability.java b/Mage.Sets/src/mage/cards/t/TectonicInstability.java
index 53e92774ceb..e59c9e333d2 100644
--- a/Mage.Sets/src/mage/cards/t/TectonicInstability.java
+++ b/Mage.Sets/src/mage/cards/t/TectonicInstability.java
@@ -1,4 +1,3 @@
-
package mage.cards.t;
import java.util.UUID;
@@ -10,7 +9,6 @@ import mage.constants.CardType;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.StaticFilters;
-import mage.filter.common.FilterLandPermanent;
/**
*
@@ -24,8 +22,8 @@ public final class TectonicInstability extends CardImpl {
// Whenever a land enters the battlefield, tap all lands its controller controls.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD,
- new TapAllTargetPlayerControlsEffect(new FilterLandPermanent()), StaticFilters.FILTER_LANDS,
- false, SetTargetPointer.PLAYER, "Whenever a land enters the battlefield, tap all lands its controller controls."));
+ new TapAllTargetPlayerControlsEffect(StaticFilters.FILTER_LANDS).setText("tap all lands its controller controls"),
+ StaticFilters.FILTER_LAND, false, SetTargetPointer.PLAYER));
}
private TectonicInstability(final TectonicInstability card) {
diff --git a/Mage.Sets/src/mage/cards/t/TerrorOfThePeaks.java b/Mage.Sets/src/mage/cards/t/TerrorOfThePeaks.java
index fa013326bdd..448949d23e2 100644
--- a/Mage.Sets/src/mage/cards/t/TerrorOfThePeaks.java
+++ b/Mage.Sets/src/mage/cards/t/TerrorOfThePeaks.java
@@ -3,7 +3,7 @@ package mage.cards.t;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
-import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
+import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.PayLifeCost;
import mage.abilities.dynamicvalue.DynamicValue;
@@ -44,11 +44,9 @@ public final class TerrorOfThePeaks extends CardImpl {
this.addAbility(new SimpleStaticAbility(new TerrorOfThePeaksCostIncreaseEffect()));
// Whenever another creature enters the battlefield under your control, Terror of the Peaks deals damage equal to that creature's power to any target.
- Ability ability = new EntersBattlefieldAllTriggeredAbility(
- new DamageTargetEffect(TerrorOfThePeaksValue.instance),
- StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE,
- "Whenever another creature enters the battlefield under your control, " +
- "{this} deals damage equal to that creature's power to any target."
+ Ability ability = new EntersBattlefieldControlledTriggeredAbility(
+ new DamageTargetEffect(TerrorOfThePeaksValue.instance).setText("{this} deals damage equal to that creature's power to any target"),
+ StaticFilters.FILTER_ANOTHER_CREATURE
);
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);
@@ -104,7 +102,6 @@ class TerrorOfThePeaksCostIncreaseEffect extends CostModificationEffectImpl {
if (allTargets.stream().anyMatch(target -> !isTargetCompatible(target, source, game))) {
return false;
}
- ;
}
return allTargets.stream().anyMatch(target -> isTargetCompatible(target, source, game));
diff --git a/Mage.Sets/src/mage/cards/t/TheGreatHenge.java b/Mage.Sets/src/mage/cards/t/TheGreatHenge.java
index a46ed29443c..f7f8ef47f5a 100644
--- a/Mage.Sets/src/mage/cards/t/TheGreatHenge.java
+++ b/Mage.Sets/src/mage/cards/t/TheGreatHenge.java
@@ -43,11 +43,10 @@ public final class TheGreatHenge extends CardImpl {
// Whenever a nontoken creature enters the battlefield under your control, put a +1/+1 counter on it and draw a card.
ability = new EntersBattlefieldControlledTriggeredAbility(
- Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()),
- StaticFilters.FILTER_CREATURE_NON_TOKEN, false, SetTargetPointer.PERMANENT, "Whenever a nontoken creature " +
- "enters the battlefield under your control, put a +1/+1 counter on it and draw a card."
+ Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P1P1.createInstance()).setText("put a +1/+1 counter on it"),
+ StaticFilters.FILTER_CREATURE_NON_TOKEN, false, SetTargetPointer.PERMANENT
);
- ability.addEffect(new DrawCardSourceControllerEffect(1));
+ ability.addEffect(new DrawCardSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/t/TheIrencrag.java b/Mage.Sets/src/mage/cards/t/TheIrencrag.java
index 7e239188dd2..5a33d7d686f 100644
--- a/Mage.Sets/src/mage/cards/t/TheIrencrag.java
+++ b/Mage.Sets/src/mage/cards/t/TheIrencrag.java
@@ -42,7 +42,7 @@ public final class TheIrencrag extends CardImpl {
// Whenever a legendary creature enters the battlefield under your control, you may have The Irencrag become a legendary Equipment artifact named Everflame, Heroes' Legacy. If you do, it gains equip {3} and "Equipped creature gets +3/+3" and loses all other abilities.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new AddContinuousEffectToGame(new TheIrencragBecomesContinuousEffect()),
- filter, true, SetTargetPointer.NONE, null
+ filter, true, SetTargetPointer.NONE
));
}
diff --git a/Mage.Sets/src/mage/cards/t/ThelonsChant.java b/Mage.Sets/src/mage/cards/t/ThelonsChant.java
index 8b2d0205900..f67fd1f79d5 100644
--- a/Mage.Sets/src/mage/cards/t/ThelonsChant.java
+++ b/Mage.Sets/src/mage/cards/t/ThelonsChant.java
@@ -36,8 +36,8 @@ public final class ThelonsChant extends CardImpl {
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ManaCostsImpl<>("{G}")), TargetController.YOU, false));
// Whenever a player puts a Swamp onto the battlefield, Thelon's Chant deals 3 damage to that player unless they put a -1/-1 counter on a creature they control.
- this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new ThelonsChantEffect(), filter, false, SetTargetPointer.PLAYER,
- "Whenever a player puts a Swamp onto the battlefield, {this} deals 3 damage to that player unless they put a -1/-1 counter on a creature they control."));
+ this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new ThelonsChantEffect(), filter, false, SetTargetPointer.PLAYER
+ ).setTriggerPhrase("Whenever a player puts a Swamp onto the battlefield, "));
}
private ThelonsChant(final ThelonsChant card) {
@@ -52,7 +52,7 @@ public final class ThelonsChant extends CardImpl {
class ThelonsChantEffect extends OneShotEffect {
- public ThelonsChantEffect() {
+ ThelonsChantEffect() {
super(Outcome.Damage);
staticText = "{this} deals 3 damage to that player unless they put a -1/-1 counter on a creature they control";
}
diff --git a/Mage.Sets/src/mage/cards/t/ThornbiteStaff.java b/Mage.Sets/src/mage/cards/t/ThornbiteStaff.java
index e245312f4e8..859670d3e60 100644
--- a/Mage.Sets/src/mage/cards/t/ThornbiteStaff.java
+++ b/Mage.Sets/src/mage/cards/t/ThornbiteStaff.java
@@ -49,7 +49,7 @@ public final class ThornbiteStaff extends CardImpl {
// Whenever a Shaman creature enters the battlefield, you may attach Thornbite Staff 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 {4}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(4), new TargetControlledCreaturePermanent(), false));
}
diff --git a/Mage.Sets/src/mage/cards/t/ThrasherBrute.java b/Mage.Sets/src/mage/cards/t/ThrasherBrute.java
index d2b04012262..21161f940e7 100644
--- a/Mage.Sets/src/mage/cards/t/ThrasherBrute.java
+++ b/Mage.Sets/src/mage/cards/t/ThrasherBrute.java
@@ -1,4 +1,3 @@
-
package mage.cards.t;
import mage.MageInt;
@@ -35,11 +34,9 @@ public final class ThrasherBrute extends CardImpl {
// Whenever Thrasher Brute or another Warrior enters the battlefield under your team's control, target opponent loses 1 life and you gain 1 life.
Ability ability = new EntersBattlefieldAllTriggeredAbility(
- Zone.BATTLEFIELD, new LoseLifeTargetEffect(1), filter, false,
- "Whenever {this} or another Warrior enters the battlefield under your team's control, "
- + "target opponent loses 1 life and you gain 1 life."
- );
- ability.addEffect(new GainLifeEffect(1));
+ Zone.BATTLEFIELD, new LoseLifeTargetEffect(1), filter, false
+ ).setTriggerPhrase("Whenever {this} or another Warrior enters the battlefield under your team's control, ");
+ ability.addEffect(new GainLifeEffect(1).concatBy("and"));
ability.addTarget(new TargetOpponent());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/t/TillerEngine.java b/Mage.Sets/src/mage/cards/t/TillerEngine.java
index 16ac19a18f1..5642973436e 100644
--- a/Mage.Sets/src/mage/cards/t/TillerEngine.java
+++ b/Mage.Sets/src/mage/cards/t/TillerEngine.java
@@ -37,7 +37,7 @@ public final class TillerEngine extends CardImpl {
// • Untap that land.
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new UntapTargetEffect().setText("Untap that land"),
- filter, false, SetTargetPointer.PERMANENT, null
+ filter, false, SetTargetPointer.PERMANENT
).setTriggerPhrase("Whenever a land enters the battlefield tapped and under your control, ");
// • Tap target nonland permanent an opponent controls.
diff --git a/Mage.Sets/src/mage/cards/t/TimidDrake.java b/Mage.Sets/src/mage/cards/t/TimidDrake.java
index fd926bd73de..764056b72e7 100644
--- a/Mage.Sets/src/mage/cards/t/TimidDrake.java
+++ b/Mage.Sets/src/mage/cards/t/TimidDrake.java
@@ -31,8 +31,7 @@ public final class TimidDrake extends CardImpl {
// When another creature enters the battlefield, return Timid Drake to its owner's hand.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new ReturnToHandSourceEffect(true),
- StaticFilters.FILTER_ANOTHER_CREATURE, false,
- "When another creature enters the battlefield, return {this} to its owner's hand."
+ StaticFilters.FILTER_ANOTHER_CREATURE, false
));
}
diff --git a/Mage.Sets/src/mage/cards/t/TourachsChant.java b/Mage.Sets/src/mage/cards/t/TourachsChant.java
index 716d31630c5..d1b67f4ec56 100644
--- a/Mage.Sets/src/mage/cards/t/TourachsChant.java
+++ b/Mage.Sets/src/mage/cards/t/TourachsChant.java
@@ -36,8 +36,8 @@ public final class TourachsChant extends CardImpl {
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new ManaCostsImpl<>("{B}")), TargetController.YOU, false));
// Whenever a player puts a Forest onto the battlefield, Tourach's Chant deals 3 damage to that player unless they put a -1/-1 counter on a creature they control.
- this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new TourachsChantEffect(), filter, false, SetTargetPointer.PLAYER,
- "Whenever a player puts a Forest onto the battlefield, {this} deals 3 damage to that player unless they put a -1/-1 counter on a creature they control."));
+ this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new TourachsChantEffect(), filter, false, SetTargetPointer.PLAYER
+ ).setTriggerPhrase("Whenever a player puts a Forest onto the battlefield, "));
}
private TourachsChant(final TourachsChant card) {
@@ -52,7 +52,7 @@ public final class TourachsChant extends CardImpl {
class TourachsChantEffect extends OneShotEffect {
- public TourachsChantEffect() {
+ TourachsChantEffect() {
super(Outcome.Damage);
staticText = "{this} deals 3 damage to that player unless they put a -1/-1 counter on a creature they control";
}
diff --git a/Mage.Sets/src/mage/cards/t/TrialOfAmbition.java b/Mage.Sets/src/mage/cards/t/TrialOfAmbition.java
index eec9a6979c7..f83cab348f5 100644
--- a/Mage.Sets/src/mage/cards/t/TrialOfAmbition.java
+++ b/Mage.Sets/src/mage/cards/t/TrialOfAmbition.java
@@ -36,8 +36,8 @@ public final class TrialOfAmbition extends CardImpl {
this.addAbility(ability);
// When a Cartouche enters the battlefield under your control, return Trial of Ambition to its owner's hand.
- this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new ReturnToHandSourceEffect(), filter,
- "When a Cartouche enters the battlefield under your control, return {this} to its owner's hand."));
+ this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new ReturnToHandSourceEffect(), filter
+ ));
}
private TrialOfAmbition(final TrialOfAmbition card) {
diff --git a/Mage.Sets/src/mage/cards/t/TrialOfKnowledge.java b/Mage.Sets/src/mage/cards/t/TrialOfKnowledge.java
index 0e5eceeade4..7442d301a21 100644
--- a/Mage.Sets/src/mage/cards/t/TrialOfKnowledge.java
+++ b/Mage.Sets/src/mage/cards/t/TrialOfKnowledge.java
@@ -31,8 +31,8 @@ public final class TrialOfKnowledge extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawDiscardControllerEffect(3, 1), false));
// When a Cartouche enters the battlefield under your control, return Trial of Knowledge to its owner's hand.
- this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new ReturnToHandSourceEffect(), filter,
- "When a Cartouche enters the battlefield under your control, return {this} to its owner's hand."));
+ this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new ReturnToHandSourceEffect(), filter
+ ));
}
private TrialOfKnowledge(final TrialOfKnowledge card) {
diff --git a/Mage.Sets/src/mage/cards/t/TrialOfSolidarity.java b/Mage.Sets/src/mage/cards/t/TrialOfSolidarity.java
index f706922c989..270a755be8c 100644
--- a/Mage.Sets/src/mage/cards/t/TrialOfSolidarity.java
+++ b/Mage.Sets/src/mage/cards/t/TrialOfSolidarity.java
@@ -43,8 +43,8 @@ public final class TrialOfSolidarity extends CardImpl {
this.addAbility(ability);
// When a Cartouche enters the battlefield under you control, return Trial of Solidarity to its owner's hand.
- this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new ReturnToHandSourceEffect(), filter,
- "When a Cartouche enters the battlefield under your control, return {this} to its owner's hand."));
+ this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new ReturnToHandSourceEffect(), filter
+ ));
}
private TrialOfSolidarity(final TrialOfSolidarity card) {
diff --git a/Mage.Sets/src/mage/cards/t/TrialOfStrength.java b/Mage.Sets/src/mage/cards/t/TrialOfStrength.java
index 354dbb4abf9..079b5c0632d 100644
--- a/Mage.Sets/src/mage/cards/t/TrialOfStrength.java
+++ b/Mage.Sets/src/mage/cards/t/TrialOfStrength.java
@@ -32,8 +32,8 @@ public final class TrialOfStrength extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new BeastToken3())));
// When a Cartouche enters the battlefield under your control, return Trial of Strength to its owner's hand.
- this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new ReturnToHandSourceEffect(), filter,
- "When a Cartouche enters the battlefield under your control, return {this} to its owner's hand."));
+ this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new ReturnToHandSourceEffect(), filter
+ ));
}
private TrialOfStrength(final TrialOfStrength card) {
diff --git a/Mage.Sets/src/mage/cards/t/TrialOfZeal.java b/Mage.Sets/src/mage/cards/t/TrialOfZeal.java
index 8bc223ff5d2..d84298d1859 100644
--- a/Mage.Sets/src/mage/cards/t/TrialOfZeal.java
+++ b/Mage.Sets/src/mage/cards/t/TrialOfZeal.java
@@ -35,8 +35,8 @@ public final class TrialOfZeal extends CardImpl {
this.addAbility(ability);
// When a Cartouche enters the battlefield under your control, return Trial of Zeal to its owner's hand.
- this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new ReturnToHandSourceEffect(), filter,
- "When a Cartouche enters the battlefield under your control, return {this} to its owner's hand."));
+ this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new ReturnToHandSourceEffect(), filter
+ ));
}
private TrialOfZeal(final TrialOfZeal card) {
diff --git a/Mage.Sets/src/mage/cards/t/TrooperArmor.java b/Mage.Sets/src/mage/cards/t/TrooperArmor.java
index a30cd993355..372037b73fe 100644
--- a/Mage.Sets/src/mage/cards/t/TrooperArmor.java
+++ b/Mage.Sets/src/mage/cards/t/TrooperArmor.java
@@ -34,8 +34,8 @@ public final class TrooperArmor extends CardImpl {
new AttachEffect(Outcome.BoostCreature, "attach {this} to it"),
new FilterPermanent(SubType.TROOPER, "Trooper"),
true,
- SetTargetPointer.PERMANENT,
- null));
+ SetTargetPointer.PERMANENT
+ ));
// Equip {2}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2)));
}
diff --git a/Mage.Sets/src/mage/cards/u/UnderhandedDesigns.java b/Mage.Sets/src/mage/cards/u/UnderhandedDesigns.java
index 70414fcf04d..43b53b544ab 100644
--- a/Mage.Sets/src/mage/cards/u/UnderhandedDesigns.java
+++ b/Mage.Sets/src/mage/cards/u/UnderhandedDesigns.java
@@ -4,12 +4,11 @@ package mage.cards.u;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
-import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
+import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.costs.mana.ManaCostsImpl;
-import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.GainLifeEffect;
@@ -19,6 +18,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.Zone;
+import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledArtifactPermanent;
import mage.target.common.TargetCreaturePermanent;
@@ -33,10 +33,9 @@ public final class UnderhandedDesigns extends CardImpl {
// Whenever an artifact enters the battlefield under your control, you may pay {1}. If you do, each opponent loses 1 life and you gain 1 life.
DoIfCostPaid doIfCostPaid = new DoIfCostPaid(new LoseLifeOpponentsEffect(1), new GenericManaCost(1));
- Effect effect = new GainLifeEffect(1);
- doIfCostPaid.addEffect(effect);
- this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, doIfCostPaid, new FilterControlledArtifactPermanent("an artifact"), false,
- "Whenever an artifact enters the battlefield under your control, you may pay {1}. If you do, each opponent loses 1 life and you gain 1 life."));
+ doIfCostPaid.addEffect(new GainLifeEffect(1).concatBy("and"));
+ this.addAbility(new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD,
+ doIfCostPaid, StaticFilters.FILTER_PERMANENT_ARTIFACT, false));
// {1}{B}, Sacrifice Underhanded Designs: Destroy target creature. Activate this ability only if you control two or more artifacts.
Ability ability = new ActivateIfConditionActivatedAbility(Zone.BATTLEFIELD,
diff --git a/Mage.Sets/src/mage/cards/u/UnstableShapeshifter.java b/Mage.Sets/src/mage/cards/u/UnstableShapeshifter.java
index 2e3974fe4e9..35a1dee66c9 100644
--- a/Mage.Sets/src/mage/cards/u/UnstableShapeshifter.java
+++ b/Mage.Sets/src/mage/cards/u/UnstableShapeshifter.java
@@ -41,7 +41,7 @@ public final class UnstableShapeshifter extends CardImpl {
this.toughness = new MageInt(1);
// Whenever another creature enters the battlefield, Unstable Shapeshifter becomes a copy of that creature, except it has this ability.
- this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new UnstableShapeshifterEffect(), filterAnotherCreature, false, SetTargetPointer.PERMANENT, ""));
+ this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new UnstableShapeshifterEffect(), filterAnotherCreature, false, SetTargetPointer.PERMANENT));
}
private UnstableShapeshifter(final UnstableShapeshifter card) {
@@ -77,7 +77,7 @@ class UnstableShapeshifterEffect extends OneShotEffect {
if (targetCreature != null && permanent != null) {
Permanent blueprintPermanent = game.copyPermanent(Duration.Custom, targetCreature, permanent.getId(), source, new EmptyCopyApplier());
blueprintPermanent.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD,
- new UnstableShapeshifterEffect(), filterAnotherCreature, false, SetTargetPointer.PERMANENT, ""), source.getSourceId(), game);
+ new UnstableShapeshifterEffect(), filterAnotherCreature, false, SetTargetPointer.PERMANENT), source.getSourceId(), game);
return true;
}
return false;
diff --git a/Mage.Sets/src/mage/cards/v/VeteransArmaments.java b/Mage.Sets/src/mage/cards/v/VeteransArmaments.java
index 84740bfd3cc..8cea6c057a8 100644
--- a/Mage.Sets/src/mage/cards/v/VeteransArmaments.java
+++ b/Mage.Sets/src/mage/cards/v/VeteransArmaments.java
@@ -44,7 +44,7 @@ public final class VeteransArmaments extends CardImpl {
// Whenever a Soldier creature enters the battlefield, you may attach Veteran's Armaments 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 {2}
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2), new TargetControlledCreaturePermanent(), false));
diff --git a/Mage.Sets/src/mage/cards/v/VildinPackAlpha.java b/Mage.Sets/src/mage/cards/v/VildinPackAlpha.java
index e6dcbe0842e..6a8bc353a8d 100644
--- a/Mage.Sets/src/mage/cards/v/VildinPackAlpha.java
+++ b/Mage.Sets/src/mage/cards/v/VildinPackAlpha.java
@@ -35,7 +35,7 @@ public final class VildinPackAlpha extends CardImpl {
// Whenever a Werewolf enters the battlefield under your control, you may transform it.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
Zone.BATTLEFIELD, new VildinPackAlphaEffect(), filter,
- true, SetTargetPointer.PERMANENT, null
+ true, SetTargetPointer.PERMANENT
));
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Vildin-Pack Alpha.
diff --git a/Mage.Sets/src/mage/cards/w/WaywardServant.java b/Mage.Sets/src/mage/cards/w/WaywardServant.java
index a3b6fb49d4f..782bcda6ff6 100644
--- a/Mage.Sets/src/mage/cards/w/WaywardServant.java
+++ b/Mage.Sets/src/mage/cards/w/WaywardServant.java
@@ -1,11 +1,9 @@
-
package mage.cards.w;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
-import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
-import mage.abilities.effects.Effect;
+import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.LoseLifeOpponentsEffect;
import mage.cards.CardImpl;
@@ -28,8 +26,6 @@ public final class WaywardServant extends CardImpl {
filter.add(AnotherPredicate.instance);
}
- private static final String rule = "Whenever another Zombie enters the battlefield under your control, each opponent loses 1 life and you gain 1 life.";
-
public WaywardServant(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}{B}");
@@ -38,10 +34,8 @@ public final class WaywardServant extends CardImpl {
this.toughness = new MageInt(2);
// Whenever another Zombie enters the battlefield under your control, each opponent loses 1 life and you gain 1 life.
- Effect effect = new LoseLifeOpponentsEffect(1);
- Effect effect2 = new GainLifeEffect(1);
- Ability ability = new EntersBattlefieldAllTriggeredAbility(effect, filter, rule);
- ability.addEffect(effect2);
+ Ability ability = new EntersBattlefieldControlledTriggeredAbility(new LoseLifeOpponentsEffect(1), filter);
+ ability.addEffect(new GainLifeEffect(1).concatBy("and"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/w/WeldfastWingsmith.java b/Mage.Sets/src/mage/cards/w/WeldfastWingsmith.java
index 6cbe273aadc..4d85fc5b827 100644
--- a/Mage.Sets/src/mage/cards/w/WeldfastWingsmith.java
+++ b/Mage.Sets/src/mage/cards/w/WeldfastWingsmith.java
@@ -3,7 +3,7 @@ package mage.cards.w;
import java.util.UUID;
import mage.MageInt;
-import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
+import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.continuous.GainAbilitySourceEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
@@ -11,7 +11,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
-import mage.filter.common.FilterControlledArtifactPermanent;
+import mage.filter.StaticFilters;
/**
*
@@ -27,8 +27,8 @@ public final class WeldfastWingsmith extends CardImpl {
this.toughness = new MageInt(3);
// Whenever an artifact enters the battlefield under your control, Weldfast Wingsmith gains flying until end of turn.
- this.addAbility(new EntersBattlefieldAllTriggeredAbility(new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn),
- new FilterControlledArtifactPermanent(), "Whenever an artifact enters the battlefield under your control, {this} gains flying until end of turn."));
+ this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
+ new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), StaticFilters.FILTER_PERMANENT_ARTIFACT));
}
private WeldfastWingsmith(final WeldfastWingsmith card) {
diff --git a/Mage.Sets/src/mage/cards/w/WildPair.java b/Mage.Sets/src/mage/cards/w/WildPair.java
index ad26d2b1d48..e6f0dbb16ff 100644
--- a/Mage.Sets/src/mage/cards/w/WildPair.java
+++ b/Mage.Sets/src/mage/cards/w/WildPair.java
@@ -26,7 +26,7 @@ import java.util.UUID;
*/
public final class WildPair extends CardImpl {
- private static final FilterPermanent filter = new FilterCreaturePermanent();
+ private static final FilterPermanent filter = new FilterCreaturePermanent("a creature");
static {
// TODO: This should check who cast the spell, not who controls the permanent
@@ -39,11 +39,8 @@ public final class WildPair extends CardImpl {
// Whenever a creature enters the battlefield, if you cast it from your hand, you may search your library for a creature card with the same total power and toughness and put it onto the battlefield. If you do, shuffle your library.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
- Zone.BATTLEFIELD, new WildPairEffect(), filter, true,
- SetTargetPointer.PERMANENT, "Whenever a creature enters the battlefield, " +
- "if you cast it from your hand, you may search your library for a creature card " +
- "with the same total power and toughness, put it onto the battlefield, then shuffle."
- ), new CastFromHandWatcher());
+ Zone.BATTLEFIELD, new WildPairEffect(), filter, true, SetTargetPointer.PERMANENT
+ ).setTriggerPhrase("Whenever a creature enters the battlefield, if you cast it from your hand, "), new CastFromHandWatcher());
}
private WildPair(final WildPair card) {
@@ -58,9 +55,9 @@ public final class WildPair extends CardImpl {
class WildPairEffect extends OneShotEffect {
- public WildPairEffect() {
+ WildPairEffect() {
super(Outcome.PutCreatureInPlay);
- this.staticText = "search your library for a creature card with the same total power and toughness and put it onto the battlefield";
+ this.staticText = "search your library for a creature card with the same total power and toughness, put it onto the battlefield, then shuffle";
}
private WildPairEffect(final WildPairEffect effect) {
@@ -94,7 +91,7 @@ class WildPairEffect extends OneShotEffect {
class WildPairPowerToughnessPredicate extends IntComparePredicate {
- public WildPairPowerToughnessPredicate(int value) {
+ WildPairPowerToughnessPredicate(int value) {
super(ComparisonType.EQUAL_TO, value);
}
diff --git a/Mage.Sets/src/mage/cards/w/WolverineRiders.java b/Mage.Sets/src/mage/cards/w/WolverineRiders.java
index bfe059cd22a..b3c02671384 100644
--- a/Mage.Sets/src/mage/cards/w/WolverineRiders.java
+++ b/Mage.Sets/src/mage/cards/w/WolverineRiders.java
@@ -26,7 +26,7 @@ import java.util.UUID;
*/
public final class WolverineRiders extends CardImpl {
- private static final FilterPermanent filter = new FilterPermanent(SubType.ELF, "");
+ private static final FilterPermanent filter = new FilterPermanent(SubType.ELF, "another Elf");
static {
filter.add(AnotherPredicate.instance);
@@ -47,8 +47,7 @@ public final class WolverineRiders extends CardImpl {
// Whenever another Elf enters the battlefield under your control, you gain life equal to its toughness.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
- new GainLifeEffect(WolverineRidersValue.instance), filter, "Whenever another Elf " +
- "enters the battlefield under your control, you gain life equal to its toughness."
+ new GainLifeEffect(WolverineRidersValue.instance, "you gain life equal to its toughness"), filter
));
}
diff --git a/Mage.Sets/src/mage/cards/y/YorvoLordOfGarenbrig.java b/Mage.Sets/src/mage/cards/y/YorvoLordOfGarenbrig.java
index fd1dcaa1c16..95385fdb4bf 100644
--- a/Mage.Sets/src/mage/cards/y/YorvoLordOfGarenbrig.java
+++ b/Mage.Sets/src/mage/cards/y/YorvoLordOfGarenbrig.java
@@ -25,7 +25,7 @@ import java.util.UUID;
*/
public final class YorvoLordOfGarenbrig extends CardImpl {
- private static final FilterPermanent filter = new FilterCreaturePermanent();
+ private static final FilterPermanent filter = new FilterCreaturePermanent("another green creature");
static {
filter.add(AnotherPredicate.instance);
@@ -49,10 +49,7 @@ public final class YorvoLordOfGarenbrig extends CardImpl {
// Whenever another green creature enters the battlefield under your control, put a +1/+1 counter on Yorvo. Then if that creature's power is greater than Yorvo's power, put another +1/+1 counter on Yorvo.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
- Zone.BATTLEFIELD, new YorvoLordOfGarenbrigEffect(), filter, false, SetTargetPointer.PERMANENT,
- "Whenever another green creature enters the battlefield under your control, " +
- "put a +1/+1 counter on {this}. Then if that creature's power is greater than {this}'s power, " +
- "put another +1/+1 counter on {this}."
+ Zone.BATTLEFIELD, new YorvoLordOfGarenbrigEffect(), filter, false, SetTargetPointer.PERMANENT
));
}
@@ -70,6 +67,8 @@ class YorvoLordOfGarenbrigEffect extends OneShotEffect {
YorvoLordOfGarenbrigEffect() {
super(Outcome.Benefit);
+ staticText = "put a +1/+1 counter on {this}. Then if that creature's power is greater than {this}'s power, " +
+ "put another +1/+1 counter on {this}.";
}
private YorvoLordOfGarenbrigEffect(final YorvoLordOfGarenbrigEffect effect) {
diff --git a/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java b/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java
index ab265842d65..02bd2f71362 100644
--- a/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java
+++ b/Mage/src/main/java/mage/abilities/TriggeredAbilityImpl.java
@@ -2,7 +2,7 @@ package mage.abilities;
import mage.MageObject;
import mage.abilities.effects.Effect;
-import mage.abilities.effects.common.DoIfCostPaid;
+import mage.abilities.effects.common.*;
import mage.constants.AbilityType;
import mage.constants.AbilityWord;
import mage.constants.Zone;
@@ -257,6 +257,19 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
|| ruleLow.startsWith("untap");
}
+ /**
+ * For use in generating trigger phrases with correct text
+ * @return "When " for an effect that always removes the source from the battlefield, otherwise "Whenever "
+ */
+ protected final String getWhen() {
+ return (!optional && getAllEffects().stream().anyMatch(
+ effect -> effect instanceof SacrificeSourceEffect
+ || effect instanceof ReturnToHandSourceEffect
+ || effect instanceof ShuffleIntoLibrarySourceEffect
+ || effect instanceof ExileSourceEffect
+ ) ? "When " : "Whenever ");
+ }
+
@Override
public boolean isInUseableZone(Game game, MageObject source, GameEvent event) {
diff --git a/Mage/src/main/java/mage/abilities/common/BecomesTargetSourceTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/BecomesTargetSourceTriggeredAbility.java
index 7aaa2de0511..e1d36235246 100644
--- a/Mage/src/main/java/mage/abilities/common/BecomesTargetSourceTriggeredAbility.java
+++ b/Mage/src/main/java/mage/abilities/common/BecomesTargetSourceTriggeredAbility.java
@@ -2,10 +2,6 @@ package mage.abilities.common;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.Effect;
-import mage.abilities.effects.common.ExileSourceEffect;
-import mage.abilities.effects.common.ReturnToHandSourceEffect;
-import mage.abilities.effects.common.SacrificeSourceEffect;
-import mage.abilities.effects.common.ShuffleIntoLibrarySourceEffect;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.FilterStackObject;
@@ -36,11 +32,7 @@ public class BecomesTargetSourceTriggeredAbility extends TriggeredAbilityImpl {
super(Zone.BATTLEFIELD, effect, optional);
this.filter = filter;
this.setTargetPointer = setTargetPointer;
- boolean textWhen = !optional && (effect instanceof SacrificeSourceEffect
- || effect instanceof ReturnToHandSourceEffect
- || effect instanceof ShuffleIntoLibrarySourceEffect
- || effect instanceof ExileSourceEffect);
- setTriggerPhrase((textWhen ? "When" : "Whenever") + " {this} becomes the target of " + filter.getMessage() + ", ");
+ setTriggerPhrase(getWhen() + "{this} becomes the target of " + filter.getMessage() + ", ");
this.replaceRuleText = true; // default true to replace "{this}" with "it"
}
diff --git a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldAllTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldAllTriggeredAbility.java
index 570a5b042bf..6cd97cc5392 100644
--- a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldAllTriggeredAbility.java
+++ b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldAllTriggeredAbility.java
@@ -9,8 +9,7 @@ import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent;
import mage.target.targetpointer.FixedTarget;
-
-import java.util.UUID;
+import mage.util.CardUtil;
/**
* @author LevelX2
@@ -18,54 +17,29 @@ import java.util.UUID;
public class EntersBattlefieldAllTriggeredAbility extends TriggeredAbilityImpl {
protected FilterPermanent filter;
- protected String rule;
- protected boolean controlledText;
protected SetTargetPointer setTargetPointer;
/**
* zone = BATTLEFIELD optional = false
- *
- * @param effect
- * @param filter
*/
public EntersBattlefieldAllTriggeredAbility(Effect effect, FilterPermanent filter) {
this(Zone.BATTLEFIELD, effect, filter, false);
}
- public EntersBattlefieldAllTriggeredAbility(Effect effect, FilterPermanent filter, String rule) {
- this(Zone.BATTLEFIELD, effect, filter, false, rule);
- }
-
public EntersBattlefieldAllTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional) {
- this(zone, effect, filter, optional, SetTargetPointer.NONE, null, false);
+ this(zone, effect, filter, optional, SetTargetPointer.NONE);
}
- public EntersBattlefieldAllTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional, String rule) {
- this(zone, effect, filter, optional, rule, false);
- }
-
- public EntersBattlefieldAllTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional, String rule, boolean controlledText) {
- this(zone, effect, filter, optional, SetTargetPointer.NONE, rule, controlledText);
- }
-
- public EntersBattlefieldAllTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer, String rule) {
- this(zone, effect, filter, optional, setTargetPointer, rule, false);
- }
-
- public EntersBattlefieldAllTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer, String rule, boolean controlledText) {
+ public EntersBattlefieldAllTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer) {
super(zone, effect, optional);
this.filter = filter;
- this.rule = rule;
- this.controlledText = controlledText;
this.setTargetPointer = setTargetPointer;
- setTriggerPhrase(generateTriggerPhrase());
+ setTriggerPhrase(getTriggerPhraseFromFilter() + ", ");
}
protected EntersBattlefieldAllTriggeredAbility(final EntersBattlefieldAllTriggeredAbility ability) {
super(ability);
this.filter = ability.filter;
- this.rule = ability.rule;
- this.controlledText = ability.controlledText;
this.setTargetPointer = ability.setTargetPointer;
}
@@ -76,8 +50,7 @@ public class EntersBattlefieldAllTriggeredAbility extends TriggeredAbilityImpl {
@Override
public boolean checkTrigger(GameEvent event, Game game) {
- UUID targetId = event.getTargetId();
- Permanent permanent = game.getPermanent(targetId);
+ Permanent permanent = game.getPermanent(event.getTargetId());
if (!filter.match(permanent, getControllerId(), this, game)) {
return false;
}
@@ -95,28 +68,12 @@ public class EntersBattlefieldAllTriggeredAbility extends TriggeredAbilityImpl {
return true;
}
- @Override
- public String getRule() {
- if (rule != null && !rule.isEmpty()) {
- return rule;
+ protected final String getTriggerPhraseFromFilter() {
+ String filterMessage = filter.getMessage();
+ if (filterMessage.startsWith("one or more")) {
+ return getWhen() + filterMessage + " enter the battlefield";
}
- return super.getRule();
- }
-
- protected String generateTriggerPhrase() {
- StringBuilder sb = new StringBuilder("Whenever ");
- sb.append(filter.getMessage());
- if (filter.getMessage().startsWith("one or more")) {
- sb.append(" enter the battlefield");
- } else {
- sb.append(" enters the battlefield");
- }
- if (controlledText) {
- sb.append(" under your control, ");
- } else {
- sb.append(", ");
- }
- return sb.toString();
+ return getWhen() + CardUtil.addArticle(filterMessage) + " enters the battlefield";
}
@Override
diff --git a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldCastTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldCastTriggeredAbility.java
index 205532abad4..d5dae814798 100644
--- a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldCastTriggeredAbility.java
+++ b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldCastTriggeredAbility.java
@@ -1,7 +1,5 @@
package mage.abilities.common;
-import java.util.UUID;
-
import mage.abilities.effects.Effect;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
@@ -12,82 +10,31 @@ import mage.watchers.common.PermanentWasCastWatcher;
/**
* An extension of triggered abilities that trigger when permanents enter the
- * battlefield, but this time they either must be cast or must not be cast.
+ * battlefield under your control, but this time they either must be cast or must not be cast.
*
* @author alexander-novo
*/
-public class EntersBattlefieldCastTriggeredAbility extends EntersBattlefieldAllTriggeredAbility {
+public class EntersBattlefieldCastTriggeredAbility extends EntersBattlefieldControlledTriggeredAbility {
private final boolean mustCast;
- /**
- * zone = BATTLEFIELD optional = false
- *
- * @param effect
- * @param filter
- */
- public EntersBattlefieldCastTriggeredAbility(Effect effect, FilterPermanent filter, boolean mustCast) {
- this(Zone.BATTLEFIELD, effect, filter, mustCast, false);
- }
-
- public EntersBattlefieldCastTriggeredAbility(Effect effect, FilterPermanent filter, boolean mustCast, String rule) {
- this(Zone.BATTLEFIELD, effect, filter, mustCast, false, rule);
- }
-
- public EntersBattlefieldCastTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean mustCast,
- boolean optional) {
- this(zone, effect, filter, mustCast, optional, SetTargetPointer.NONE, null, false);
- }
-
- public EntersBattlefieldCastTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean mustCast,
- boolean optional,
- String rule) {
- this(zone, effect, filter, mustCast, optional, rule, false);
- }
-
- public EntersBattlefieldCastTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean mustCast,
- boolean optional,
- String rule, boolean controlledText) {
- this(zone, effect, filter, mustCast, optional, SetTargetPointer.NONE, rule, controlledText);
- }
-
- public EntersBattlefieldCastTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean mustCast,
- boolean optional,
- SetTargetPointer setTargetPointer, String rule) {
- this(zone, effect, filter, mustCast, optional, setTargetPointer, rule, false);
- }
-
- public EntersBattlefieldCastTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean mustCast,
- boolean optional,
- SetTargetPointer setTargetPointer, String rule, boolean controlledText) {
- super(zone, effect, filter, optional, setTargetPointer, rule, controlledText);
-
+ public EntersBattlefieldCastTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional,
+ SetTargetPointer setTargetPointer, boolean mustCast) {
+ super(zone, effect, filter, optional, setTargetPointer);
this.mustCast = mustCast;
this.addWatcher(new PermanentWasCastWatcher());
-
- StringBuilder triggerPhrase = new StringBuilder(this.generateTriggerPhrase());
- if (mustCast) {
- triggerPhrase.append("if it was cast, ");
- } else {
- triggerPhrase.append("if it wasn't cast, ");
- }
- this.setTriggerPhrase(triggerPhrase.toString());
+ setTriggerPhrase(getTriggerPhraseFromFilter() + " under your control, if it " + (mustCast ? "was" : "wasn't") + " cast, " );
}
protected EntersBattlefieldCastTriggeredAbility(final EntersBattlefieldCastTriggeredAbility ability) {
super(ability);
-
this.mustCast = ability.mustCast;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
- if (!super.checkTrigger(event, game))
- return false;
-
PermanentWasCastWatcher watcher = game.getState().getWatcher(PermanentWasCastWatcher.class);
- UUID targetId = event.getTargetId();
-
- return watcher.wasPermanentCastThisTurn(targetId) == this.mustCast;
+ return watcher != null && watcher.wasPermanentCastThisTurn(event.getTargetId()) == this.mustCast
+ && super.checkTrigger(event, game);
}
@Override
diff --git a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldControlledTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldControlledTriggeredAbility.java
index 753df5c46ab..f1d88a2b851 100644
--- a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldControlledTriggeredAbility.java
+++ b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldControlledTriggeredAbility.java
@@ -1,5 +1,3 @@
-
-
package mage.abilities.common;
import mage.abilities.effects.Effect;
@@ -17,32 +15,19 @@ import mage.game.permanent.Permanent;
public class EntersBattlefieldControlledTriggeredAbility extends EntersBattlefieldAllTriggeredAbility {
/**
- * zone = BATTLEFIELD
- * optional = false
- * rule = null
- *
- * @param effect
- * @param filter
+ * zone = BATTLEFIELD, optional = false
*/
public EntersBattlefieldControlledTriggeredAbility(Effect effect, FilterPermanent filter) {
this(Zone.BATTLEFIELD, effect, filter, false);
}
- public EntersBattlefieldControlledTriggeredAbility(Effect effect, FilterPermanent filter, String rule) {
- this(Zone.BATTLEFIELD, effect, filter, false, rule);
- }
-
public EntersBattlefieldControlledTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional) {
- this(zone, effect, filter, optional, null);
- this.filter = filter;
+ this(zone, effect, filter, optional, SetTargetPointer.NONE);
}
- public EntersBattlefieldControlledTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional, String rule) {
- this(zone, effect, filter, optional, SetTargetPointer.NONE, rule);
- }
-
- public EntersBattlefieldControlledTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer, String rule) {
- super(zone, effect, filter, optional, setTargetPointer, rule, true);
+ public EntersBattlefieldControlledTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer) {
+ super(zone, effect, filter, optional, setTargetPointer);
+ setTriggerPhrase(getTriggerPhraseFromFilter() + " under your control, ");
}
protected EntersBattlefieldControlledTriggeredAbility(final EntersBattlefieldControlledTriggeredAbility ability) {
diff --git a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldOpponentTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldOpponentTriggeredAbility.java
new file mode 100644
index 00000000000..a86228e8026
--- /dev/null
+++ b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldOpponentTriggeredAbility.java
@@ -0,0 +1,42 @@
+package mage.abilities.common;
+
+import mage.abilities.effects.Effect;
+import mage.constants.SetTargetPointer;
+import mage.constants.Zone;
+import mage.filter.FilterPermanent;
+import mage.game.Game;
+import mage.game.events.GameEvent;
+import mage.game.permanent.Permanent;
+
+/**
+ * @author xenohedron
+ */
+public class EntersBattlefieldOpponentTriggeredAbility extends EntersBattlefieldAllTriggeredAbility {
+
+ public EntersBattlefieldOpponentTriggeredAbility(Effect effect, FilterPermanent filter, boolean optional) {
+ this(Zone.BATTLEFIELD, effect, filter, optional, SetTargetPointer.NONE);
+ }
+
+ public EntersBattlefieldOpponentTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer) {
+ super(zone, effect, filter, optional, setTargetPointer);
+ setTriggerPhrase(getTriggerPhraseFromFilter() + " under an opponent's control, ");
+ }
+
+ protected EntersBattlefieldOpponentTriggeredAbility(final EntersBattlefieldOpponentTriggeredAbility ability) {
+ super(ability);
+ }
+
+ @Override
+ public boolean checkTrigger(GameEvent event, Game game) {
+ Permanent permanent = game.getPermanent(event.getTargetId());
+ if (permanent == null || !game.getOpponents(this.getControllerId()).contains(permanent.getControllerId())) {
+ return false;
+ }
+ return super.checkTrigger(event, game);
+ }
+
+ @Override
+ public EntersBattlefieldOpponentTriggeredAbility copy() {
+ return new EntersBattlefieldOpponentTriggeredAbility(this);
+ }
+}
diff --git a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldThisOrAnotherTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldThisOrAnotherTriggeredAbility.java
index 73687b70e14..297f56c9208 100644
--- a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldThisOrAnotherTriggeredAbility.java
+++ b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldThisOrAnotherTriggeredAbility.java
@@ -11,22 +11,13 @@ import mage.filter.FilterPermanentThisOrAnother;
*/
public class EntersBattlefieldThisOrAnotherTriggeredAbility extends EntersBattlefieldAllTriggeredAbility {
- public EntersBattlefieldThisOrAnotherTriggeredAbility(Effect effect, FilterPermanent filter) {
- this(effect, filter, false, false);
- }
-
public EntersBattlefieldThisOrAnotherTriggeredAbility(Effect effect, FilterPermanent filter, boolean optional, boolean onlyControlled) {
this(effect, filter, optional, SetTargetPointer.NONE, onlyControlled);
}
public EntersBattlefieldThisOrAnotherTriggeredAbility(Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer, boolean onlyControlled) {
- this(Zone.BATTLEFIELD, effect, filter, optional, setTargetPointer, onlyControlled);
- }
-
- public EntersBattlefieldThisOrAnotherTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer, boolean onlyControlled) {
- super(zone, effect,
- new FilterPermanentThisOrAnother(filter, onlyControlled),
- optional, setTargetPointer, null, onlyControlled);
+ super(Zone.BATTLEFIELD, effect, new FilterPermanentThisOrAnother(filter, onlyControlled), optional, setTargetPointer);
+ setTriggerPhrase("Whenever " + this.filter.getMessage() + " enters the battlefield" + (onlyControlled ? " under your control, " : ", "));
}
private EntersBattlefieldThisOrAnotherTriggeredAbility(final EntersBattlefieldThisOrAnotherTriggeredAbility ability) {
@@ -37,4 +28,4 @@ public class EntersBattlefieldThisOrAnotherTriggeredAbility extends EntersBattle
public EntersBattlefieldThisOrAnotherTriggeredAbility copy() {
return new EntersBattlefieldThisOrAnotherTriggeredAbility(this);
}
-}
\ No newline at end of file
+}
diff --git a/Mage/src/main/java/mage/abilities/effects/common/ReturnToHandChosenPermanentEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ReturnToHandChosenPermanentEffect.java
index 0f49f7cfc53..05e4d05a2a6 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/ReturnToHandChosenPermanentEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/ReturnToHandChosenPermanentEffect.java
@@ -1,4 +1,3 @@
-
package mage.abilities.effects.common;
import mage.abilities.Ability;
@@ -60,10 +59,10 @@ public class ReturnToHandChosenPermanentEffect extends OneShotEffect {
protected String getText() {
StringBuilder sb = new StringBuilder("that player returns ");
- if (!filter.getMessage().startsWith("another")) {
- sb.append(CardUtil.numberToText(number, "a"));
+ if (!filter.getMessage().startsWith("another") && !filter.getMessage().startsWith("a ")) {
+ sb.append(CardUtil.numberToText(number, "a")).append(' ');
}
- sb.append(' ').append(filter.getMessage());
+ sb.append(filter.getMessage());
sb.append(" they control");
if (number > 1) {
sb.append(" to their owner's hand");
diff --git a/Mage/src/main/java/mage/abilities/keyword/SoulbondAbility.java b/Mage/src/main/java/mage/abilities/keyword/SoulbondAbility.java
index e039263201d..43cf0b3c08b 100644
--- a/Mage/src/main/java/mage/abilities/keyword/SoulbondAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/SoulbondAbility.java
@@ -175,7 +175,7 @@ class SoulbondEntersOtherAbility extends EntersBattlefieldAllTriggeredAbility {
}
public SoulbondEntersOtherAbility() {
- super(Zone.BATTLEFIELD, new SoulboundEntersOtherEffect(), soulbondFilter, true, SetTargetPointer.PERMANENT, "");
+ super(Zone.BATTLEFIELD, new SoulboundEntersOtherEffect(), soulbondFilter, true, SetTargetPointer.PERMANENT);
setRuleVisible(false);
}
diff --git a/Mage/src/main/java/mage/game/command/emblems/KioraMasterOfTheDepthsEmblem.java b/Mage/src/main/java/mage/game/command/emblems/KioraMasterOfTheDepthsEmblem.java
index d87bbabaae9..0162bf17b34 100644
--- a/Mage/src/main/java/mage/game/command/emblems/KioraMasterOfTheDepthsEmblem.java
+++ b/Mage/src/main/java/mage/game/command/emblems/KioraMasterOfTheDepthsEmblem.java
@@ -6,7 +6,7 @@ import mage.abilities.effects.OneShotEffect;
import mage.constants.Outcome;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
-import mage.filter.common.FilterCreaturePermanent;
+import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.command.Emblem;
import mage.game.permanent.Permanent;
@@ -17,14 +17,11 @@ import mage.target.common.TargetCreaturePermanent;
*/
public final class KioraMasterOfTheDepthsEmblem extends Emblem {
- private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures");
-
public KioraMasterOfTheDepthsEmblem() {
super("Emblem Kiora");
Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.COMMAND,
- new KioraFightEffect(), filter, true, SetTargetPointer.PERMANENT,
- "Whenever a creature enters the battlefield under your control, you may have it fight target creature.");
+ new KioraFightEffect(), StaticFilters.FILTER_PERMANENT_A_CREATURE, true, SetTargetPointer.PERMANENT);
ability.addTarget(new TargetCreaturePermanent());
this.getAbilities().add(ability);
}
@@ -43,6 +40,7 @@ class KioraFightEffect extends OneShotEffect {
KioraFightEffect() {
super(Outcome.Damage);
+ staticText = "you may have it fight target creature";
}
KioraFightEffect(final KioraFightEffect effect) {
diff --git a/Mage/src/main/java/mage/game/command/emblems/NissaVitalForceEmblem.java b/Mage/src/main/java/mage/game/command/emblems/NissaVitalForceEmblem.java
index a7ede67219e..aec187a3c40 100644
--- a/Mage/src/main/java/mage/game/command/emblems/NissaVitalForceEmblem.java
+++ b/Mage/src/main/java/mage/game/command/emblems/NissaVitalForceEmblem.java
@@ -1,10 +1,10 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
-import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
+import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.constants.Zone;
-import mage.filter.common.FilterControlledLandPermanent;
+import mage.filter.StaticFilters;
import mage.game.command.Emblem;
/**
@@ -15,8 +15,8 @@ public final class NissaVitalForceEmblem extends Emblem {
public NissaVitalForceEmblem() {
super("Emblem Nissa");
- Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.COMMAND, new DrawCardSourceControllerEffect(1), new FilterControlledLandPermanent("a land"),
- true, null, true);
+ Ability ability = new EntersBattlefieldControlledTriggeredAbility(Zone.COMMAND,
+ new DrawCardSourceControllerEffect(1), StaticFilters.FILTER_LAND_A, true);
getAbilities().add(ability);
}