mirror of
https://github.com/magefree/mage.git
synced 2025-12-26 13:32:06 -08:00
new common BecomesTargetAnyTriggeredAbility
This commit is contained in:
parent
65523b9fec
commit
6abe9ff821
20 changed files with 257 additions and 876 deletions
|
|
@ -1,14 +1,16 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.BecomesTargetOpponentAllTriggeredAbility;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.keyword.ForetellAbility;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SetTargetPointer;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -28,8 +30,8 @@ public final class BattleMammoth extends CardImpl {
|
|||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
// Whenever a permanent you control becomes the target of a spell or ability an opponent controls, you may draw a card.
|
||||
this.addAbility(new BecomesTargetOpponentAllTriggeredAbility(
|
||||
new DrawCardSourceControllerEffect(1), true
|
||||
this.addAbility(new BecomesTargetAnyTriggeredAbility(new DrawCardSourceControllerEffect(1),
|
||||
StaticFilters.FILTER_CONTROLLED_A_PERMANENT, StaticFilters.FILTER_SPELL_OR_ABILITY_OPPONENTS, SetTargetPointer.NONE, true
|
||||
));
|
||||
|
||||
// Foretell {2}{G}{G}
|
||||
|
|
|
|||
|
|
@ -1,31 +1,35 @@
|
|||
|
||||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.GameEvent.EventType;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.constants.SetTargetPointer;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
* @author xenohedron
|
||||
*/
|
||||
public final class CloudCover extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterControlledPermanent("another permanent you control");
|
||||
static {
|
||||
filter.add(AnotherPredicate.instance);
|
||||
}
|
||||
|
||||
public CloudCover(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{W}{U}");
|
||||
|
||||
// Whenever another permanent you control becomes the target of a spell or ability an opponent controls, you may return that permanent to its owner's hand.
|
||||
this.addAbility(new CloudCoverAbility());
|
||||
this.addAbility(new BecomesTargetAnyTriggeredAbility(new ReturnToHandTargetEffect(),
|
||||
filter, StaticFilters.FILTER_SPELL_OR_ABILITY_OPPONENTS, SetTargetPointer.PERMANENT, true));
|
||||
}
|
||||
|
||||
private CloudCover(final CloudCover card) {
|
||||
|
|
@ -37,44 +41,3 @@ public final class CloudCover extends CardImpl {
|
|||
return new CloudCover(this);
|
||||
}
|
||||
}
|
||||
|
||||
class CloudCoverAbility extends TriggeredAbilityImpl {
|
||||
|
||||
public CloudCoverAbility() {
|
||||
super(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), true);
|
||||
}
|
||||
|
||||
private CloudCoverAbility(final CloudCoverAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CloudCoverAbility copy() {
|
||||
return new CloudCoverAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
Permanent permanent = game.getPermanent(event.getTargetId());
|
||||
Player controller = game.getPlayer(this.getControllerId());
|
||||
if (permanent != null
|
||||
&& permanent.isControlledBy(getControllerId())
|
||||
&& !permanent.getId().equals(this.getSourceId())
|
||||
&& controller != null
|
||||
&& controller.hasOpponent(event.getPlayerId(), game)) {
|
||||
getEffects().get(0).setTargetPointer(new FixedTarget(permanent, game));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever another permanent you control becomes the target of a spell or ability an opponent controls, you may return that permanent to its owner's hand.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,21 +1,16 @@
|
|||
|
||||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author dustinconrad
|
||||
* @author xenohedron
|
||||
*/
|
||||
public final class Cowardice extends CardImpl {
|
||||
|
||||
|
|
@ -23,7 +18,7 @@ public final class Cowardice extends CardImpl {
|
|||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{U}{U}");
|
||||
|
||||
// Whenever a creature becomes the target of a spell or ability, return that creature to its owner's hand.
|
||||
this.addAbility(new CowardiceTriggeredAbility());
|
||||
this.addAbility(new BecomesTargetAnyTriggeredAbility(new ReturnToHandTargetEffect(), StaticFilters.FILTER_PERMANENT_A_CREATURE));
|
||||
}
|
||||
|
||||
private Cowardice(final Cowardice card) {
|
||||
|
|
@ -35,39 +30,3 @@ public final class Cowardice extends CardImpl {
|
|||
return new Cowardice(this);
|
||||
}
|
||||
}
|
||||
|
||||
class CowardiceTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
public CowardiceTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), false);
|
||||
}
|
||||
|
||||
private CowardiceTriggeredAbility(final CowardiceTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
Permanent permanent = game.getPermanent(event.getTargetId());
|
||||
if (permanent != null && permanent.isCreature(game)) {
|
||||
getEffects().get(0).setTargetPointer(new FixedTarget(event.getTargetId(), game));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a creature becomes the target of a spell or ability, return that creature to its owner's hand.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public CowardiceTriggeredAbility copy() {
|
||||
return new CowardiceTriggeredAbility(this);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,27 +1,25 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author L_J
|
||||
* @author xenohedron
|
||||
*/
|
||||
public final class DaruSpiritualist extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterControlledCreaturePermanent(SubType.CLERIC, "a Cleric creature you control");
|
||||
|
||||
public DaruSpiritualist(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
|
|
@ -31,7 +29,7 @@ public final class DaruSpiritualist extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
// Whenever a Cleric creature you control becomes the target of a spell or ability, it gets +0/+2 until end of turn.
|
||||
this.addAbility(new DaruSpiritualistTriggeredAbility(new BoostTargetEffect(0, 2, Duration.EndOfTurn)));
|
||||
this.addAbility(new BecomesTargetAnyTriggeredAbility(new BoostTargetEffect(0, 2, Duration.EndOfTurn), filter));
|
||||
}
|
||||
|
||||
private DaruSpiritualist(final DaruSpiritualist card) {
|
||||
|
|
@ -43,39 +41,3 @@ public final class DaruSpiritualist extends CardImpl {
|
|||
return new DaruSpiritualist(this);
|
||||
}
|
||||
}
|
||||
|
||||
class DaruSpiritualistTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
public DaruSpiritualistTriggeredAbility(Effect effect) {
|
||||
super(Zone.BATTLEFIELD, effect);
|
||||
}
|
||||
|
||||
private DaruSpiritualistTriggeredAbility(final DaruSpiritualistTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DaruSpiritualistTriggeredAbility copy() {
|
||||
return new DaruSpiritualistTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
Permanent creature = game.getPermanent(event.getTargetId());
|
||||
if (creature != null && creature.hasSubtype(SubType.CLERIC, game) && creature.getControllerId().equals(getControllerId()) && creature.isCreature(game)) {
|
||||
this.getEffects().setTargetPointer(new FixedTarget(creature, game));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a Cleric creature you control becomes the target of a spell or ability, it gets +0/+2 until end of turn.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +1,27 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.CounterUnlessPaysEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SetTargetPointer;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author LevelX2
|
||||
* @author xenohedron
|
||||
*/
|
||||
public final class DiffusionSliver extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterControlledCreaturePermanent(SubType.SLIVER, "a Sliver creature you control");
|
||||
|
||||
public DiffusionSliver(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
|
||||
this.subtype.add(SubType.SLIVER);
|
||||
|
|
@ -32,7 +30,8 @@ public final class DiffusionSliver extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
// Whenever a Sliver creature you control becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {2}.
|
||||
this.addAbility(new DiffusionSliverTriggeredAbility());
|
||||
this.addAbility(new BecomesTargetAnyTriggeredAbility(new CounterUnlessPaysEffect(new GenericManaCost(2)),
|
||||
filter, StaticFilters.FILTER_SPELL_OR_ABILITY_OPPONENTS, SetTargetPointer.SPELL, false));
|
||||
}
|
||||
|
||||
private DiffusionSliver(final DiffusionSliver card) {
|
||||
|
|
@ -44,48 +43,3 @@ public final class DiffusionSliver extends CardImpl {
|
|||
return new DiffusionSliver(this);
|
||||
}
|
||||
}
|
||||
|
||||
class DiffusionSliverTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterControlledCreaturePermanent(SubType.SLIVER);
|
||||
|
||||
DiffusionSliverTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, null);
|
||||
}
|
||||
|
||||
private DiffusionSliverTriggeredAbility(final DiffusionSliverTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DiffusionSliverTriggeredAbility copy() {
|
||||
return new DiffusionSliverTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (!game.getOpponents(this.controllerId).contains(event.getPlayerId())) {
|
||||
return false;
|
||||
}
|
||||
Permanent creature = game.getPermanent(event.getTargetId());
|
||||
if (creature == null || !filter.match(creature, getControllerId(), this, game)) {
|
||||
return false;
|
||||
}
|
||||
this.getEffects().clear();
|
||||
Effect effect = new CounterUnlessPaysEffect(new GenericManaCost(2));
|
||||
effect.setTargetPointer(new FixedTarget(event.getSourceId(), game));
|
||||
this.addEffect(effect);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a Sliver creature you control becomes the target of a spell or ability an opponent controls, " +
|
||||
"counter that spell or ability unless its controller pays {2}.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,18 +2,18 @@ package mage.cards.e;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BecomesTargetOpponentAllTriggeredAbility;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.common.ScryTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SetTargetPointer;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.target.targetadjustment.TargetAdjuster;
|
||||
|
|
@ -25,13 +25,6 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class ElrondMasterOfHealing extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter
|
||||
= new FilterControlledCreaturePermanent("a creature you control with a +1/+1 counter on it");
|
||||
|
||||
static {
|
||||
filter.add(CounterType.P1P1.getPredicate());
|
||||
}
|
||||
|
||||
public ElrondMasterOfHealing(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{U}");
|
||||
|
||||
|
|
@ -48,8 +41,8 @@ public final class ElrondMasterOfHealing extends CardImpl {
|
|||
.setTargetAdjuster(ElrondMasterOfHealingAdjuster.instance));
|
||||
|
||||
// Whenever a creature you control with a +1/+1 counter on it becomes the target of a spell or ability an opponent controls, you may draw a card.
|
||||
this.addAbility(new BecomesTargetOpponentAllTriggeredAbility(
|
||||
new DrawCardSourceControllerEffect(1), filter, true
|
||||
this.addAbility(new BecomesTargetAnyTriggeredAbility(new DrawCardSourceControllerEffect(1),
|
||||
StaticFilters.FILTER_A_CONTROLLED_CREATURE_P1P1, StaticFilters.FILTER_SPELL_OR_ABILITY_OPPONENTS, SetTargetPointer.NONE, true
|
||||
));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,28 +1,24 @@
|
|||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.abilities.keyword.IndestructibleAbility;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||
import mage.filter.predicate.permanent.AttackingPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.*;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||
import mage.filter.predicate.permanent.AttackingPredicate;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -30,13 +26,18 @@ import mage.constants.Duration;
|
|||
*/
|
||||
public final class FeySteed extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(
|
||||
"another target attacking creature you control");
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another target attacking creature you control");
|
||||
private static final FilterControlledPermanent filter2 = new FilterControlledPermanent("a creature or planeswalker you control");
|
||||
|
||||
static {
|
||||
filter.add(TargetController.YOU.getControllerPredicate());
|
||||
filter.add(AnotherPredicate.instance);
|
||||
filter.add(AttackingPredicate.instance);
|
||||
|
||||
filter2.add(Predicates.or(
|
||||
CardType.CREATURE.getPredicate(),
|
||||
CardType.PLANESWALKER.getPredicate()
|
||||
));
|
||||
}
|
||||
|
||||
public FeySteed(UUID ownerId, CardSetInfo setInfo) {
|
||||
|
|
@ -46,16 +47,15 @@ public final class FeySteed extends CardImpl {
|
|||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// Whenever Fey Steed attacks, another target attacking creature you control
|
||||
// gains indestructible until end of turn.
|
||||
// Whenever Fey Steed attacks, another target attacking creature you control gains indestructible until end of turn.
|
||||
Ability ability = new AttacksTriggeredAbility(
|
||||
new GainAbilityTargetEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn), false);
|
||||
ability.addTarget(new TargetCreaturePermanent(filter));
|
||||
this.addAbility(ability);
|
||||
|
||||
// Whenever a creature or planeswalker you control becomes the target of a spell
|
||||
// or ability an opponent controls, you may draw a card.
|
||||
this.addAbility(new FeySteedTriggeredAbility());
|
||||
// Whenever a creature or planeswalker you control becomes the target of a spell or ability an opponent controls, you may draw a card.
|
||||
this.addAbility(new BecomesTargetAnyTriggeredAbility(new DrawCardSourceControllerEffect(1),
|
||||
filter2, StaticFilters.FILTER_SPELL_OR_ABILITY_OPPONENTS, SetTargetPointer.NONE, true));
|
||||
}
|
||||
|
||||
private FeySteed(final FeySteed card) {
|
||||
|
|
@ -67,44 +67,3 @@ public final class FeySteed extends CardImpl {
|
|||
return new FeySteed(this);
|
||||
}
|
||||
}
|
||||
|
||||
class FeySteedTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
public FeySteedTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), true);
|
||||
}
|
||||
|
||||
private FeySteedTriggeredAbility(final FeySteedTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
Player targetter = game.getPlayer(event.getPlayerId());
|
||||
if (targetter == null || !targetter.hasOpponent(this.controllerId, game)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
|
||||
if (permanent == null || !permanent.isControlledBy(this.getControllerId())
|
||||
|| (!permanent.isCreature(game) && !permanent.isPlaneswalker(game))) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a creature or planeswalker you control becomes the target of a spell or ability an opponent controls, you may draw a card.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public FeySteedTriggeredAbility copy() {
|
||||
return new FeySteedTriggeredAbility(this);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
package mage.cards.h;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.effects.common.DestroyTargetEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -11,15 +9,12 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX
|
||||
* @author xenohedron
|
||||
*/
|
||||
public final class HorobiDeathsWail extends CardImpl {
|
||||
|
||||
|
|
@ -35,7 +30,7 @@ public final class HorobiDeathsWail extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Whenever a creature becomes the target of a spell or ability, destroy that creature.
|
||||
this.addAbility(new HorobiDeathsWailAbility(new DestroyTargetEffect()));
|
||||
this.addAbility(new BecomesTargetAnyTriggeredAbility(new DestroyTargetEffect(), StaticFilters.FILTER_PERMANENT_A_CREATURE));
|
||||
}
|
||||
|
||||
private HorobiDeathsWail(final HorobiDeathsWail card) {
|
||||
|
|
@ -48,39 +43,3 @@ public final class HorobiDeathsWail extends CardImpl {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
class HorobiDeathsWailAbility extends TriggeredAbilityImpl {
|
||||
|
||||
public HorobiDeathsWailAbility(Effect effect) {
|
||||
super(Zone.BATTLEFIELD, effect);
|
||||
}
|
||||
|
||||
private HorobiDeathsWailAbility(final HorobiDeathsWailAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HorobiDeathsWailAbility copy() {
|
||||
return new HorobiDeathsWailAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
Permanent creature = game.getPermanent(event.getTargetId());
|
||||
if (creature != null && creature.isCreature(game)) {
|
||||
getEffects().get(0).setTargetPointer(new FixedTarget(event.getTargetId(), game));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a creature becomes the target of a spell or ability, destroy that creature.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,23 +1,18 @@
|
|||
|
||||
package mage.cards.j;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.CounterUnlessPaysEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SetTargetPointer;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.common.FilterCreatureCard;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.TargetStackObject;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -25,7 +20,7 @@ import mage.target.TargetStackObject;
|
|||
*/
|
||||
public final class JumpTrooper extends CardImpl {
|
||||
|
||||
private static final FilterCreatureCard filter = new FilterCreatureCard("Trooper creatures");
|
||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Trooper creature you control");
|
||||
|
||||
static {
|
||||
filter.add(SubType.TROOPER.getPredicate());
|
||||
|
|
@ -38,8 +33,10 @@ public final class JumpTrooper extends CardImpl {
|
|||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(1);
|
||||
|
||||
// Whenever a Trooper creature you control becomes the target of a spell or ability an opponent controls, counter that spell or abitlity unless its controller pays {2}.
|
||||
this.addAbility(new JumpTrooperTriggeredAbility(new CounterUnlessPaysEffect(new GenericManaCost(2))));
|
||||
// Whenever a Trooper creature you control becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {2}.
|
||||
this.addAbility(new BecomesTargetAnyTriggeredAbility(new CounterUnlessPaysEffect(new GenericManaCost(2))
|
||||
.setText("counter that spell or ability unless its controller pays {2}"),
|
||||
filter, StaticFilters.FILTER_SPELL_OR_ABILITY_OPPONENTS, SetTargetPointer.SPELL, false));
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -52,50 +49,3 @@ public final class JumpTrooper extends CardImpl {
|
|||
return new JumpTrooper(this);
|
||||
}
|
||||
}
|
||||
|
||||
class JumpTrooperTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Trooper creature you control");
|
||||
|
||||
static {
|
||||
filter.add(SubType.TROOPER.getPredicate());
|
||||
}
|
||||
|
||||
public JumpTrooperTriggeredAbility(Effect effect) {
|
||||
super(Zone.BATTLEFIELD, effect);
|
||||
}
|
||||
|
||||
private JumpTrooperTriggeredAbility(final JumpTrooperTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JumpTrooperTriggeredAbility copy() {
|
||||
return new JumpTrooperTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (game.getOpponents(this.controllerId).contains(event.getPlayerId())) {
|
||||
Permanent creature = game.getPermanent(event.getTargetId());
|
||||
if (creature != null && filter.match(creature, getControllerId(), this, game)) {
|
||||
this.getTargets().clear();
|
||||
TargetStackObject target = new TargetStackObject();
|
||||
target.add(event.getSourceId(), game);
|
||||
this.addTarget(target);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a Trooper creature you control becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {2}.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package mage.cards.k;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.BecomesTargetTriggeredAbility;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.common.PhaseInTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.PhaseOutTargetEffect;
|
||||
|
|
@ -43,7 +43,7 @@ public final class KingOfTheOathbreakers extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Whenever King of the Oathbreakers or another Spirit you control becomes the target of a spell, it phases out.
|
||||
this.addAbility(new BecomesTargetTriggeredAbility(
|
||||
this.addAbility(new BecomesTargetAnyTriggeredAbility(
|
||||
new PhaseOutTargetEffect("it"),
|
||||
filter, StaticFilters.FILTER_SPELL_A
|
||||
));
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package mage.cards.m;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.LoyaltyAbility;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.BecomesTargetOpponentAllTriggeredAbility;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.common.delayed.AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
|
|
@ -52,8 +52,8 @@ public final class MilaCraftyCompanion extends ModalDoubleFacedCard {
|
|||
this.getLeftHalfCard().addAbility(new MilaCraftyCompanionTriggeredAbility());
|
||||
|
||||
// Whenever a permanent you control becomes the target of a spell or ability and opponent controls, you may draw a card.
|
||||
this.getLeftHalfCard().addAbility(new BecomesTargetOpponentAllTriggeredAbility(
|
||||
new DrawCardSourceControllerEffect(1), true
|
||||
this.getLeftHalfCard().addAbility(new BecomesTargetAnyTriggeredAbility(new DrawCardSourceControllerEffect(1),
|
||||
StaticFilters.FILTER_CONTROLLED_A_PERMANENT, StaticFilters.FILTER_SPELL_OR_ABILITY_OPPONENTS, SetTargetPointer.NONE, true
|
||||
));
|
||||
|
||||
// 2.
|
||||
|
|
|
|||
|
|
@ -1,22 +1,17 @@
|
|||
|
||||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.constants.SetTargetPointer;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TheElk801
|
||||
* @author xenohedron
|
||||
*/
|
||||
public final class ShapersSanctuary extends CardImpl {
|
||||
|
||||
|
|
@ -24,7 +19,9 @@ public final class ShapersSanctuary extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}");
|
||||
|
||||
// Whenever a creature you control becomes the target of a spell or ability an opponent controls, you may draw a card.
|
||||
this.addAbility(new CreaturesYouControlTargetedTriggeredAbility(new DrawCardSourceControllerEffect(1)));
|
||||
this.addAbility(new BecomesTargetAnyTriggeredAbility(new DrawCardSourceControllerEffect(1),
|
||||
StaticFilters.FILTER_CONTROLLED_A_CREATURE, StaticFilters.FILTER_SPELL_OR_ABILITY_OPPONENTS,
|
||||
SetTargetPointer.NONE, true));
|
||||
}
|
||||
|
||||
private ShapersSanctuary(final ShapersSanctuary card) {
|
||||
|
|
@ -36,42 +33,3 @@ public final class ShapersSanctuary extends CardImpl {
|
|||
return new ShapersSanctuary(this);
|
||||
}
|
||||
}
|
||||
|
||||
class CreaturesYouControlTargetedTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
public CreaturesYouControlTargetedTriggeredAbility(Effect effect) {
|
||||
super(Zone.BATTLEFIELD, effect, true);
|
||||
}
|
||||
|
||||
private CreaturesYouControlTargetedTriggeredAbility(final CreaturesYouControlTargetedTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CreaturesYouControlTargetedTriggeredAbility copy() {
|
||||
return new CreaturesYouControlTargetedTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
|
||||
Player targetter = game.getPlayer(event.getPlayerId());
|
||||
if (permanent != null && permanent.isControlledBy(this.getControllerId()) && permanent.isCreature(game)) {
|
||||
Object object = game.getObject(event.getSourceId());
|
||||
if (object != null && targetter != null && targetter.hasOpponent(this.getControllerId(), game)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a creature you control becomes the target of a spell or ability an opponent controls, you may draw a card.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,30 +1,35 @@
|
|||
package mage.cards.s;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.game.permanent.token.WolfToken;
|
||||
import mage.game.stack.StackObject;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author fireshoes
|
||||
* @author xenohedron
|
||||
*/
|
||||
public final class SilverfurPartisan extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterControlledPermanent("a Wolf or Werewolf you control");
|
||||
|
||||
static {
|
||||
filter.add(Predicates.or(
|
||||
SubType.WOLF.getPredicate(),
|
||||
SubType.WEREWOLF.getPredicate()
|
||||
));
|
||||
}
|
||||
|
||||
public SilverfurPartisan(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
|
||||
this.subtype.add(SubType.WOLF);
|
||||
|
|
@ -36,7 +41,8 @@ public final class SilverfurPartisan extends CardImpl {
|
|||
this.addAbility(TrampleAbility.getInstance());
|
||||
|
||||
// Whenever a Wolf or Werewolf you control becomes the target of an instant or sorcery spell, create a 2/2 green Wolf creature token.
|
||||
this.addAbility(new CreaturesYouControlBecomesTargetTriggeredAbility(new CreateTokenEffect(new WolfToken())));
|
||||
this.addAbility(new BecomesTargetAnyTriggeredAbility(new CreateTokenEffect(new WolfToken()),
|
||||
filter, StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY));
|
||||
}
|
||||
|
||||
private SilverfurPartisan(final SilverfurPartisan card) {
|
||||
|
|
@ -48,54 +54,3 @@ public final class SilverfurPartisan extends CardImpl {
|
|||
return new SilverfurPartisan(this);
|
||||
}
|
||||
}
|
||||
|
||||
class CreaturesYouControlBecomesTargetTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
public CreaturesYouControlBecomesTargetTriggeredAbility(Effect effect) {
|
||||
super(Zone.BATTLEFIELD, effect);
|
||||
}
|
||||
|
||||
private CreaturesYouControlBecomesTargetTriggeredAbility(final CreaturesYouControlBecomesTargetTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CreaturesYouControlBecomesTargetTriggeredAbility copy() {
|
||||
return new CreaturesYouControlBecomesTargetTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
Permanent permanent = game.getPermanent(event.getTargetId());
|
||||
MageObject object = game.getObject(event.getSourceId());
|
||||
if (permanent != null
|
||||
&& object != null
|
||||
&& permanent.isControlledBy(this.controllerId)
|
||||
&& (permanent.hasSubtype(SubType.WOLF, game)
|
||||
|| permanent.hasSubtype(SubType.WEREWOLF, game))) {
|
||||
if (object instanceof StackObject) {
|
||||
if (object.isInstant(game)
|
||||
|| object.isSorcery(game)) {
|
||||
if (getTargets().isEmpty()) {
|
||||
for (Effect effect : getEffects()) {
|
||||
effect.setTargetPointer(new FixedTarget(event.getTargetId(), game));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a Wolf or Werewolf you control becomes the target of an instant or sorcery spell, create a 2/2 green Wolf creature token.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package mage.cards.s;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldAbility;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
|
|
@ -13,14 +13,11 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.constants.TargetController;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.FilterSpell;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.permanent.token.InsectToken;
|
||||
import mage.game.stack.Spell;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -29,6 +26,11 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class SwarmShambler extends CardImpl {
|
||||
|
||||
private static final FilterSpell filter = new FilterSpell("a spell an opponent controls");
|
||||
static {
|
||||
filter.add(TargetController.OPPONENT.getControllerPredicate());
|
||||
}
|
||||
|
||||
public SwarmShambler(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}");
|
||||
|
||||
|
|
@ -44,7 +46,8 @@ public final class SwarmShambler extends CardImpl {
|
|||
));
|
||||
|
||||
// Whenever a creature you control with a +1/+1 counter on it becomes the target of a spell an opponent controls, create a 1/1 green Insect creature token.
|
||||
this.addAbility(new SwarmShamblerTriggeredAbility());
|
||||
this.addAbility(new BecomesTargetAnyTriggeredAbility(new CreateTokenEffect(new InsectToken()),
|
||||
StaticFilters.FILTER_A_CONTROLLED_CREATURE_P1P1, filter));
|
||||
|
||||
// {1}, {T}: Put a +1/+1 counter on Swarm Shambler.
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
|
|
@ -63,40 +66,3 @@ public final class SwarmShambler extends CardImpl {
|
|||
return new SwarmShambler(this);
|
||||
}
|
||||
}
|
||||
|
||||
class SwarmShamblerTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
SwarmShamblerTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new CreateTokenEffect(new InsectToken()), false);
|
||||
}
|
||||
|
||||
private SwarmShamblerTriggeredAbility(final SwarmShamblerTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SwarmShamblerTriggeredAbility copy() {
|
||||
return new SwarmShamblerTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
Spell sourceObject = game.getSpell(event.getSourceId());
|
||||
Permanent permanent = game.getPermanent(event.getTargetId());
|
||||
return sourceObject != null
|
||||
&& permanent != null
|
||||
&& StaticFilters.FILTER_CONTROLLED_CREATURE_P1P1.match(permanent, getControllerId(), this, game)
|
||||
&& StaticFilters.FILTER_SPELL_OR_ABILITY_OPPONENTS.match(sourceObject, getControllerId(), this, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a creature you control with a +1/+1 counter on it " +
|
||||
"becomes the target of a spell an opponent controls, create a 1/1 green Insect creature token.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +1,29 @@
|
|||
|
||||
package mage.cards.t;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SetTargetPointer;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
* @author xenohedron
|
||||
*/
|
||||
public final class ThunderbreakRegent extends CardImpl {
|
||||
|
||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Dragon you control");
|
||||
static {
|
||||
filter.add(SubType.DRAGON.getPredicate());
|
||||
}
|
||||
|
||||
public ThunderbreakRegent(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}");
|
||||
this.subtype.add(SubType.DRAGON);
|
||||
|
|
@ -34,7 +34,8 @@ public final class ThunderbreakRegent extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Whenever a Dragon you control becomes the target of a spell or ability your opponent controls, Thunderbreak Regent deals 3 damage to that player.
|
||||
this.addAbility(new ThunderbreakRegentTriggeredAbility(new DamageTargetEffect(3)));
|
||||
this.addAbility(new BecomesTargetAnyTriggeredAbility(new DamageTargetEffect(3),
|
||||
filter, StaticFilters.FILTER_SPELL_OR_ABILITY_OPPONENTS, SetTargetPointer.PLAYER, false));
|
||||
}
|
||||
|
||||
private ThunderbreakRegent(final ThunderbreakRegent card) {
|
||||
|
|
@ -46,49 +47,3 @@ public final class ThunderbreakRegent extends CardImpl {
|
|||
return new ThunderbreakRegent(this);
|
||||
}
|
||||
}
|
||||
|
||||
class ThunderbreakRegentTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Sliver creature you control");
|
||||
|
||||
static {
|
||||
filter.add(SubType.DRAGON.getPredicate());
|
||||
}
|
||||
|
||||
public ThunderbreakRegentTriggeredAbility(Effect effect) {
|
||||
super(Zone.BATTLEFIELD, effect);
|
||||
}
|
||||
|
||||
private ThunderbreakRegentTriggeredAbility(final ThunderbreakRegentTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThunderbreakRegentTriggeredAbility copy() {
|
||||
return new ThunderbreakRegentTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (game.getOpponents(this.controllerId).contains(event.getPlayerId())) {
|
||||
Permanent creature = game.getPermanent(event.getTargetId());
|
||||
if (creature != null && filter.match(creature, getControllerId(), this, game)) {
|
||||
for (Effect effect : this.getEffects()) {
|
||||
effect.setTargetPointer(new FixedTarget(event.getPlayerId()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a Dragon you control becomes the target of a spell or ability an opponent controls, {this} deals 3 damage to that player.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,28 +1,22 @@
|
|||
package mage.cards.v;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.common.FightTargetSourceEffect;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.effects.common.counter.AddPoisonCounterTargetEffect;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.ToxicAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import mage.constants.SetTargetPointer;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.stack.Spell;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetOpponent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
* @author xenohedron
|
||||
*/
|
||||
public final class VeneratedRotpriest extends CardImpl {
|
||||
|
||||
|
|
@ -38,7 +32,10 @@ public final class VeneratedRotpriest extends CardImpl {
|
|||
this.addAbility(new ToxicAbility(1));
|
||||
|
||||
// Whenever a creature you control becomes the target of a spell, target opponent gets a poison counter.
|
||||
this.addAbility(new VeneratedRotpriestTriggeredAbility());
|
||||
Ability ability = new BecomesTargetAnyTriggeredAbility(new AddPoisonCounterTargetEffect(1),
|
||||
StaticFilters.FILTER_CONTROLLED_A_CREATURE, StaticFilters.FILTER_SPELL_A, SetTargetPointer.NONE, false);
|
||||
ability.addTarget(new TargetOpponent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private VeneratedRotpriest(final VeneratedRotpriest card) {
|
||||
|
|
@ -50,41 +47,3 @@ public final class VeneratedRotpriest extends CardImpl {
|
|||
return new VeneratedRotpriest(this);
|
||||
}
|
||||
}
|
||||
|
||||
class VeneratedRotpriestTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
VeneratedRotpriestTriggeredAbility() {
|
||||
super(Zone.BATTLEFIELD, new AddPoisonCounterTargetEffect(1));
|
||||
this.addTarget(new TargetOpponent());
|
||||
}
|
||||
|
||||
private VeneratedRotpriestTriggeredAbility(final VeneratedRotpriestTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VeneratedRotpriestTriggeredAbility copy() {
|
||||
return new VeneratedRotpriestTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
Permanent permanent = game.getPermanent(event.getTargetId());
|
||||
MageObject object = game.getObject(event.getSourceId());
|
||||
return permanent != null
|
||||
&& object != null
|
||||
&& isControlledBy(permanent.getControllerId())
|
||||
&& permanent.isCreature(game)
|
||||
&& object instanceof Spell;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a creature you control becomes the target of a spell, target opponent gets a poison counter.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,24 +1,17 @@
|
|||
package mage.cards.w;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageObject;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.common.BecomesTargetAnyTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.stack.Spell;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author noxx
|
||||
* @author xenohedron
|
||||
*/
|
||||
public final class WildDefiance extends CardImpl {
|
||||
|
||||
|
|
@ -26,7 +19,8 @@ public final class WildDefiance extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}");
|
||||
|
||||
// Whenever a creature you control becomes the target of an instant or sorcery spell, that creature gets +3/+3 until end of turn.
|
||||
this.addAbility(new CreaturesYouControlBecomesTargetTriggeredAbility(new BoostTargetEffect(3, 3, Duration.EndOfTurn)));
|
||||
this.addAbility(new BecomesTargetAnyTriggeredAbility(new BoostTargetEffect(3, 3, Duration.EndOfTurn),
|
||||
StaticFilters.FILTER_CONTROLLED_A_CREATURE, StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY));
|
||||
}
|
||||
|
||||
private WildDefiance(final WildDefiance card) {
|
||||
|
|
@ -38,51 +32,3 @@ public final class WildDefiance extends CardImpl {
|
|||
return new WildDefiance(this);
|
||||
}
|
||||
}
|
||||
|
||||
class CreaturesYouControlBecomesTargetTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
public CreaturesYouControlBecomesTargetTriggeredAbility(Effect effect) {
|
||||
super(Zone.BATTLEFIELD, effect);
|
||||
}
|
||||
|
||||
private CreaturesYouControlBecomesTargetTriggeredAbility(final CreaturesYouControlBecomesTargetTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CreaturesYouControlBecomesTargetTriggeredAbility copy() {
|
||||
return new CreaturesYouControlBecomesTargetTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
Permanent permanent = game.getPermanent(event.getTargetId());
|
||||
if (permanent != null
|
||||
&& permanent.isControlledBy(this.controllerId)
|
||||
&& permanent.isCreature(game)) {
|
||||
MageObject object = game.getObject(event.getSourceId());
|
||||
if (object instanceof Spell) {
|
||||
Card c = (Spell) object;
|
||||
if (c.isInstantOrSorcery(game)) {
|
||||
if (getTargets().isEmpty()) {
|
||||
for (Effect effect : getEffects()) {
|
||||
effect.setTargetPointer(new FixedTarget(event.getTargetId(), game));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a creature you control becomes the target of an instant or sorcery spell, that creature gets +3/+3 until end of turn.";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,97 @@
|
|||
package mage.abilities.common;
|
||||
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.constants.SetTargetPointer;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.FilterStackObject;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.stack.StackObject;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
/**
|
||||
* @author xenohedron
|
||||
*/
|
||||
public class BecomesTargetAnyTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
private final FilterPermanent filterTarget;
|
||||
private final FilterStackObject filterStack;
|
||||
private final SetTargetPointer setTargetPointer;
|
||||
|
||||
public BecomesTargetAnyTriggeredAbility(Effect effect, FilterPermanent filterTarget) {
|
||||
this(effect, filterTarget, StaticFilters.FILTER_SPELL_OR_ABILITY_A);
|
||||
}
|
||||
|
||||
/**
|
||||
* "Whenever [a filterTarget] becomes the target of [a filterStack], [effect]"
|
||||
* @param effect defaults to SetTargetPointer.PERMANENT
|
||||
* @param filterTarget permanents to check being targetted
|
||||
* @param filterStack spells/abilities to check targeting
|
||||
*/
|
||||
public BecomesTargetAnyTriggeredAbility(Effect effect, FilterPermanent filterTarget, FilterStackObject filterStack) {
|
||||
this(effect, filterTarget, filterStack, SetTargetPointer.PERMANENT, false);
|
||||
}
|
||||
|
||||
public BecomesTargetAnyTriggeredAbility(Effect effect, FilterPermanent filterTarget, FilterStackObject filterStack,
|
||||
SetTargetPointer setTargetPointer, boolean optional) {
|
||||
super(Zone.BATTLEFIELD, effect, optional);
|
||||
this.filterTarget = filterTarget;
|
||||
this.filterStack = filterStack;
|
||||
this.setTargetPointer = setTargetPointer;
|
||||
setTriggerPhrase("Whenever " + filterTarget.getMessage() + " becomes the target of "
|
||||
+ filterStack.getMessage() + ", ");
|
||||
}
|
||||
|
||||
protected BecomesTargetAnyTriggeredAbility(final BecomesTargetAnyTriggeredAbility ability) {
|
||||
super(ability);
|
||||
this.filterTarget = ability.filterTarget;
|
||||
this.filterStack = ability.filterStack;
|
||||
this.setTargetPointer = ability.setTargetPointer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BecomesTargetAnyTriggeredAbility copy() {
|
||||
return new BecomesTargetAnyTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
|
||||
if (permanent == null || !filterTarget.match(permanent, getControllerId(), this, game)) {
|
||||
return false;
|
||||
}
|
||||
StackObject targetingObject = CardUtil.getTargetingStackObject(event, game);
|
||||
if (targetingObject == null || !filterStack.match(targetingObject, getControllerId(), this, game)) {
|
||||
return false;
|
||||
}
|
||||
if (!CardUtil.checkTargetMap(this.id, targetingObject, event, game)) {
|
||||
return false;
|
||||
}
|
||||
switch (setTargetPointer) {
|
||||
case PERMANENT:
|
||||
this.getAllEffects().setTargetPointer(new FixedTarget(permanent.getId(), game));
|
||||
break;
|
||||
case PLAYER:
|
||||
this.getAllEffects().setTargetPointer(new FixedTarget(targetingObject.getControllerId(), game));
|
||||
break;
|
||||
case SPELL:
|
||||
this.getAllEffects().setTargetPointer(new FixedTarget(targetingObject.getId()));
|
||||
break;
|
||||
case NONE:
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Unsupported SetTargetPointer in BecomesTargetAnyTriggeredAbility");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,83 +0,0 @@
|
|||
package mage.abilities.common;
|
||||
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.stack.StackObject;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author weirddan455
|
||||
*/
|
||||
public class BecomesTargetOpponentAllTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
private final FilterPermanent filter;
|
||||
|
||||
public BecomesTargetOpponentAllTriggeredAbility(Effect effect, boolean optional) {
|
||||
this(effect, StaticFilters.FILTER_CONTROLLED_A_PERMANENT, optional);
|
||||
}
|
||||
|
||||
public BecomesTargetOpponentAllTriggeredAbility(Effect effect, FilterPermanent filter, boolean optional) {
|
||||
super(Zone.BATTLEFIELD, effect, optional);
|
||||
this.filter = filter;
|
||||
setTriggerPhrase("Whenever " + filter + " becomes the target of a spell or ability an opponent controls, ");
|
||||
}
|
||||
|
||||
private BecomesTargetOpponentAllTriggeredAbility(final BecomesTargetOpponentAllTriggeredAbility ability) {
|
||||
super(ability);
|
||||
this.filter = ability.filter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BecomesTargetOpponentAllTriggeredAbility copy() {
|
||||
return new BecomesTargetOpponentAllTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
StackObject sourceObject = game.getStack().getStackObject(event.getSourceId());
|
||||
if (sourceObject == null) {
|
||||
return false;
|
||||
}
|
||||
Player targetter = game.getPlayer(event.getPlayerId());
|
||||
if (targetter == null || !targetter.hasOpponent(this.controllerId, game)) {
|
||||
return false;
|
||||
}
|
||||
Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
|
||||
if (permanent == null || !filter.match(permanent, getControllerId(), this, game)) {
|
||||
return false;
|
||||
}
|
||||
// If a spell or ability an opponent controls targets a single permanent you control more than once,
|
||||
// Battle Mammoth’s triggered ability will trigger only once.
|
||||
// However, if a spell or ability an opponent controls targets multiple permanents you control,
|
||||
// Battle Mammoth’s triggered ability will trigger once for each of those permanents.
|
||||
|
||||
// targetMap - key - targetId, value - Set of stackObject Ids
|
||||
Map<UUID, Set<UUID>> targetMap = (Map<UUID, Set<UUID>>) game.getState().getValue("targetMap" + this.id);
|
||||
if (targetMap == null) {
|
||||
targetMap = new HashMap<>();
|
||||
}
|
||||
Set<UUID> sourceObjects = targetMap.get(event.getTargetId());
|
||||
if (sourceObjects == null) {
|
||||
sourceObjects = new HashSet<>();
|
||||
}
|
||||
if (!sourceObjects.add(sourceObject.getId())) {
|
||||
return false;
|
||||
}
|
||||
targetMap.put(event.getTargetId(), sourceObjects);
|
||||
game.getState().setValue("targetMap" + this.id, targetMap);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
package mage.abilities.common;
|
||||
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.FilterStackObject;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.game.stack.StackObject;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
/**
|
||||
* @author Susucr
|
||||
*/
|
||||
public class BecomesTargetTriggeredAbility extends TriggeredAbilityImpl {
|
||||
|
||||
private final FilterPermanent filterTarget;
|
||||
private final FilterStackObject filterStack;
|
||||
|
||||
public BecomesTargetTriggeredAbility(Effect effect, FilterPermanent filterTarget) {
|
||||
this(effect, filterTarget, StaticFilters.FILTER_SPELL_OR_ABILITY_A);
|
||||
}
|
||||
|
||||
public BecomesTargetTriggeredAbility(Effect effect, FilterPermanent filterTarget, FilterStackObject filterStack) {
|
||||
this(effect, filterTarget, filterStack, false);
|
||||
}
|
||||
|
||||
public BecomesTargetTriggeredAbility(Effect effect, FilterPermanent filterTarget, FilterStackObject filterStack,
|
||||
boolean optional) {
|
||||
super(Zone.BATTLEFIELD, effect, optional);
|
||||
this.filterTarget = filterTarget;
|
||||
this.filterStack = filterStack;
|
||||
setTriggerPhrase("Whenever " + filterTarget.getMessage() + " becomes the target of "
|
||||
+ filterStack.getMessage() + ", ");
|
||||
}
|
||||
|
||||
protected BecomesTargetTriggeredAbility(final BecomesTargetTriggeredAbility ability) {
|
||||
super(ability);
|
||||
this.filterTarget = ability.filterTarget;
|
||||
this.filterStack = ability.filterStack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BecomesTargetTriggeredAbility copy() {
|
||||
return new BecomesTargetTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.TARGETED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
StackObject sourceObject = game.getStack().getStackObject(event.getSourceId());
|
||||
if (sourceObject == null
|
||||
|| !filterStack.match(sourceObject, getControllerId(), this, game)) {
|
||||
return false;
|
||||
}
|
||||
Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId());
|
||||
if (permanent == null
|
||||
|| !filterTarget.match(permanent, getControllerId(), this, game)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
getEffects().setTargetPointer(new FixedTarget(event.getTargetId()));
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue