[SPM] Implement Rent Is Due

This commit is contained in:
theelk801 2025-09-01 13:18:29 -04:00
parent e22055b697
commit 9e54ac477e
3 changed files with 60 additions and 1 deletions

View file

@ -0,0 +1,52 @@
package mage.cards.r;
import mage.abilities.costs.common.TapTargetCost;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.SacrificeSourceEffect;
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.permanent.TappedPredicate;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class RentIsDue extends CardImpl {
private static final FilterControlledPermanent filter
= new FilterControlledPermanent("untapped creatures and/or Treasures you control");
static {
filter.add(TappedPredicate.UNTAPPED);
filter.add(Predicates.or(
CardType.CREATURE.getPredicate(),
SubType.TREASURE.getPredicate()
));
}
public RentIsDue(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}");
// At the beginning of your end step, you may tap two untapped creatures and/or Treasures you control. If you do, draw a card. Otherwise, sacrifice this enchantment.
this.addAbility(new BeginningOfEndStepTriggeredAbility(new DoIfCostPaid(
new DrawCardSourceControllerEffect(1),
new SacrificeSourceEffect(), new TapTargetCost(2, filter)
).setOtherwiseText("Otherwise")));
}
private RentIsDue(final RentIsDue card) {
super(card);
}
@Override
public RentIsDue copy() {
return new RentIsDue(this);
}
}

View file

@ -103,6 +103,7 @@ public final class MarvelsSpiderMan extends ExpansionSet {
cards.add(new SetCardInfo("Radioactive Spider", 213, Rarity.RARE, mage.cards.r.RadioactiveSpider.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Radioactive Spider", 213, Rarity.RARE, mage.cards.r.RadioactiveSpider.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Radioactive Spider", 285, Rarity.RARE, mage.cards.r.RadioactiveSpider.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Radioactive Spider", 285, Rarity.RARE, mage.cards.r.RadioactiveSpider.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Raging Goblinoids", 85, Rarity.UNCOMMON, mage.cards.r.RagingGoblinoids.class)); cards.add(new SetCardInfo("Raging Goblinoids", 85, Rarity.UNCOMMON, mage.cards.r.RagingGoblinoids.class));
cards.add(new SetCardInfo("Rent Is Due", 11, Rarity.RARE, mage.cards.r.RentIsDue.class));
cards.add(new SetCardInfo("Rhino, Barreling Brute", 140, Rarity.UNCOMMON, mage.cards.r.RhinoBarrelingBrute.class)); cards.add(new SetCardInfo("Rhino, Barreling Brute", 140, Rarity.UNCOMMON, mage.cards.r.RhinoBarrelingBrute.class));
cards.add(new SetCardInfo("Risky Research", 62, Rarity.COMMON, mage.cards.r.RiskyResearch.class)); cards.add(new SetCardInfo("Risky Research", 62, Rarity.COMMON, mage.cards.r.RiskyResearch.class));
cards.add(new SetCardInfo("Romantic Rendezvous", 86, Rarity.COMMON, mage.cards.r.RomanticRendezvous.class)); cards.add(new SetCardInfo("Romantic Rendezvous", 86, Rarity.COMMON, mage.cards.r.RomanticRendezvous.class));

View file

@ -19,6 +19,7 @@ public class DoIfCostPaid extends OneShotEffect {
protected final Effects executingEffects; protected final Effects executingEffects;
protected final Effects otherwiseEffects; protected final Effects otherwiseEffects;
protected String otherwiseText = "If you don't";
protected final Cost cost; protected final Cost cost;
private final String chooseUseText; private final String chooseUseText;
private final boolean optional; private final boolean optional;
@ -79,6 +80,11 @@ public class DoIfCostPaid extends OneShotEffect {
return this; return this;
} }
public DoIfCostPaid setOtherwiseText(String otherwiseText) {
this.otherwiseText = otherwiseText;
return this;
}
/** /**
* Allow to add additional info in pay dialog, so user can split it in diff use cases to remember by right click * Allow to add additional info in pay dialog, so user can split it in diff use cases to remember by right click
* Example: ignore untap payment for already untapped permanent like Mana Vault * Example: ignore untap payment for already untapped permanent like Mana Vault
@ -178,7 +184,7 @@ public class DoIfCostPaid extends OneShotEffect {
return (optional ? "you may " : "") return (optional ? "you may " : "")
+ CardUtil.addCostVerb(cost.getText()) + "." + CardUtil.addCostVerb(cost.getText()) + "."
+ (!executingEffects.isEmpty() ? " If you do, " + executingEffects.getText(mode) : "") + (!executingEffects.isEmpty() ? " If you do, " + executingEffects.getText(mode) : "")
+ (!otherwiseEffects.isEmpty() ? " If you don't, " + otherwiseEffects.getText(mode) : ""); + (!otherwiseEffects.isEmpty() ? " " + otherwiseText + ", " + otherwiseEffects.getText(mode) : "");
} }
@Override @Override