more refactoring of ConditionalInterveningIfTriggeredAbility

This commit is contained in:
theelk801 2025-06-09 14:23:30 -04:00 committed by Failure
parent 2e8603d26a
commit 6bbd4f457c
29 changed files with 188 additions and 296 deletions

View file

@ -10,7 +10,6 @@ import mage.abilities.condition.common.IsStepCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalActivatedAbility; import mage.abilities.decorator.ConditionalActivatedAbility;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; 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. // At end of combat, if Clockwork Beast attacked or blocked this combat, remove a +1/+0 counter from it.
this.addAbility(new ConditionalInterveningIfTriggeredAbility( this.addAbility(new EndOfCombatTriggeredAbility(
new EndOfCombatTriggeredAbility( new RemoveCounterSourceEffect(CounterType.P1P0.createInstance()).setText("remove a +1/+0 counter from it"), false
new RemoveCounterSourceEffect(CounterType.P1P0.createInstance()), false ).withInterveningIf(AttackedOrBlockedThisCombatSourceCondition.instance), new AttackedOrBlockedThisCombatWatcher());
), AttackedOrBlockedThisCombatSourceCondition.instance, "At end of combat, " +
"if {this} attacked or blocked this combat, remove a +1/+0 counter from it."
), 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. // {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( Ability ability = new ConditionalActivatedAbility(

View file

@ -3,10 +3,10 @@ package mage.cards.c;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.AdamantCondition; import mage.abilities.condition.common.AdamantCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
@ -25,11 +25,8 @@ public final class ClockworkServant extends CardImpl {
this.toughness = new MageInt(3); 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. // 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( this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1))
new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)), .withInterveningIf(AdamantCondition.ANY).setAbilityWord(AbilityWord.ADAMANT));
AdamantCondition.ANY, "<br><i>Adamant</i> &mdash; When {this} enters, " +
"if at least three mana of the same color was spent to cast it, draw a card."
));
} }
private ClockworkServant(final ClockworkServant card) { private ClockworkServant(final ClockworkServant card) {

View file

@ -10,7 +10,6 @@ import mage.abilities.condition.common.IsStepCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalActivatedAbility; import mage.abilities.decorator.ConditionalActivatedAbility;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect; import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; 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))); 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. // At end of combat, if Clockwork Steed attacked or blocked this combat, remove a +1/+0 counter from it.
this.addAbility(new ConditionalInterveningIfTriggeredAbility( this.addAbility(new EndOfCombatTriggeredAbility(
new EndOfCombatTriggeredAbility( new RemoveCounterSourceEffect(CounterType.P1P0.createInstance()).setText("remove a +1/+0 counter from it"), false
new RemoveCounterSourceEffect(CounterType.P1P0.createInstance()), false ).withInterveningIf(AttackedOrBlockedThisCombatSourceCondition.instance), new AttackedOrBlockedThisCombatWatcher());
), AttackedOrBlockedThisCombatSourceCondition.instance, "At end of combat, " +
"if {this} attacked or blocked this combat, remove a +1/+0 counter from it."
), 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. // {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( Ability ability = new ConditionalActivatedAbility(

View file

@ -10,7 +10,6 @@ import mage.abilities.condition.common.IsStepCondition;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalActivatedAbility; import mage.abilities.decorator.ConditionalActivatedAbility;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect; import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; 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))); 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. // At end of combat, if Clockwork Swarm attacked or blocked this combat, remove a +1/+0 counter from it.
this.addAbility(new ConditionalInterveningIfTriggeredAbility( this.addAbility(new EndOfCombatTriggeredAbility(
new EndOfCombatTriggeredAbility( new RemoveCounterSourceEffect(CounterType.P1P0.createInstance()).setText("remove a +1/+0 counter from it"), false
new RemoveCounterSourceEffect(CounterType.P1P0.createInstance()), false ).withInterveningIf(AttackedOrBlockedThisCombatSourceCondition.instance), new AttackedOrBlockedThisCombatWatcher());
), AttackedOrBlockedThisCombatSourceCondition.instance, "At end of combat, " +
"if {this} attacked or blocked this combat, remove a +1/+0 counter from it."
), 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. // {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( Ability ability = new ConditionalActivatedAbility(

View file

@ -1,12 +1,9 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.Mana; import mage.Mana;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.CastFromHandSourcePermanentCondition; import mage.abilities.condition.common.CastFromHandSourcePermanentCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.mana.BasicManaEffect; import mage.abilities.effects.mana.BasicManaEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -14,24 +11,22 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.watchers.common.CastFromHandWatcher; import mage.watchers.common.CastFromHandWatcher;
import java.util.UUID;
/** /**
*
* @author ilcartographer * @author ilcartographer
*/ */
public final class CoalStoker extends CardImpl { public final class CoalStoker extends CardImpl {
public CoalStoker(UUID ownerId, CardSetInfo setInfo) { public CoalStoker(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");
this.subtype.add(SubType.ELEMENTAL); this.subtype.add(SubType.ELEMENTAL);
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// When Coal Stoker enters the battlefield, if you cast it from your hand, add {R}{R}{R}. // When Coal Stoker enters the battlefield, if you cast it from your hand, add {R}{R}{R}.
this.addAbility(new ConditionalInterveningIfTriggeredAbility( this.addAbility(new EntersBattlefieldTriggeredAbility(new BasicManaEffect(Mana.RedMana(3)))
new EntersBattlefieldTriggeredAbility(new BasicManaEffect(Mana.RedMana(3)), false), .withInterveningIf(CastFromHandSourcePermanentCondition.instance), new CastFromHandWatcher());
CastFromHandSourcePermanentCondition.instance,
"When {this} enters, if you cast it from your hand, add {R}{R}{R}."),
new CastFromHandWatcher());
} }
private CoalStoker(final CoalStoker card) { private CoalStoker(final CoalStoker card) {

View file

@ -4,7 +4,6 @@ import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.DescendCondition; import mage.abilities.condition.common.DescendCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -29,11 +28,8 @@ public final class CoatiScavenger extends CardImpl {
this.toughness = new MageInt(2); 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. // 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( Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect())
new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()), .withInterveningIf(DescendCondition.FOUR);
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.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_PERMANENT)); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_PERMANENT));
this.addAbility(ability.setAbilityWord(AbilityWord.DESCEND_4).addHint(DescendCondition.getHint())); this.addAbility(ability.setAbilityWord(AbilityWord.DESCEND_4).addHint(DescendCondition.getHint()));
} }

View file

@ -5,7 +5,6 @@ import mage.MageObjectReference;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect;
import mage.abilities.keyword.VigilanceAbility; import mage.abilities.keyword.VigilanceAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -39,11 +38,8 @@ public final class CodespellCleric extends CardImpl {
this.addAbility(VigilanceAbility.getInstance()); 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. // 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( Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()))
new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance())), .withInterveningIf(CodespellClericCondition.instance);
CodespellClericCondition.instance, "When {this} enters, " +
"if it was the second spell you cast this turn, put a +1/+1 counter on target creature."
);
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability, new CodespellClericWatcher()); this.addAbility(ability, new CodespellClericWatcher());
} }
@ -66,6 +62,11 @@ enum CodespellClericCondition implements Condition {
CodespellClericWatcher watcher = game.getState().getWatcher(CodespellClericWatcher.class); CodespellClericWatcher watcher = game.getState().getWatcher(CodespellClericWatcher.class);
return watcher != null && watcher.checkSpell(source, game); 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 { class CodespellClericWatcher extends Watcher {

View file

@ -1,10 +1,9 @@
package mage.cards.c; package mage.cards.c;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.condition.common.FerociousCondition; import mage.abilities.condition.common.FerociousCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.hint.common.FerociousHint; import mage.abilities.hint.common.FerociousHint;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -20,15 +19,8 @@ public final class ColossalMajesty extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}"); 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. // At the beginning of your upkeep, if you control a creature with power 4 or greater, draw a card.
this.addAbility(new ConditionalInterveningIfTriggeredAbility( this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DrawCardSourceControllerEffect(1))
new BeginningOfUpkeepTriggeredAbility( .withInterveningIf(FerociousCondition.instance).addHint(FerociousHint.instance));
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));
} }
private ColossalMajesty(final ColossalMajesty card) { private ColossalMajesty(final ColossalMajesty card) {

View file

@ -1,20 +1,16 @@
package mage.cards.c; package mage.cards.c;
import mage.MageInt; import mage.MageInt;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; 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.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.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterControlledPermanent;
import java.util.UUID; import java.util.UUID;
@ -25,7 +21,7 @@ import java.util.UUID;
public final class ComplexAutomaton extends CardImpl { public final class ComplexAutomaton extends CardImpl {
private static final Condition condition = new PermanentsOnTheBattlefieldCondition( 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) { public ComplexAutomaton(UUID ownerId, CardSetInfo setInfo) {
@ -36,12 +32,8 @@ public final class ComplexAutomaton extends CardImpl {
this.toughness = new MageInt(4); 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. // 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( this.addAbility(new BeginningOfUpkeepTriggeredAbility(new ReturnToHandSourceEffect(true))
new BeginningOfUpkeepTriggeredAbility( .withInterveningIf(condition).addHint(PermanentsYouControlHint.instance));
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()))));
} }
private ComplexAutomaton(final ComplexAutomaton card) { private ComplexAutomaton(final ComplexAutomaton card) {

View file

@ -4,8 +4,6 @@ import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -31,7 +29,7 @@ import java.util.UUID;
*/ */
public final class ConfoundingConundrum extends CardImpl { 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 { static {
filter.add(TargetController.OPPONENT.getControllerPredicate()); filter.add(TargetController.OPPONENT.getControllerPredicate());
@ -44,13 +42,10 @@ public final class ConfoundingConundrum extends CardImpl {
this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1))); 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. // Whenever a land enters the battlefield under an opponent's control, if that player had another land enter the battlefield under their control this turn, they return a land they control to its owner's hand.
this.addAbility(new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldAllTriggeredAbility( this.addAbility(new EntersBattlefieldAllTriggeredAbility(
Zone.BATTLEFIELD, new ConfoundingConundrumEffect(), filter, Zone.BATTLEFIELD, new ConfoundingConundrumEffect(),
false, SetTargetPointer.PLAYER filter, false, SetTargetPointer.PLAYER
), ConfoundingConundrumCondition.instance, "Whenever a land enters the battlefield under " + ).withInterveningIf(ConfoundingConundrumCondition.instance), new ConfoundingConundrumWatcher());
"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());
} }
private ConfoundingConundrum(final ConfoundingConundrum card) { private ConfoundingConundrum(final ConfoundingConundrum card) {
@ -69,17 +64,16 @@ enum ConfoundingConundrumCondition implements Condition {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
ConfoundingConundrumWatcher watcher = game.getState().getWatcher(ConfoundingConundrumWatcher.class); ConfoundingConundrumWatcher watcher = game.getState().getWatcher(ConfoundingConundrumWatcher.class);
if (watcher == null) { return watcher != null
return false; && CardUtil
} .getEffectValueFromAbility(source, "permanentEnteringControllerId", UUID.class)
Player player = null; .filter(watcher::checkPlayer)
for (Effect effect : source.getEffects()) { .isPresent();
if (player != null) { }
break;
} @Override
player = game.getPlayer(effect.getTargetPointer().getFirst(game, source)); public String toString() {
} return "that player had another land enter the battlefield under their control this turn";
return player != null && watcher.checkPlayer(player.getId());
} }
} }
@ -87,6 +81,7 @@ class ConfoundingConundrumEffect extends OneShotEffect {
ConfoundingConundrumEffect() { ConfoundingConundrumEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "they return a land they control to its owner's hand";
} }
private ConfoundingConundrumEffect(final ConfoundingConundrumEffect effect) { private ConfoundingConundrumEffect(final ConfoundingConundrumEffect effect) {

View file

@ -1,11 +1,9 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.condition.common.RenownedSourceCondition; import mage.abilities.condition.common.RenownedSourceCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.FirstStrikeAbility;
import mage.abilities.keyword.RenownAbility; import mage.abilities.keyword.RenownAbility;
@ -14,23 +12,17 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterAttackingCreature;
import java.util.UUID;
/** /**
*
* @author LevelX2 * @author LevelX2
*/ */
public final class ConsulsLieutenant extends CardImpl { 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) { public ConsulsLieutenant(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}{W}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SOLDIER); this.subtype.add(SubType.SOLDIER);
this.power = new MageInt(2); this.power = new MageInt(2);
@ -38,13 +30,14 @@ public final class ConsulsLieutenant extends CardImpl {
// First strike // First strike
this.addAbility(FirstStrikeAbility.getInstance()); this.addAbility(FirstStrikeAbility.getInstance());
// Renown 1 // Renown 1
this.addAbility(new RenownAbility(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. // 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( this.addAbility(new AttacksTriggeredAbility(new BoostControlledEffect(
new BoostControlledEffect(1, 1, Duration.EndOfTurn, filter, true), false), 1, 1, Duration.EndOfTurn, StaticFilters.FILTER_ATTACKING_CREATURES, true
RenownedSourceCondition.instance, )).withInterveningIf(RenownedSourceCondition.instance));
"Whenever Consul's Lieutenant attacks, if it's renowned, other attacking creatures you control get +1/+1 until end of turn."));
} }
private ConsulsLieutenant(final ConsulsLieutenant card) { private ConsulsLieutenant(final ConsulsLieutenant card) {

View file

@ -5,7 +5,6 @@ import mage.abilities.Ability;
import mage.abilities.BatchTriggeredAbility; import mage.abilities.BatchTriggeredAbility;
import mage.abilities.TriggeredAbilityImpl; import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.condition.common.CorruptedCondition; import mage.abilities.condition.common.CorruptedCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.PutCardFromHandOntoBattlefieldEffect; import mage.abilities.effects.common.PutCardFromHandOntoBattlefieldEffect;
import mage.abilities.effects.common.counter.ProliferateEffect; 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 // 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. // counters, draw a card, then you may put a land card from your hand onto the battlefield.
Ability ability = new ConditionalInterveningIfTriggeredAbility( Ability ability = new BeginningOfEndStepTriggeredAbility(new DrawCardSourceControllerEffect(1))
new BeginningOfEndStepTriggeredAbility(new DrawCardSourceControllerEffect(1)), .withInterveningIf(CorruptedCondition.instance);
CorruptedCondition.instance, "At the beginning of your end step, if an opponent has three or more poison " + ability.addEffect(new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_LAND_A).concatBy(", then"));
"counters, draw a card, then you may put a land card from your hand onto the battlefield" this.addAbility(ability.setAbilityWord(AbilityWord.CORRUPTED).addHint(CorruptedCondition.getHint()));
);
ability.addEffect(new PutCardFromHandOntoBattlefieldEffect(StaticFilters.FILTER_CARD_LAND_A).concatBy("then"));
ability.setAbilityWord(AbilityWord.CORRUPTED);
ability.addHint(CorruptedCondition.getHint());
this.addAbility(ability);
} }
private ContaminantGrafter(final ContaminantGrafter card) { private ContaminantGrafter(final ContaminantGrafter card) {

View file

@ -1,11 +1,10 @@
package mage.cards.c; package mage.cards.c;
import mage.abilities.TriggeredAbility; import mage.abilities.Ability;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.condition.common.FatefulHourCondition; import mage.abilities.condition.common.FatefulHourCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -13,19 +12,17 @@ import mage.constants.CardType;
import java.util.UUID; import java.util.UUID;
/** /**
*
* @author fireshoes * @author fireshoes
*/ */
public final class ConvalescentCare extends CardImpl { public final class ConvalescentCare extends CardImpl {
public ConvalescentCare(UUID ownerId, CardSetInfo setInfo) { public ConvalescentCare(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{W}{W}"); 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. // 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 ability = new BeginningOfUpkeepTriggeredAbility(new GainLifeEffect(3)).withInterveningIf(FatefulHourCondition.instance);
ability.addEffect(new DrawCardSourceControllerEffect(1)); ability.addEffect(new DrawCardSourceControllerEffect(1).concatBy("and"));
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, FatefulHourCondition.instance, this.addAbility(ability);
"At the beginning of your upkeep, if you have 5 or less life, you gain 3 life and draw a card."));
} }
private ConvalescentCare(final ConvalescentCare card) { private ConvalescentCare(final ConvalescentCare card) {
@ -36,6 +33,6 @@ public final class ConvalescentCare extends CardImpl {
public ConvalescentCare copy() { public ConvalescentCare copy() {
return new ConvalescentCare(this); return new ConvalescentCare(this);
} }
} }

View file

@ -4,7 +4,6 @@ import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.DescendCondition; import mage.abilities.condition.common.DescendCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -42,12 +41,7 @@ public final class CouncilOfEchoes extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); 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. // 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( Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect(), false).withInterveningIf(DescendCondition.FOUR);
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.addTarget(new TargetPermanent(0, 1, filter)); ability.addTarget(new TargetPermanent(0, 1, filter));
this.addAbility(ability.addHint(DescendCondition.getHint()).setAbilityWord(AbilityWord.DESCEND_4)); this.addAbility(ability.addHint(DescendCondition.getHint()).setAbilityWord(AbilityWord.DESCEND_4));
} }

View file

@ -4,7 +4,6 @@ import mage.abilities.common.ScryTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.common.ExileSourceFromGraveCost; import mage.abilities.costs.common.ExileSourceFromGraveCost;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -22,7 +21,7 @@ import java.util.UUID;
public final class CouncilsDeliberation extends CardImpl { public final class CouncilsDeliberation extends CardImpl {
private static final Condition condition 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) { public CouncilsDeliberation(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}"); 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)); 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. // 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( this.addAbility(new ScryTriggeredAbility(
new ScryTriggeredAbility( Zone.GRAVEYARD,
Zone.GRAVEYARD, new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new ExileSourceFromGraveCost()),
new DoIfCostPaid( false
new DrawCardSourceControllerEffect(1), new ExileSourceFromGraveCost() ).withInterveningIf(condition));
), false
), condition, "Whenever you scry, if you control an Island, " +
"you may exile {this} from your graveyard. If you do, draw a card."
));
} }
private CouncilsDeliberation(final CouncilsDeliberation card) { private CouncilsDeliberation(final CouncilsDeliberation card) {

View file

@ -1,28 +1,30 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.YouGainedLifeCondition; 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.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.constants.ComparisonType;
import mage.constants.SubType;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
import mage.watchers.common.PlayerGainedLifeWatcher; import mage.watchers.common.PlayerGainedLifeWatcher;
import java.util.UUID;
/** /**
* @author weirddan455 * @author weirddan455
*/ */
public final class CourierBat extends CardImpl { public final class CourierBat extends CardImpl {
private static final Condition condition = new YouGainedLifeCondition();
public CourierBat(UUID ownerId, CardSetInfo setInfo) { public CourierBat(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
@ -34,13 +36,9 @@ public final class CourierBat extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); 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. // 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( Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()).withInterveningIf(condition);
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.addTarget(new TargetCardInYourGraveyard(0, 1, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); 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) { private CourierBat(final CourierBat card) {

View file

@ -3,7 +3,6 @@ package mage.cards.c;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.CastFromEverywhereSourceCondition; import mage.abilities.condition.common.CastFromEverywhereSourceCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.continuous.NextSpellCastHasAbilityEffect; import mage.abilities.effects.common.continuous.NextSpellCastHasAbilityEffect;
import mage.abilities.keyword.FlashAbility; import mage.abilities.keyword.FlashAbility;
import mage.abilities.keyword.StormAbility; import mage.abilities.keyword.StormAbility;
@ -35,12 +34,9 @@ public final class CracklingSpellslinger extends CardImpl {
this.addAbility(FlashAbility.getInstance()); 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. // 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( this.addAbility(new EntersBattlefieldTriggeredAbility(
new EntersBattlefieldTriggeredAbility(new NextSpellCastHasAbilityEffect(new StormAbility(), filter)), new NextSpellCastHasAbilityEffect(new StormAbility(), filter)
CastFromEverywhereSourceCondition.instance, ).withInterveningIf(CastFromEverywhereSourceCondition.instance));
"When {this} enters, if you cast it, "
+ "the next instant or sorcery spell you cast this turn has storm"
));
} }
private CracklingSpellslinger(final CracklingSpellslinger card) { private CracklingSpellslinger(final CracklingSpellslinger card) {

View file

@ -1,17 +1,20 @@
package mage.cards.c; package mage.cards.c;
import mage.MageInt; import mage.MageInt;
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.YouGainedLifeCondition; import mage.abilities.condition.common.YouGainedLifeCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.dynamicvalue.common.ControllerGainedLifeCount; import mage.abilities.dynamicvalue.common.ControllerGainedLifeCount;
import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.continuous.GainAbilityAllEffect; import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
import mage.abilities.keyword.IndestructibleAbility; import mage.abilities.keyword.IndestructibleAbility;
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; 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.filter.common.FilterControlledPermanent;
import mage.game.permanent.token.CrestedSunmareToken; import mage.game.permanent.token.CrestedSunmareToken;
import mage.watchers.common.PlayerGainedLifeWatcher; import mage.watchers.common.PlayerGainedLifeWatcher;
@ -29,6 +32,8 @@ public final class CrestedSunmare extends CardImpl {
filter.add(SubType.HORSE.getPredicate()); filter.add(SubType.HORSE.getPredicate());
} }
private static final Condition condition = new YouGainedLifeCondition();
public CrestedSunmare(UUID ownerId, CardSetInfo setInfo) { public CrestedSunmare(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}{W}"); 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. // 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( this.addAbility(new BeginningOfEndStepTriggeredAbility(
new BeginningOfEndStepTriggeredAbility( TargetController.ANY, new CreateTokenEffect(new CrestedSunmareToken()), false
TargetController.ANY, new CreateTokenEffect(new CrestedSunmareToken()), ).withInterveningIf(condition).addHint(ControllerGainedLifeCount.getHint()), new PlayerGainedLifeWatcher());
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());
} }
private CrestedSunmare(final CrestedSunmare card) { private CrestedSunmare(final CrestedSunmare card) {

View file

@ -1,22 +1,21 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.CastFromEverywhereSourceCondition; import mage.abilities.condition.common.CastFromEverywhereSourceCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.ReturnToHandFromBattlefieldAllEffect; import mage.abilities.effects.common.ReturnToHandFromBattlefieldAllEffect;
import mage.abilities.keyword.EmergeAbility; import mage.abilities.keyword.EmergeAbility;
import mage.constants.SubType;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import java.util.UUID;
/** /**
*
* @author jimga150 * @author jimga150
*/ */
public final class CrestingMosasaurus extends CardImpl { public final class CrestingMosasaurus extends CardImpl {
@ -29,7 +28,7 @@ public final class CrestingMosasaurus extends CardImpl {
public CrestingMosasaurus(UUID ownerId, CardSetInfo setInfo) { public CrestingMosasaurus(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{U}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{U}{U}");
this.subtype.add(SubType.DINOSAUR); this.subtype.add(SubType.DINOSAUR);
this.power = new MageInt(4); this.power = new MageInt(4);
this.toughness = new MageInt(8); this.toughness = new MageInt(8);
@ -38,10 +37,9 @@ public final class CrestingMosasaurus extends CardImpl {
this.addAbility(new EmergeAbility(this, "{6}{U}")); 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. // When Cresting Mosasaurus enters the battlefield, if you cast it, return each non-Dinosaur creature to its owner's hand.
this.addAbility(new ConditionalInterveningIfTriggeredAbility( this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandFromBattlefieldAllEffect(filter)
new EntersBattlefieldTriggeredAbility(new ReturnToHandFromBattlefieldAllEffect(filter), false), .setText("return each non-Dinosaur creature to its owner's hand"), false)
CastFromEverywhereSourceCondition.instance, .withInterveningIf(CastFromEverywhereSourceCondition.instance));
"When {this} enters, if you cast it, return each non-Dinosaur creature to its owner's hand."));
} }
private CrestingMosasaurus(final CrestingMosasaurus card) { private CrestingMosasaurus(final CrestingMosasaurus card) {

View file

@ -6,7 +6,6 @@ import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MonarchIsNotSetCondition; import mage.abilities.condition.common.MonarchIsNotSetCondition;
import mage.abilities.condition.common.MonarchIsSourceControllerCondition; import mage.abilities.condition.common.MonarchIsSourceControllerCondition;
import mage.abilities.costs.CostAdjuster; import mage.abilities.costs.CostAdjuster;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.BecomesMonarchSourceEffect; import mage.abilities.effects.common.BecomesMonarchSourceEffect;
@ -18,7 +17,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.util.CardUtil; import mage.util.CardUtil;
@ -42,14 +40,10 @@ public final class CrownOfGondor extends CardImpl {
this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(xValue, xValue))); this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(xValue, xValue)));
// When a legendary creature you control enters, if there is no monarch, you become the monarch. // When a legendary creature you control enters, if there is no monarch, you become the monarch.
this.addAbility(new ConditionalInterveningIfTriggeredAbility( this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
new EntersBattlefieldControlledTriggeredAbility( new BecomesMonarchSourceEffect(), StaticFilters.FILTER_CREATURE_LEGENDARY
new BecomesMonarchSourceEffect(), ).setTriggerPhrase("When a legendary creature you control enters, ")
StaticFilters.FILTER_CREATURE_LEGENDARY .withInterveningIf(MonarchIsNotSetCondition.instance).addHint(MonarchHint.instance));
),
MonarchIsNotSetCondition.instance,
"When a legendary creature you control enters, if there is no monarch, you become the monarch."
).addHint(MonarchHint.instance));
// Equip {4}. This ability costs {3} less to activate if you're the monarch. // Equip {4}. This ability costs {3} less to activate if you're the monarch.
EquipAbility equip = new EquipAbility(4, false); EquipAbility equip = new EquipAbility(4, false);

View file

@ -3,7 +3,6 @@ package mage.cards.c;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.condition.common.ThresholdCondition; import mage.abilities.condition.common.ThresholdCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.keyword.MenaceAbility; import mage.abilities.keyword.MenaceAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -31,11 +30,8 @@ public final class CryptFeaster extends CardImpl {
this.addAbility(new MenaceAbility()); 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. // 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( this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(2, 0, Duration.EndOfTurn))
new AttacksTriggeredAbility(new BoostSourceEffect(2, 0, Duration.EndOfTurn)), .withInterveningIf(ThresholdCondition.instance).setAbilityWord(AbilityWord.THRESHOLD));
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));
} }
private CryptFeaster(final CryptFeaster card) { private CryptFeaster(final CryptFeaster card) {

View file

@ -1,14 +1,14 @@
package mage.cards.c; package mage.cards.c;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.LifeCompareCondition; import mage.abilities.condition.common.LifeCompareCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.LoseLifeAllPlayersEffect; import mage.abilities.effects.common.LoseLifeAllPlayersEffect;
import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.keyword.TransformAbility; import mage.abilities.keyword.TransformAbility;
import mage.abilities.mana.AnyColorManaAbility; import mage.abilities.mana.AnyColorManaAbility;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -22,6 +22,8 @@ import java.util.UUID;
*/ */
public final class CryptolithFragment extends CardImpl { 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) { public CryptolithFragment(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); 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. // At the beginning of your upkeep, if each player has 10 or less life, transform Cryptolith Fragment.
this.addAbility(new TransformAbility()); this.addAbility(new TransformAbility());
this.addAbility(new ConditionalInterveningIfTriggeredAbility( this.addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect()).withInterveningIf(condition));
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}."));
} }
private CryptolithFragment(final CryptolithFragment card) { private CryptolithFragment(final CryptolithFragment card) {

View file

@ -4,16 +4,13 @@ import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.KickedCondition; import mage.abilities.condition.common.KickedCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.abilities.keyword.KickerAbility; import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import java.util.UUID; import java.util.UUID;
@ -23,12 +20,6 @@ import java.util.UUID;
*/ */
public final class CunningGeysermage extends CardImpl { 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) { public CunningGeysermage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); 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}")); 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. // 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( Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()
new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()), .setText("return up to one other target creature to its owner's hand")).withInterveningIf(KickedCondition.ONCE);
KickedCondition.ONCE, "When {this} enters, " + ability.addTarget(new TargetPermanent(0, 1, StaticFilters.FILTER_ANOTHER_CREATURE));
"if it was kicked, return up to one other target creature to its owner's hand."
);
ability.addTarget(new TargetPermanent(0, 1, filter, false));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,31 +1,34 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.condition.common.CardsInControllerGraveyardCondition;
import mage.abilities.costs.common.TapSourceCost; 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.effects.common.TransformSourceEffect;
import mage.abilities.hint.Hint;
import mage.abilities.hint.ValueHint;
import mage.abilities.keyword.TransformAbility; import mage.abilities.keyword.TransformAbility;
import mage.abilities.mana.ConditionalColorlessManaAbility; import mage.abilities.mana.ConditionalColorlessManaAbility;
import mage.abilities.mana.builder.common.InstantOrSorcerySpellManaBuilder; import mage.abilities.mana.builder.common.InstantOrSorcerySpellManaBuilder;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterInstantOrSorceryCard; import mage.filter.common.FilterInstantOrSorceryCard;
import mage.game.Game;
import mage.players.Player; import java.util.UUID;
/** /**
* @author fireshoes * @author fireshoes
*/ */
public final class CuriousHomunculus extends CardImpl { 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) { public CuriousHomunculus(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}");
this.subtype.add(SubType.HOMUNCULUS); 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. // 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 TransformAbility());
this.addAbility(new ConditionalInterveningIfTriggeredAbility( this.addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect()).withInterveningIf(condition).addHint(hint));
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}"));
} }
private CuriousHomunculus(final CuriousHomunculus card) { private CuriousHomunculus(final CuriousHomunculus card) {
@ -54,21 +54,3 @@ public final class CuriousHomunculus extends CardImpl {
return new CuriousHomunculus(this); 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;
}
}

View file

@ -1,14 +1,11 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.InvertCondition; import mage.abilities.condition.InvertCondition;
import mage.abilities.condition.common.RaidCondition; 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.AttachEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.SacrificeSourceEffect; 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.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.hint.common.RaidHint; import mage.abilities.hint.common.RaidHint;
import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.EnchantAbility;
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AttachmentType; import mage.constants.AttachmentType;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.SubType; import mage.constants.SubType;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import mage.watchers.common.PlayerAttackedWatcher; import mage.watchers.common.PlayerAttackedWatcher;
import java.util.UUID;
/** /**
*
* @author awjackson * @author awjackson
*/ */
public final class CuriousObsession extends CardImpl { 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) { public CuriousObsession(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}");
@ -42,25 +42,20 @@ public final class CuriousObsession extends CardImpl {
TargetPermanent auraTarget = new TargetCreaturePermanent(); TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
Ability ability = new EnchantAbility(auraTarget); this.addAbility(new EnchantAbility(auraTarget));
this.addAbility(ability);
// Enchanted creature gets +1/+1 and has "Whenever this creature deals combat damage to a player, you may draw a card. // 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 ability = new SimpleStaticAbility(new BoostEnchantedEffect(1, 1));
Ability gainedAbility = new DealsCombatDamageToAPlayerTriggeredAbility(new DrawCardSourceControllerEffect(1), true); ability.addEffect(new GainAbilityAttachedEffect(
Effect effect = new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA); new DealsCombatDamageToAPlayerTriggeredAbility(
effect.setText("and has \"Whenever this creature deals combat damage to a player, you may draw a card.\""); new DrawCardSourceControllerEffect(1), true
ability.addEffect(effect); ), AttachmentType.AURA
).setText("and has \"Whenever this creature deals combat damage to a player, you may draw a card.\""));
this.addAbility(ability); this.addAbility(ability);
// At the beginning of your end step, if you didn't attack with a creature this turn sacrifice Curious Obsession. // At the beginning of your end step, if you didn't attack with a creature this turn sacrifice Curious Obsession.
ability = new ConditionalInterveningIfTriggeredAbility( this.addAbility(new BeginningOfEndStepTriggeredAbility(new SacrificeSourceEffect())
new BeginningOfEndStepTriggeredAbility(new SacrificeSourceEffect()), .withInterveningIf(condition).addHint(RaidHint.instance), new PlayerAttackedWatcher());
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());
} }
private CuriousObsession(final CuriousObsession card) { private CuriousObsession(final CuriousObsession card) {

View file

@ -3,7 +3,6 @@ package mage.cards.c;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.CastFromHandSourcePermanentCondition; import mage.abilities.condition.common.CastFromHandSourcePermanentCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.ReturnToHandFromBattlefieldAllEffect; import mage.abilities.effects.common.ReturnToHandFromBattlefieldAllEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -37,13 +36,10 @@ public final class CycloneSummoner extends CardImpl {
this.toughness = new MageInt(7); 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. // 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( this.addAbility(new EntersBattlefieldTriggeredAbility(
new EntersBattlefieldTriggeredAbility( new ReturnToHandFromBattlefieldAllEffect(filter)
new ReturnToHandFromBattlefieldAllEffect(filter), false .setText("return all permanents to their owners' hands except for Giants, Wizards, and lands")
), CastFromHandSourcePermanentCondition.instance, "When {this} enters, " + ).withInterveningIf(CastFromHandSourcePermanentCondition.instance), new CastFromHandWatcher());
"if you cast it from your hand, return all permanents to their owners' hands " +
"except for Giants, Wizards, and lands."
), new CastFromHandWatcher());
} }
private CycloneSummoner(final CycloneSummoner card) { private CycloneSummoner(final CycloneSummoner card) {

View file

@ -1,4 +1,3 @@
package mage.abilities.condition; package mage.abilities.condition;
import mage.abilities.Ability; import mage.abilities.Ability;
@ -7,16 +6,22 @@ import mage.game.Game;
/** /**
* A simple {@link Condition} to invert a decorated conditions * A simple {@link Condition} to invert a decorated conditions
* {@link Condition#apply(mage.game.Game, mage.abilities.Ability) apply(mage.game.Game, mage.abilities.Ability)} * {@link Condition#apply(mage.game.Game, mage.abilities.Ability) apply(mage.game.Game, mage.abilities.Ability)}
* method invocation. * method invocation.
* *
* @author maurer.it_at_gmail.com * @author maurer.it_at_gmail.com
*/ */
public class InvertCondition implements Condition { public class InvertCondition implements Condition {
private final Condition condition; private final Condition condition;
private final String message;
public InvertCondition ( Condition condition ) { public InvertCondition(Condition condition) {
this(condition, null);
}
public InvertCondition(Condition condition, String message) {
this.condition = condition; this.condition = condition;
this.message = message;
} }
/* /*
@ -29,7 +34,10 @@ public class InvertCondition implements Condition {
@Override @Override
public String toString() { public String toString() {
if (message != null && !message.isEmpty()) {
return message;
}
return condition.toString(); return condition.toString();
} }
} }

View file

@ -27,11 +27,11 @@ public enum AdamantCondition implements Condition {
private final boolean colorless; private final boolean colorless;
private AdamantCondition(ColoredManaSymbol coloredManaSymbol) { AdamantCondition(ColoredManaSymbol coloredManaSymbol) {
this(coloredManaSymbol, false); this(coloredManaSymbol, false);
} }
private AdamantCondition(ColoredManaSymbol coloredManaSymbol, boolean colorless) { AdamantCondition(ColoredManaSymbol coloredManaSymbol, boolean colorless) {
this.coloredManaSymbol = coloredManaSymbol; this.coloredManaSymbol = coloredManaSymbol;
this.colorless = colorless; this.colorless = colorless;
} }
@ -44,9 +44,9 @@ public enum AdamantCondition implements Condition {
} }
if (coloredManaSymbol == null) { if (coloredManaSymbol == null) {
return Arrays return Arrays
.stream(ColoredManaSymbol.values()) .stream(ColoredManaSymbol.values())
.map(source.getManaCostsToPay().getUsedManaToPay()::getColor) .map(source.getManaCostsToPay().getUsedManaToPay()::getColor)
.anyMatch(i -> i > 2); .anyMatch(i -> i > 2);
} }
return source.getManaCostsToPay().getUsedManaToPay().getColor(coloredManaSymbol) > 2; return source.getManaCostsToPay().getUsedManaToPay().getColor(coloredManaSymbol) > 2;
} }
@ -63,9 +63,9 @@ public enum AdamantCondition implements Condition {
} }
if (coloredManaSymbol == null) { if (coloredManaSymbol == null) {
return Arrays return Arrays
.stream(ColoredManaSymbol.values()) .stream(ColoredManaSymbol.values())
.map(payment::getColor) .map(payment::getColor)
.anyMatch(i -> i > 2); .anyMatch(i -> i > 2);
} }
return payment.getColor(coloredManaSymbol) > 2; return payment.getColor(coloredManaSymbol) > 2;
} }
@ -74,4 +74,17 @@ public enum AdamantCondition implements Condition {
public boolean caresAboutManaColor() { public boolean caresAboutManaColor() {
return true; 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();
}
} }

View file

@ -32,6 +32,6 @@ public class YouGainedLifeCondition extends IntCompareCondition {
@Override @Override
public String toString() { 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";
} }
} }