forked from External/mage
more refactoring of ConditionalInterveningIfTriggeredAbility
This commit is contained in:
parent
2e8603d26a
commit
6bbd4f457c
29 changed files with 188 additions and 296 deletions
|
|
@ -10,7 +10,6 @@ import mage.abilities.condition.common.IsStepCondition;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.decorator.ConditionalActivatedAbility;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.effects.common.counter.RemoveCounterSourceEffect;
|
||||
|
|
@ -44,12 +43,9 @@ public final class ClockworkBeast extends CardImpl {
|
|||
));
|
||||
|
||||
// At end of combat, if Clockwork Beast attacked or blocked this combat, remove a +1/+0 counter from it.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EndOfCombatTriggeredAbility(
|
||||
new RemoveCounterSourceEffect(CounterType.P1P0.createInstance()), false
|
||||
), AttackedOrBlockedThisCombatSourceCondition.instance, "At end of combat, " +
|
||||
"if {this} attacked or blocked this combat, remove a +1/+0 counter from it."
|
||||
), new AttackedOrBlockedThisCombatWatcher());
|
||||
this.addAbility(new EndOfCombatTriggeredAbility(
|
||||
new RemoveCounterSourceEffect(CounterType.P1P0.createInstance()).setText("remove a +1/+0 counter from it"), false
|
||||
).withInterveningIf(AttackedOrBlockedThisCombatSourceCondition.instance), new AttackedOrBlockedThisCombatWatcher());
|
||||
|
||||
// {X}, {tap}: Put up to X +1/+0 counters on Clockwork Beast. This ability can't cause the total number of +1/+0 counters on Clockwork Beast to be greater than seven. Activate this ability only during your upkeep.
|
||||
Ability ability = new ConditionalActivatedAbility(
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@ package mage.cards.c;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.AdamantCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AbilityWord;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
|
||||
|
|
@ -25,11 +25,8 @@ public final class ClockworkServant extends CardImpl {
|
|||
this.toughness = new MageInt(3);
|
||||
|
||||
// Adamant - When Clockwork Servant enters the battlefield, if at least three mana of the same color was spent to cast it, draw a card.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)),
|
||||
AdamantCondition.ANY, "<br><i>Adamant</i> — When {this} enters, " +
|
||||
"if at least three mana of the same color was spent to cast it, draw a card."
|
||||
));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1))
|
||||
.withInterveningIf(AdamantCondition.ANY).setAbilityWord(AbilityWord.ADAMANT));
|
||||
}
|
||||
|
||||
private ClockworkServant(final ClockworkServant card) {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import mage.abilities.condition.common.IsStepCondition;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.decorator.ConditionalActivatedAbility;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
|
|
@ -52,12 +51,9 @@ public final class ClockworkSteed extends CardImpl {
|
|||
this.addAbility(new SimpleEvasionAbility(new CantBeBlockedByCreaturesSourceEffect(filter, Duration.WhileOnBattlefield)));
|
||||
|
||||
// At end of combat, if Clockwork Steed attacked or blocked this combat, remove a +1/+0 counter from it.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EndOfCombatTriggeredAbility(
|
||||
new RemoveCounterSourceEffect(CounterType.P1P0.createInstance()), false
|
||||
), AttackedOrBlockedThisCombatSourceCondition.instance, "At end of combat, " +
|
||||
"if {this} attacked or blocked this combat, remove a +1/+0 counter from it."
|
||||
), new AttackedOrBlockedThisCombatWatcher());
|
||||
this.addAbility(new EndOfCombatTriggeredAbility(
|
||||
new RemoveCounterSourceEffect(CounterType.P1P0.createInstance()).setText("remove a +1/+0 counter from it"), false
|
||||
).withInterveningIf(AttackedOrBlockedThisCombatSourceCondition.instance), new AttackedOrBlockedThisCombatWatcher());
|
||||
|
||||
// {X}, {tap}: Put up to X +1/+0 counters on Clockwork Steed. This ability can't cause the total number of +1/+0 counters on Clockwork Steed to be greater than four. Activate this ability only during your upkeep.
|
||||
Ability ability = new ConditionalActivatedAbility(
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import mage.abilities.condition.common.IsStepCondition;
|
|||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.decorator.ConditionalActivatedAbility;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
|
|
@ -56,12 +55,9 @@ public final class ClockworkSwarm extends CardImpl {
|
|||
this.addAbility(new SimpleEvasionAbility(new CantBeBlockedByCreaturesSourceEffect(filter, Duration.WhileOnBattlefield)));
|
||||
|
||||
// At end of combat, if Clockwork Swarm attacked or blocked this combat, remove a +1/+0 counter from it.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EndOfCombatTriggeredAbility(
|
||||
new RemoveCounterSourceEffect(CounterType.P1P0.createInstance()), false
|
||||
), AttackedOrBlockedThisCombatSourceCondition.instance, "At end of combat, " +
|
||||
"if {this} attacked or blocked this combat, remove a +1/+0 counter from it."
|
||||
), new AttackedOrBlockedThisCombatWatcher());
|
||||
this.addAbility(new EndOfCombatTriggeredAbility(
|
||||
new RemoveCounterSourceEffect(CounterType.P1P0.createInstance()).setText("remove a +1/+0 counter from it"), false
|
||||
).withInterveningIf(AttackedOrBlockedThisCombatSourceCondition.instance), new AttackedOrBlockedThisCombatWatcher());
|
||||
|
||||
// {X}, {tap}: Put up to X +1/+0 counters on Clockwork Swarm. This ability can't cause the total number of +1/+0 counters on Clockwork Swarm to be greater than four. Activate this ability only during your upkeep.
|
||||
Ability ability = new ConditionalActivatedAbility(
|
||||
|
|
|
|||
|
|
@ -1,12 +1,9 @@
|
|||
|
||||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.Mana;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.CastFromHandSourcePermanentCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.mana.BasicManaEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -14,8 +11,9 @@ import mage.constants.CardType;
|
|||
import mage.constants.SubType;
|
||||
import mage.watchers.common.CastFromHandWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author ilcartographer
|
||||
*/
|
||||
public final class CoalStoker extends CardImpl {
|
||||
|
|
@ -27,11 +25,8 @@ public final class CoalStoker extends CardImpl {
|
|||
this.toughness = new MageInt(3);
|
||||
|
||||
// When Coal Stoker enters the battlefield, if you cast it from your hand, add {R}{R}{R}.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new BasicManaEffect(Mana.RedMana(3)), false),
|
||||
CastFromHandSourcePermanentCondition.instance,
|
||||
"When {this} enters, if you cast it from your hand, add {R}{R}{R}."),
|
||||
new CastFromHandWatcher());
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new BasicManaEffect(Mana.RedMana(3)))
|
||||
.withInterveningIf(CastFromHandSourcePermanentCondition.instance), new CastFromHandWatcher());
|
||||
}
|
||||
|
||||
private CoalStoker(final CoalStoker card) {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import mage.MageInt;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.DescendCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -29,11 +28,8 @@ public final class CoatiScavenger extends CardImpl {
|
|||
this.toughness = new MageInt(2);
|
||||
|
||||
// Descend 4 -- When Coati Scavenger enters the battlefield, if there are four or more permanent cards in your graveyard, return target permanent card from your graveyard to your hand.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()),
|
||||
DescendCondition.FOUR, "When {this} enters, if there are four or more " +
|
||||
"permanent cards in your graveyard, return target permanent card from your graveyard to your hand."
|
||||
);
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect())
|
||||
.withInterveningIf(DescendCondition.FOUR);
|
||||
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_PERMANENT));
|
||||
this.addAbility(ability.setAbilityWord(AbilityWord.DESCEND_4).addHint(DescendCondition.getHint()));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import mage.MageObjectReference;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||
import mage.abilities.keyword.VigilanceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -39,11 +38,8 @@ public final class CodespellCleric extends CardImpl {
|
|||
this.addAbility(VigilanceAbility.getInstance());
|
||||
|
||||
// When Codespell Cleric enters the battlefield, if it was the second spell you cast this turn, put a +1/+1 counter on target creature.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance())),
|
||||
CodespellClericCondition.instance, "When {this} enters, " +
|
||||
"if it was the second spell you cast this turn, put a +1/+1 counter on target creature."
|
||||
);
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()))
|
||||
.withInterveningIf(CodespellClericCondition.instance);
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability, new CodespellClericWatcher());
|
||||
}
|
||||
|
|
@ -66,6 +62,11 @@ enum CodespellClericCondition implements Condition {
|
|||
CodespellClericWatcher watcher = game.getState().getWatcher(CodespellClericWatcher.class);
|
||||
return watcher != null && watcher.checkSpell(source, game);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "it was the second spell you cast this turn";
|
||||
}
|
||||
}
|
||||
|
||||
class CodespellClericWatcher extends Watcher {
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.condition.common.FerociousCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.hint.common.FerociousHint;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -20,15 +19,8 @@ public final class ColossalMajesty extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}");
|
||||
|
||||
// At the beginning of your upkeep, if you control a creature with power 4 or greater, draw a card.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfUpkeepTriggeredAbility(
|
||||
new DrawCardSourceControllerEffect(1), false
|
||||
),
|
||||
FerociousCondition.instance,
|
||||
"At the beginning of your upkeep, "
|
||||
+ "if you control a creature with power 4 or greater, "
|
||||
+ "draw a card."
|
||||
).addHint(FerociousHint.instance));
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DrawCardSourceControllerEffect(1))
|
||||
.withInterveningIf(FerociousCondition.instance).addHint(FerociousHint.instance));
|
||||
}
|
||||
|
||||
private ColossalMajesty(final ColossalMajesty card) {
|
||||
|
|
|
|||
|
|
@ -1,20 +1,16 @@
|
|||
|
||||
package mage.cards.c;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||
import mage.abilities.effects.common.ReturnToHandSourceEffect;
|
||||
import mage.abilities.hint.ValueHint;
|
||||
import mage.abilities.hint.common.PermanentsYouControlHint;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.ComparisonType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -25,7 +21,7 @@ import java.util.UUID;
|
|||
public final class ComplexAutomaton extends CardImpl {
|
||||
|
||||
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
|
||||
StaticFilters.FILTER_CONTROLLED_PERMANENT, ComparisonType.MORE_THAN, 6
|
||||
new FilterControlledPermanent("you control seven or more permanents"), ComparisonType.MORE_THAN, 6
|
||||
);
|
||||
|
||||
public ComplexAutomaton(UUID ownerId, CardSetInfo setInfo) {
|
||||
|
|
@ -36,12 +32,8 @@ public final class ComplexAutomaton extends CardImpl {
|
|||
this.toughness = new MageInt(4);
|
||||
|
||||
// At the beginning of your upkeep, if you control seven or more permanents, return Complex Automaton to its owner's hand.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfUpkeepTriggeredAbility(
|
||||
new ReturnToHandSourceEffect(true), false
|
||||
), condition, "At the beginning of your upkeep, " +
|
||||
"if you control seven or more permanents, return {this} to its owner's hand."
|
||||
).addHint(new ValueHint("Permanents you control", new PermanentsOnBattlefieldCount(new FilterControlledPermanent()))));
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new ReturnToHandSourceEffect(true))
|
||||
.withInterveningIf(condition).addHint(PermanentsYouControlHint.instance));
|
||||
}
|
||||
|
||||
private ComplexAutomaton(final ComplexAutomaton card) {
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -31,7 +29,7 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class ConfoundingConundrum extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterLandPermanent();
|
||||
private static final FilterPermanent filter = new FilterLandPermanent("a land an opponent controls");
|
||||
|
||||
static {
|
||||
filter.add(TargetController.OPPONENT.getControllerPredicate());
|
||||
|
|
@ -44,13 +42,10 @@ public final class ConfoundingConundrum extends CardImpl {
|
|||
this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)));
|
||||
|
||||
// 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
|
||||
), 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."
|
||||
), new ConfoundingConundrumWatcher());
|
||||
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
|
||||
Zone.BATTLEFIELD, new ConfoundingConundrumEffect(),
|
||||
filter, false, SetTargetPointer.PLAYER
|
||||
).withInterveningIf(ConfoundingConundrumCondition.instance), new ConfoundingConundrumWatcher());
|
||||
}
|
||||
|
||||
private ConfoundingConundrum(final ConfoundingConundrum card) {
|
||||
|
|
@ -69,17 +64,16 @@ enum ConfoundingConundrumCondition implements Condition {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
ConfoundingConundrumWatcher watcher = game.getState().getWatcher(ConfoundingConundrumWatcher.class);
|
||||
if (watcher == null) {
|
||||
return false;
|
||||
return watcher != null
|
||||
&& CardUtil
|
||||
.getEffectValueFromAbility(source, "permanentEnteringControllerId", UUID.class)
|
||||
.filter(watcher::checkPlayer)
|
||||
.isPresent();
|
||||
}
|
||||
Player player = null;
|
||||
for (Effect effect : source.getEffects()) {
|
||||
if (player != null) {
|
||||
break;
|
||||
}
|
||||
player = game.getPlayer(effect.getTargetPointer().getFirst(game, source));
|
||||
}
|
||||
return player != null && watcher.checkPlayer(player.getId());
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "that player had another land enter the battlefield under their control this turn";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -87,6 +81,7 @@ class ConfoundingConundrumEffect extends OneShotEffect {
|
|||
|
||||
ConfoundingConundrumEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "they return a land they control to its owner's hand";
|
||||
}
|
||||
|
||||
private ConfoundingConundrumEffect(final ConfoundingConundrumEffect effect) {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
|
||||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.condition.common.RenownedSourceCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||
import mage.abilities.keyword.FirstStrikeAbility;
|
||||
import mage.abilities.keyword.RenownAbility;
|
||||
|
|
@ -14,21 +12,15 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.filter.common.FilterAttackingCreature;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class ConsulsLieutenant extends CardImpl {
|
||||
|
||||
private static final FilterAttackingCreature filter = new FilterAttackingCreature("attacking creatures you control");
|
||||
|
||||
static {
|
||||
filter.add(TargetController.YOU.getControllerPredicate());
|
||||
}
|
||||
|
||||
public ConsulsLieutenant(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}{W}");
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
|
|
@ -38,13 +30,14 @@ public final class ConsulsLieutenant extends CardImpl {
|
|||
|
||||
// First strike
|
||||
this.addAbility(FirstStrikeAbility.getInstance());
|
||||
|
||||
// Renown 1
|
||||
this.addAbility(new RenownAbility(1));
|
||||
|
||||
// Whenever Consul's Lieutenant attacks, if it's renowned, other attacking creatures you control get +1/+1 until end of turn.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(new AttacksTriggeredAbility(
|
||||
new BoostControlledEffect(1, 1, Duration.EndOfTurn, filter, true), false),
|
||||
RenownedSourceCondition.instance,
|
||||
"Whenever Consul's Lieutenant attacks, if it's renowned, other attacking creatures you control get +1/+1 until end of turn."));
|
||||
this.addAbility(new AttacksTriggeredAbility(new BoostControlledEffect(
|
||||
1, 1, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, true
|
||||
)).withInterveningIf(RenownedSourceCondition.instance));
|
||||
}
|
||||
|
||||
private ConsulsLieutenant(final ConsulsLieutenant card) {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import mage.abilities.Ability;
|
|||
import mage.abilities.BatchTriggeredAbility;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.condition.common.CorruptedCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.PutCardFromHandOntoBattlefieldEffect;
|
||||
import mage.abilities.effects.common.counter.ProliferateEffect;
|
||||
|
|
@ -49,15 +48,10 @@ public final class ContaminantGrafter extends CardImpl {
|
|||
|
||||
// Corrupted — At the beginning of your end step, if an opponent has three or more poison
|
||||
// counters, draw a card, then you may put a land card from your hand onto the battlefield.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfEndStepTriggeredAbility(new DrawCardSourceControllerEffect(1)),
|
||||
CorruptedCondition.instance, "At the beginning of your end step, if an opponent has three or more poison " +
|
||||
"counters, draw a card, then you may put a land card from your hand onto the battlefield"
|
||||
);
|
||||
ability.addEffect(new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_LAND_A).concatBy("then"));
|
||||
ability.setAbilityWord(AbilityWord.CORRUPTED);
|
||||
ability.addHint(CorruptedCondition.getHint());
|
||||
this.addAbility(ability);
|
||||
Ability ability = new BeginningOfEndStepTriggeredAbility(new DrawCardSourceControllerEffect(1))
|
||||
.withInterveningIf(CorruptedCondition.instance);
|
||||
ability.addEffect(new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_LAND_A).concatBy(", then"));
|
||||
this.addAbility(ability.setAbilityWord(AbilityWord.CORRUPTED).addHint(CorruptedCondition.getHint()));
|
||||
}
|
||||
|
||||
private ContaminantGrafter(final ContaminantGrafter card) {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import mage.abilities.TriggeredAbility;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.condition.common.FatefulHourCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -13,7 +12,6 @@ import mage.constants.CardType;
|
|||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class ConvalescentCare extends CardImpl {
|
||||
|
|
@ -22,10 +20,9 @@ public final class ConvalescentCare extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}{W}");
|
||||
|
||||
// At the beginning of your upkeep, if you have 5 or less life, you gain 3 life and draw a card.
|
||||
TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(new GainLifeEffect(3));
|
||||
ability.addEffect(new DrawCardSourceControllerEffect(1));
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, FatefulHourCondition.instance,
|
||||
"At the beginning of your upkeep, if you have 5 or less life, you gain 3 life and draw a card."));
|
||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(new GainLifeEffect(3)).withInterveningIf(FatefulHourCondition.instance);
|
||||
ability.addEffect(new DrawCardSourceControllerEffect(1).concatBy("and"));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private ConvalescentCare(final ConvalescentCare card) {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import mage.MageInt;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.DescendCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -42,12 +41,7 @@ public final class CouncilOfEchoes extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// Descend 4 -- When Council of Echoes enters the battlefield, if there are four or more permanent cards in your graveyard, return up to one target nonland permanent other than Council of Echoes to its owner's hand.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), false),
|
||||
DescendCondition.FOUR, "When {this} enters, "
|
||||
+ "if there are four or more permanent cards in your graveyard, "
|
||||
+ "return up to one target nonland permanent other than {this} to its owner's hand"
|
||||
);
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), false).withInterveningIf(DescendCondition.FOUR);
|
||||
ability.addTarget(new TargetPermanent(0, 1, filter));
|
||||
this.addAbility(ability.addHint(DescendCondition.getHint()).setAbilityWord(AbilityWord.DESCEND_4));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import mage.abilities.common.ScryTriggeredAbility;
|
|||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||
import mage.abilities.costs.common.ExileSourceFromGraveCost;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.DoIfCostPaid;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -22,7 +21,7 @@ import java.util.UUID;
|
|||
public final class CouncilsDeliberation extends CardImpl {
|
||||
|
||||
private static final Condition condition
|
||||
= new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(SubType.ISLAND));
|
||||
= new PermanentsOnTheBattlefieldCondition(new FilterControlledPermanent(SubType.ISLAND, "you control an Island"));
|
||||
|
||||
public CouncilsDeliberation(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}");
|
||||
|
|
@ -31,15 +30,11 @@ public final class CouncilsDeliberation extends CardImpl {
|
|||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
|
||||
|
||||
// Whenever you scry, if you control an Island, you may exile Council's Deliberation from your graveyard. If you do, draw a card.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new ScryTriggeredAbility(
|
||||
this.addAbility(new ScryTriggeredAbility(
|
||||
Zone.GRAVEYARD,
|
||||
new DoIfCostPaid(
|
||||
new DrawCardSourceControllerEffect(1), new ExileSourceFromGraveCost()
|
||||
), false
|
||||
), condition, "Whenever you scry, if you control an Island, " +
|
||||
"you may exile {this} from your graveyard. If you do, draw a card."
|
||||
));
|
||||
new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new ExileSourceFromGraveCost()),
|
||||
false
|
||||
).withInterveningIf(condition));
|
||||
}
|
||||
|
||||
private CouncilsDeliberation(final CouncilsDeliberation card) {
|
||||
|
|
|
|||
|
|
@ -1,28 +1,30 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.YouGainedLifeCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.ControllerGainedLifeCount;
|
||||
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
|
||||
import mage.constants.ComparisonType;
|
||||
import mage.constants.SubType;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.target.common.TargetCardInYourGraveyard;
|
||||
import mage.watchers.common.PlayerGainedLifeWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author weirddan455
|
||||
*/
|
||||
public final class CourierBat extends CardImpl {
|
||||
|
||||
private static final Condition condition = new YouGainedLifeCondition();
|
||||
|
||||
public CourierBat(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
|
||||
|
||||
|
|
@ -34,13 +36,9 @@ public final class CourierBat extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// When Courier Bat enters the battlefield, if you gained life this turn, return up to one target creature card from your graveyard to your hand.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()),
|
||||
new YouGainedLifeCondition(),
|
||||
"When {this} enters, if you gained life this turn, return up to one target creature card from your graveyard to your hand."
|
||||
);
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()).withInterveningIf(condition);
|
||||
ability.addTarget(new TargetCardInYourGraveyard(0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
|
||||
this.addAbility(ability, new PlayerGainedLifeWatcher());
|
||||
this.addAbility(ability.addHint(ControllerGainedLifeCount.getHint()), new PlayerGainedLifeWatcher());
|
||||
}
|
||||
|
||||
private CourierBat(final CourierBat card) {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package mage.cards.c;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.CastFromEverywhereSourceCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.NextSpellCastHasAbilityEffect;
|
||||
import mage.abilities.keyword.FlashAbility;
|
||||
import mage.abilities.keyword.StormAbility;
|
||||
|
|
@ -35,12 +34,9 @@ public final class CracklingSpellslinger extends CardImpl {
|
|||
this.addAbility(FlashAbility.getInstance());
|
||||
|
||||
// When Crackling Spellslinger enters the battlefield, if you cast it, the next instant or sorcery spell you cast this turn has storm.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new NextSpellCastHasAbilityEffect(new StormAbility(), filter)),
|
||||
CastFromEverywhereSourceCondition.instance,
|
||||
"When {this} enters, if you cast it, "
|
||||
+ "the next instant or sorcery spell you cast this turn has storm"
|
||||
));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new NextSpellCastHasAbilityEffect(new StormAbility(), filter)
|
||||
).withInterveningIf(CastFromEverywhereSourceCondition.instance));
|
||||
}
|
||||
|
||||
private CracklingSpellslinger(final CracklingSpellslinger card) {
|
||||
|
|
|
|||
|
|
@ -1,17 +1,20 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.YouGainedLifeCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.ControllerGainedLifeCount;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
|
||||
import mage.abilities.keyword.IndestructibleAbility;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.*;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.game.permanent.token.CrestedSunmareToken;
|
||||
import mage.watchers.common.PlayerGainedLifeWatcher;
|
||||
|
|
@ -29,6 +32,8 @@ public final class CrestedSunmare extends CardImpl {
|
|||
filter.add(SubType.HORSE.getPredicate());
|
||||
}
|
||||
|
||||
private static final Condition condition = new YouGainedLifeCondition();
|
||||
|
||||
public CrestedSunmare(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}{W}");
|
||||
|
||||
|
|
@ -42,14 +47,9 @@ public final class CrestedSunmare extends CardImpl {
|
|||
)));
|
||||
|
||||
// At the beginning of each end step, if you gained life this turn, create a 5/5 white Horse creature token.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfEndStepTriggeredAbility(
|
||||
TargetController.ANY, new CreateTokenEffect(new CrestedSunmareToken()),
|
||||
false
|
||||
), new YouGainedLifeCondition(),
|
||||
"At the beginning of each end step, if you gained life this turn, " +
|
||||
"create a 5/5 white Horse creature token."
|
||||
).addHint(ControllerGainedLifeCount.getHint()), new PlayerGainedLifeWatcher());
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||
TargetController.ANY, new CreateTokenEffect(new CrestedSunmareToken()), false
|
||||
).withInterveningIf(condition).addHint(ControllerGainedLifeCount.getHint()), new PlayerGainedLifeWatcher());
|
||||
}
|
||||
|
||||
private CrestedSunmare(final CrestedSunmare card) {
|
||||
|
|
|
|||
|
|
@ -1,22 +1,21 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.CastFromEverywhereSourceCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.ReturnToHandFromBattlefieldAllEffect;
|
||||
import mage.abilities.keyword.EmergeAbility;
|
||||
import mage.constants.SubType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jimga150
|
||||
*/
|
||||
public final class CrestingMosasaurus extends CardImpl {
|
||||
|
|
@ -38,10 +37,9 @@ public final class CrestingMosasaurus extends CardImpl {
|
|||
this.addAbility(new EmergeAbility(this, "{6}{U}"));
|
||||
|
||||
// When Cresting Mosasaurus enters the battlefield, if you cast it, return each non-Dinosaur creature to its owner's hand.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new ReturnToHandFromBattlefieldAllEffect(filter), false),
|
||||
CastFromEverywhereSourceCondition.instance,
|
||||
"When {this} enters, if you cast it, return each non-Dinosaur creature to its owner's hand."));
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandFromBattlefieldAllEffect(filter)
|
||||
.setText("return each non-Dinosaur creature to its owner's hand"), false)
|
||||
.withInterveningIf(CastFromEverywhereSourceCondition.instance));
|
||||
}
|
||||
|
||||
private CrestingMosasaurus(final CrestingMosasaurus card) {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import mage.abilities.common.SimpleStaticAbility;
|
|||
import mage.abilities.condition.common.MonarchIsNotSetCondition;
|
||||
import mage.abilities.condition.common.MonarchIsSourceControllerCondition;
|
||||
import mage.abilities.costs.CostAdjuster;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||
import mage.abilities.effects.common.BecomesMonarchSourceEffect;
|
||||
|
|
@ -18,7 +17,6 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.util.CardUtil;
|
||||
|
|
@ -42,14 +40,10 @@ public final class CrownOfGondor extends CardImpl {
|
|||
this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(xValue, xValue)));
|
||||
|
||||
// When a legendary creature you control enters, if there is no monarch, you become the monarch.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldControlledTriggeredAbility(
|
||||
new BecomesMonarchSourceEffect(),
|
||||
StaticFilters.FILTER_CREATURE_LEGENDARY
|
||||
),
|
||||
MonarchIsNotSetCondition.instance,
|
||||
"When a legendary creature you control enters, if there is no monarch, you become the monarch."
|
||||
).addHint(MonarchHint.instance));
|
||||
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
|
||||
new BecomesMonarchSourceEffect(), StaticFilters.FILTER_CREATURE_LEGENDARY
|
||||
).setTriggerPhrase("When a legendary creature you control enters, ")
|
||||
.withInterveningIf(MonarchIsNotSetCondition.instance).addHint(MonarchHint.instance));
|
||||
|
||||
// Equip {4}. This ability costs {3} less to activate if you're the monarch.
|
||||
EquipAbility equip = new EquipAbility(4, false);
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package mage.cards.c;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.condition.common.ThresholdCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.keyword.MenaceAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -31,11 +30,8 @@ public final class CryptFeaster extends CardImpl {
|
|||
this.addAbility(new MenaceAbility());
|
||||
|
||||
// Threshold -- Whenever this creature attacks, if there are seven or more cards in your graveyard, this creature gets +2/+0 until end of turn.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new AttacksTriggeredAbility(new BoostSourceEffect(2, 0, Duration.EndOfTurn)),
|
||||
ThresholdCondition.instance, "Whenever this creature attacks, if there are seven " +
|
||||
"or more cards in your graveyard, this creature gets +2/+0 until end of turn."
|
||||
).setAbilityWord(AbilityWord.THRESHOLD));
|
||||
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(2, 0, Duration.EndOfTurn))
|
||||
.withInterveningIf(ThresholdCondition.instance).setAbilityWord(AbilityWord.THRESHOLD));
|
||||
}
|
||||
|
||||
private CryptFeaster(final CryptFeaster card) {
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldTappedAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.LifeCompareCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.LoseLifeAllPlayersEffect;
|
||||
import mage.abilities.effects.common.TransformSourceEffect;
|
||||
import mage.abilities.keyword.TransformAbility;
|
||||
import mage.abilities.mana.AnyColorManaAbility;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -22,6 +22,8 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class CryptolithFragment extends CardImpl {
|
||||
|
||||
private static final Condition condition = new LifeCompareCondition(TargetController.EACH_PLAYER, ComparisonType.OR_LESS, 10);
|
||||
|
||||
public CryptolithFragment(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
|
||||
|
||||
|
|
@ -37,10 +39,7 @@ public final class CryptolithFragment extends CardImpl {
|
|||
|
||||
// At the beginning of your upkeep, if each player has 10 or less life, transform Cryptolith Fragment.
|
||||
this.addAbility(new TransformAbility());
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect()),
|
||||
new LifeCompareCondition(TargetController.EACH_PLAYER, ComparisonType.OR_LESS, 10),
|
||||
"At the beginning of your upkeep, if each player has 10 or less life, transform {this}."));
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect()).withInterveningIf(condition));
|
||||
}
|
||||
|
||||
private CryptolithFragment(final CryptolithFragment card) {
|
||||
|
|
|
|||
|
|
@ -4,16 +4,13 @@ import mage.MageInt;
|
|||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.KickedCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
||||
import mage.abilities.keyword.KickerAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -23,12 +20,6 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class CunningGeysermage extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterCreaturePermanent("another creature");
|
||||
|
||||
static {
|
||||
filter.add(AnotherPredicate.instance);
|
||||
}
|
||||
|
||||
public CunningGeysermage(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}");
|
||||
|
||||
|
|
@ -41,12 +32,9 @@ public final class CunningGeysermage extends CardImpl {
|
|||
this.addAbility(new KickerAbility("{2}{U}"));
|
||||
|
||||
// When Cunning Geysermage enters the battlefield, if it was kicked, return up to one other target creature to its owner's hand.
|
||||
Ability ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()),
|
||||
KickedCondition.ONCE, "When {this} enters, " +
|
||||
"if it was kicked, return up to one other target creature to its owner's hand."
|
||||
);
|
||||
ability.addTarget(new TargetPermanent(0, 1, filter, false));
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()
|
||||
.setText("return up to one other target creature to its owner's hand")).withInterveningIf(KickedCondition.ONCE);
|
||||
ability.addTarget(new TargetPermanent(0, 1, StaticFilters.FILTER_ANOTHER_CREATURE));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,31 +1,34 @@
|
|||
|
||||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.CardsInControllerGraveyardCondition;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
|
||||
import mage.abilities.effects.common.TransformSourceEffect;
|
||||
import mage.abilities.hint.Hint;
|
||||
import mage.abilities.hint.ValueHint;
|
||||
import mage.abilities.keyword.TransformAbility;
|
||||
import mage.abilities.mana.ConditionalColorlessManaAbility;
|
||||
import mage.abilities.mana.builder.common.InstantOrSorcerySpellManaBuilder;
|
||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterInstantOrSorceryCard;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author fireshoes
|
||||
*/
|
||||
public final class CuriousHomunculus extends CardImpl {
|
||||
|
||||
private static final Condition condition = new CardsInControllerGraveyardCondition(3, new FilterInstantOrSorceryCard("instant and/or sorcery cards"));
|
||||
private static final Hint hint = new ValueHint("Instant and sorcery cards in your graveyard", new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY));
|
||||
|
||||
public CuriousHomunculus(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
|
||||
this.subtype.add(SubType.HOMUNCULUS);
|
||||
|
|
@ -39,10 +42,7 @@ public final class CuriousHomunculus extends CardImpl {
|
|||
|
||||
// At the beginning of your upkeep, if there are three or more instant and/or sorcery cards in your graveyard, transform Curious Homunculus.
|
||||
this.addAbility(new TransformAbility());
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect()),
|
||||
new InstantOrSorceryCardsInControllerGraveyardCondition(3),
|
||||
"At the beginning of your upkeep, if there are three or more instant and/or sorcery cards in your graveyard, transform {this}"));
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect()).withInterveningIf(condition).addHint(hint));
|
||||
}
|
||||
|
||||
private CuriousHomunculus(final CuriousHomunculus card) {
|
||||
|
|
@ -54,21 +54,3 @@ public final class CuriousHomunculus extends CardImpl {
|
|||
return new CuriousHomunculus(this);
|
||||
}
|
||||
}
|
||||
|
||||
class InstantOrSorceryCardsInControllerGraveyardCondition implements Condition {
|
||||
|
||||
private int value;
|
||||
|
||||
public InstantOrSorceryCardsInControllerGraveyardCondition(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player p = game.getPlayer(source.getControllerId());
|
||||
if (p != null && p.getGraveyard().count(new FilterInstantOrSorceryCard(), game) >= value) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,11 @@
|
|||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.InvertCondition;
|
||||
import mage.abilities.condition.common.RaidCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.SacrificeSourceEffect;
|
||||
|
|
@ -16,23 +13,26 @@ import mage.abilities.effects.common.continuous.BoostEnchantedEffect;
|
|||
import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
|
||||
import mage.abilities.hint.common.RaidHint;
|
||||
import mage.abilities.keyword.EnchantAbility;
|
||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AttachmentType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.watchers.common.PlayerAttackedWatcher;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author awjackson
|
||||
*/
|
||||
public final class CuriousObsession extends CardImpl {
|
||||
|
||||
private static final Condition condition = new InvertCondition(RaidCondition.instance, "you didn't attack with a creature this turn");
|
||||
|
||||
public CuriousObsession(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}");
|
||||
|
||||
|
|
@ -42,25 +42,20 @@ public final class CuriousObsession extends CardImpl {
|
|||
TargetPermanent auraTarget = new TargetCreaturePermanent();
|
||||
this.getSpellAbility().addTarget(auraTarget);
|
||||
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
||||
Ability ability = new EnchantAbility(auraTarget);
|
||||
this.addAbility(ability);
|
||||
this.addAbility(new EnchantAbility(auraTarget));
|
||||
|
||||
// Enchanted creature gets +1/+1 and has "Whenever this creature deals combat damage to a player, you may draw a card.
|
||||
ability = new SimpleStaticAbility(new BoostEnchantedEffect(1, 1, Duration.WhileOnBattlefield));
|
||||
Ability gainedAbility = new DealsCombatDamageToAPlayerTriggeredAbility(new DrawCardSourceControllerEffect(1), true);
|
||||
Effect effect = new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA);
|
||||
effect.setText("and has \"Whenever this creature deals combat damage to a player, you may draw a card.\"");
|
||||
ability.addEffect(effect);
|
||||
Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(1, 1));
|
||||
ability.addEffect(new GainAbilityAttachedEffect(
|
||||
new DealsCombatDamageToAPlayerTriggeredAbility(
|
||||
new DrawCardSourceControllerEffect(1), true
|
||||
), AttachmentType.AURA
|
||||
).setText("and has \"Whenever this creature deals combat damage to a player, you may draw a card.\""));
|
||||
this.addAbility(ability);
|
||||
|
||||
// At the beginning of your end step, if you didn't attack with a creature this turn sacrifice Curious Obsession.
|
||||
ability = new ConditionalInterveningIfTriggeredAbility(
|
||||
new BeginningOfEndStepTriggeredAbility(new SacrificeSourceEffect()),
|
||||
new InvertCondition(RaidCondition.instance),
|
||||
"At the beginning of your end step, if you didn't attack with a creature this turn, sacrifice {this}."
|
||||
);
|
||||
ability.addHint(RaidHint.instance);
|
||||
this.addAbility(ability, new PlayerAttackedWatcher());
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(new SacrificeSourceEffect())
|
||||
.withInterveningIf(condition).addHint(RaidHint.instance), new PlayerAttackedWatcher());
|
||||
}
|
||||
|
||||
private CuriousObsession(final CuriousObsession card) {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package mage.cards.c;
|
|||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.condition.common.CastFromHandSourcePermanentCondition;
|
||||
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
|
||||
import mage.abilities.effects.common.ReturnToHandFromBattlefieldAllEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
|
@ -37,13 +36,10 @@ public final class CycloneSummoner extends CardImpl {
|
|||
this.toughness = new MageInt(7);
|
||||
|
||||
// When Cyclone Summoner enters the battlefield, if you cast it from your hand, return all permanents to their owners' hands except for Giants, Wizards, and lands.
|
||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new EntersBattlefieldTriggeredAbility(
|
||||
new ReturnToHandFromBattlefieldAllEffect(filter), false
|
||||
), CastFromHandSourcePermanentCondition.instance, "When {this} enters, " +
|
||||
"if you cast it from your hand, return all permanents to their owners' hands " +
|
||||
"except for Giants, Wizards, and lands."
|
||||
), new CastFromHandWatcher());
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(
|
||||
new ReturnToHandFromBattlefieldAllEffect(filter)
|
||||
.setText("return all permanents to their owners' hands except for Giants, Wizards, and lands")
|
||||
).withInterveningIf(CastFromHandSourcePermanentCondition.instance), new CastFromHandWatcher());
|
||||
}
|
||||
|
||||
private CycloneSummoner(final CycloneSummoner card) {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
package mage.abilities.condition;
|
||||
|
||||
import mage.abilities.Ability;
|
||||
|
|
@ -14,9 +13,15 @@ import mage.game.Game;
|
|||
public class InvertCondition implements Condition {
|
||||
|
||||
private final Condition condition;
|
||||
private final String message;
|
||||
|
||||
public InvertCondition(Condition condition) {
|
||||
this(condition, null);
|
||||
}
|
||||
|
||||
public InvertCondition(Condition condition, String message) {
|
||||
this.condition = condition;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -29,6 +34,9 @@ public class InvertCondition implements Condition {
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (message != null && !message.isEmpty()) {
|
||||
return message;
|
||||
}
|
||||
return condition.toString();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,11 +27,11 @@ public enum AdamantCondition implements Condition {
|
|||
private final boolean colorless;
|
||||
|
||||
|
||||
private AdamantCondition(ColoredManaSymbol coloredManaSymbol) {
|
||||
AdamantCondition(ColoredManaSymbol coloredManaSymbol) {
|
||||
this(coloredManaSymbol, false);
|
||||
}
|
||||
|
||||
private AdamantCondition(ColoredManaSymbol coloredManaSymbol, boolean colorless) {
|
||||
AdamantCondition(ColoredManaSymbol coloredManaSymbol, boolean colorless) {
|
||||
this.coloredManaSymbol = coloredManaSymbol;
|
||||
this.colorless = colorless;
|
||||
}
|
||||
|
|
@ -74,4 +74,17 @@ public enum AdamantCondition implements Condition {
|
|||
public boolean caresAboutManaColor() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder("at least three ");
|
||||
if (coloredManaSymbol == null && !colorless) {
|
||||
sb.append("mana of the same color");
|
||||
} else {
|
||||
sb.append(coloredManaSymbol != null ? coloredManaSymbol.getColorName() : "colorless");
|
||||
sb.append(" mana");
|
||||
}
|
||||
sb.append(" was spent to cast it");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,6 @@ public class YouGainedLifeCondition extends IntCompareCondition {
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "if you gained " + (value == 0 ? "" : (value + 1) + " or more ") + "life this turn";
|
||||
return "you gained " + (value == 0 ? "" : (value + 1) + " or more ") + "life this turn";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue