refactor some abilities to use TriggeredAbility:: withInterveningIf

This commit is contained in:
theelk801 2025-06-04 09:00:10 -04:00
parent 562bd9ffeb
commit b21fe38de2
5 changed files with 26 additions and 32 deletions

View file

@ -1,5 +1,3 @@
package mage.abilities.condition.common; package mage.abilities.condition.common;
import mage.abilities.Ability; import mage.abilities.Ability;
@ -15,11 +13,15 @@ import mage.util.CardUtil;
*/ */
public enum EvokedCondition implements Condition { public enum EvokedCondition implements Condition {
instance; instance;
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
return CardUtil.checkSourceCostsTagExists(game, source, EvokeAbility.getActivationKey()); return CardUtil.checkSourceCostsTagExists(game, source, EvokeAbility.getActivationKey());
} }
@Override
public String toString() {
return "its evoke cost was paid";
}
} }

View file

@ -1,12 +1,10 @@
package mage.abilities.keyword; package mage.abilities.keyword;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.EvokedCondition; import mage.abilities.condition.common.EvokedCondition;
import mage.abilities.costs.AlternativeSourceCostsImpl; import mage.abilities.costs.AlternativeSourceCostsImpl;
import mage.abilities.costs.Cost; import mage.abilities.costs.Cost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.SacrificeSourceEffect; import mage.abilities.effects.common.SacrificeSourceEffect;
/** /**
@ -24,11 +22,9 @@ public class EvokeAbility extends AlternativeSourceCostsImpl {
public EvokeAbility(Cost cost) { public EvokeAbility(Cost cost) {
super(EVOKE_KEYWORD, REMINDER_TEXT, cost); super(EVOKE_KEYWORD, REMINDER_TEXT, cost);
Ability ability = new ConditionalInterveningIfTriggeredAbility( this.addSubAbility(new EntersBattlefieldTriggeredAbility(
new EntersBattlefieldTriggeredAbility(new SacrificeSourceEffect(true)), new SacrificeSourceEffect(true).setText("its controller sacrifices it")
EvokedCondition.instance, "When this permanent enters the battlefield, if its evoke cost was paid, its controller sacrifices it."); ).setTriggerPhrase("When this permanent enters, ").withInterveningIf(EvokedCondition.instance).setRuleVisible(false));
ability.setRuleVisible(false);
addSubAbility(ability);
} }
private EvokeAbility(final EvokeAbility ability) { private EvokeAbility(final EvokeAbility ability) {
@ -40,7 +36,7 @@ public class EvokeAbility extends AlternativeSourceCostsImpl {
return new EvokeAbility(this); return new EvokeAbility(this);
} }
public static String getActivationKey(){ public static String getActivationKey() {
return getActivationKey(EVOKE_KEYWORD); return getActivationKey(EVOKE_KEYWORD);
} }
} }

View file

@ -6,7 +6,6 @@ import mage.abilities.StaticAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.GiftWasPromisedCondition; import mage.abilities.condition.common.GiftWasPromisedCondition;
import mage.abilities.costs.*; import mage.abilities.costs.*;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.cards.Card; import mage.cards.Card;
import mage.constants.GiftType; import mage.constants.GiftType;
@ -53,11 +52,10 @@ public class GiftAbility extends StaticAbility implements OptionalAdditionalSour
this.rule = additionalCost.getName() + ' ' + additionalCost.getReminderText(); this.rule = additionalCost.getName() + ' ' + additionalCost.getReminderText();
this.setRuleAtTheTop(true); this.setRuleAtTheTop(true);
if (card.isPermanent()) { if (card.isPermanent()) {
this.addSubAbility(new ConditionalInterveningIfTriggeredAbility( this.addSubAbility(new EntersBattlefieldTriggeredAbility(new PromiseGiftEffect(giftType))
new EntersBattlefieldTriggeredAbility(new PromiseGiftEffect(giftType)), .setTriggerPhrase("When this permanent enters, ")
GiftWasPromisedCondition.TRUE, "When this permanent enters, " + .withInterveningIf(GiftWasPromisedCondition.TRUE)
"if the gift was promised, they " + giftType.getDescription() + '.' .setRuleVisible(false));
).setRuleVisible(false));
} else { } else {
card.getSpellAbility().addEffect(new PromiseGiftEffect(giftType)); card.getSpellAbility().addEffect(new PromiseGiftEffect(giftType));
} }
@ -154,6 +152,7 @@ class PromiseGiftEffect extends OneShotEffect {
PromiseGiftEffect(GiftType giftType) { PromiseGiftEffect(GiftType giftType) {
super(Outcome.Benefit); super(Outcome.Benefit);
this.giftType = giftType; this.giftType = giftType;
staticText = "they " + giftType.getDescription();
} }
private PromiseGiftEffect(final PromiseGiftEffect effect) { private PromiseGiftEffect(final PromiseGiftEffect effect) {

View file

@ -7,7 +7,6 @@ import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.Condition; import mage.abilities.condition.Condition;
import mage.abilities.costs.*; import mage.abilities.costs.*;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.CreateTokenCopyTargetEffect; import mage.abilities.effects.common.CreateTokenCopyTargetEffect;
import mage.constants.Outcome; import mage.constants.Outcome;
@ -43,10 +42,8 @@ public class OffspringAbility extends StaticAbility implements OptionalAdditiona
this.additionalCost.setRepeatable(false); this.additionalCost.setRepeatable(false);
this.rule = additionalCost.getName() + ' ' + additionalCost.getReminderText(); this.rule = additionalCost.getName() + ' ' + additionalCost.getReminderText();
this.setRuleAtTheTop(true); this.setRuleAtTheTop(true);
this.addSubAbility(new ConditionalInterveningIfTriggeredAbility( this.addSubAbility(new EntersBattlefieldTriggeredAbility(new OffspringEffect())
new EntersBattlefieldTriggeredAbility(new OffspringEffect()), OffspringCondition.instance, .withInterveningIf(OffspringCondition.instance).setRuleVisible(false));
"When this creature enters, if its offspring cost was paid, create a 1/1 token copy of it."
).setRuleVisible(false));
} }
private OffspringAbility(final OffspringAbility ability) { private OffspringAbility(final OffspringAbility ability) {
@ -96,6 +93,7 @@ class OffspringEffect extends OneShotEffect {
OffspringEffect() { OffspringEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "create a 1/1 token copy of it";
} }
private OffspringEffect(final OffspringEffect effect) { private OffspringEffect(final OffspringEffect effect) {
@ -127,6 +125,6 @@ enum OffspringCondition implements Condition {
@Override @Override
public String toString() { public String toString() {
return "Offspring cost was paid"; return "its offspring cost was paid";
} }
} }

View file

@ -4,7 +4,6 @@ import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.EntersBattlefieldAbility;
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.dynamicvalue.common.GetXValue; import mage.abilities.dynamicvalue.common.GetXValue;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.EntersBattlefieldWithXCountersEffect; import mage.abilities.effects.common.EntersBattlefieldWithXCountersEffect;
@ -18,13 +17,8 @@ public class RavenousAbility extends EntersBattlefieldAbility {
public RavenousAbility() { public RavenousAbility() {
super(new EntersBattlefieldWithXCountersEffect(CounterType.P1P1.createInstance())); super(new EntersBattlefieldWithXCountersEffect(CounterType.P1P1.createInstance()));
Ability ability = new ConditionalInterveningIfTriggeredAbility( this.addSubAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1))
new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)), .withInterveningIf(RavenousAbilityCondition.instance).setRuleVisible(false));
RavenousAbilityCondition.instance, "When this creature enters, " +
"if X is 5 or more, draw a card"
);
ability.setRuleVisible(false);
this.addSubAbility(ability);
} }
private RavenousAbility(final RavenousAbility ability) { private RavenousAbility(final RavenousAbility ability) {
@ -50,4 +44,9 @@ enum RavenousAbilityCondition implements Condition {
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
return GetXValue.instance.calculate(game, source, null) >= 5; return GetXValue.instance.calculate(game, source, null) >= 5;
} }
@Override
public String toString() {
return "X is 5 or more";
}
} }