Skip to content

Commit

Permalink
refactor: simpler method for mana that lasts until end of turn (#12667)
Browse files Browse the repository at this point in the history
  • Loading branch information
xenohedron authored Aug 24, 2024
1 parent 44fb947 commit 34ae226
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 178 deletions.
34 changes: 2 additions & 32 deletions Mage.Sets/src/mage/cards/b/BirgiGodOfStorytelling.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,15 @@

import mage.MageInt;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.costs.common.DiscardCardCost;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.ExileTopXMayPlayUntilEffect;
import mage.abilities.effects.mana.UntilEndOfTurnManaEffect;
import mage.abilities.keyword.BoastAbility;
import mage.cards.CardSetInfo;
import mage.cards.ModalDoubleFacedCard;
import mage.constants.*;
import mage.game.Game;
import mage.players.Player;

import java.util.UUID;

Expand All @@ -37,7 +34,7 @@ public BirgiGodOfStorytelling(UUID ownerId, CardSetInfo setInfo) {

// Whenever you cast a spell, add {R}. Until end of turn, you don't lose this mana as steps and phases end.
this.getLeftHalfCard().addAbility(new SpellCastControllerTriggeredAbility(
new BirgiGodOfStorytellingManaEffect(), false
new UntilEndOfTurnManaEffect(Mana.RedMana(1)), false
));

// Creatures you control can boast twice during each of your turns rather than once.
Expand All @@ -61,30 +58,3 @@ public BirgiGodOfStorytelling copy() {
return new BirgiGodOfStorytelling(this);
}
}

class BirgiGodOfStorytellingManaEffect extends OneShotEffect {

BirgiGodOfStorytellingManaEffect() {
super(Outcome.Benefit);
staticText = "add {R}. Until end of turn, you don't lose this mana as steps and phases end";
}

private BirgiGodOfStorytellingManaEffect(final BirgiGodOfStorytellingManaEffect effect) {
super(effect);
}

@Override
public BirgiGodOfStorytellingManaEffect copy() {
return new BirgiGodOfStorytellingManaEffect(this);
}

@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
if (player == null) {
return false;
}
player.getManaPool().addMana(new Mana(ManaType.RED, 1), game, source, true);
return true;
}
}
36 changes: 2 additions & 34 deletions Mage.Sets/src/mage/cards/b/BrazenCollector.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,13 @@

import mage.MageInt;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.mana.UntilEndOfTurnManaEffect;
import mage.abilities.keyword.FirstStrikeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ManaType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.game.Game;
import mage.players.Player;

import java.util.UUID;

Expand All @@ -34,7 +29,7 @@ public BrazenCollector(UUID ownerId, CardSetInfo setInfo) {
this.addAbility(FirstStrikeAbility.getInstance());

// Whenever Brazen Collector attacks, add {R}. Until end of turn, you don't lose this mana as steps and phases end.
this.addAbility(new AttacksTriggeredAbility(new BrazenCollectorEffect()));
this.addAbility(new AttacksTriggeredAbility(new UntilEndOfTurnManaEffect(Mana.RedMana(1))));
}

private BrazenCollector(final BrazenCollector card) {
Expand All @@ -46,30 +41,3 @@ public BrazenCollector copy() {
return new BrazenCollector(this);
}
}

class BrazenCollectorEffect extends OneShotEffect {

BrazenCollectorEffect() {
super(Outcome.Benefit);
staticText = "add {R}. Until end of turn, you don't lose this mana as steps and phases end";
}

private BrazenCollectorEffect(final BrazenCollectorEffect effect) {
super(effect);
}

@Override
public BrazenCollectorEffect copy() {
return new BrazenCollectorEffect(this);
}

@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
if (player == null) {
return false;
}
player.getManaPool().addMana(new Mana(ManaType.RED, 1), game, source, true);
return true;
}
}
34 changes: 2 additions & 32 deletions Mage.Sets/src/mage/cards/d/DeadlyDancer.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,16 @@
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.TransformIntoSourceTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.mana.UntilEndOfTurnManaEffect;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import mage.game.Game;
import mage.players.Player;
import mage.target.TargetPermanent;

import java.util.UUID;
Expand All @@ -41,7 +38,7 @@ public DeadlyDancer(UUID ownerId, CardSetInfo setInfo) {
this.addAbility(TrampleAbility.getInstance());

// When this creature transforms into Deadly Dancer, add {R}{R}. Until end of turn, you don't lose this mana as steps and phases end.
this.addAbility(new TransformIntoSourceTriggeredAbility(new DeadlyDancerEffect()));
this.addAbility(new TransformIntoSourceTriggeredAbility(new UntilEndOfTurnManaEffect(Mana.RedMana(2))));

// {R}{R}: Deadly Dancer and another target creature each get +1/+0 until end of turn.
Ability ability = new SimpleActivatedAbility(new BoostSourceEffect(
Expand All @@ -62,30 +59,3 @@ public DeadlyDancer copy() {
return new DeadlyDancer(this);
}
}

class DeadlyDancerEffect extends OneShotEffect {

DeadlyDancerEffect() {
super(Outcome.Benefit);
staticText = "add {R}{R}. Until end of turn, you don't lose this mana as steps and phases end";
}

private DeadlyDancerEffect(final DeadlyDancerEffect effect) {
super(effect);
}

@Override
public DeadlyDancerEffect copy() {
return new DeadlyDancerEffect(this);
}

@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
if (player == null) {
return false;
}
player.getManaPool().addMana(Mana.RedMana(2), game, source, true);
return true;
}
}
10 changes: 3 additions & 7 deletions Mage.Sets/src/mage/cards/s/SakuraTribeSpringcaller.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@

package mage.cards.s;

import mage.MageInt;
import mage.Mana;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.mana.AddManaToManaPoolTargetControllerEffect;
import mage.abilities.effects.mana.UntilEndOfTurnManaEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.TargetController;
import mage.constants.Zone;

import java.util.UUID;

Expand All @@ -29,9 +26,8 @@ public SakuraTribeSpringcaller(UUID ownerId, CardSetInfo setInfo) {
this.toughness = new MageInt(4);

// At the beginning of your upkeep, add {G}. Until end of turn, you don't lose this mana as steps and phases end.
Effect effect = new AddManaToManaPoolTargetControllerEffect(Mana.GreenMana(1), "your", true);
effect.setText("add {G}. Until end of turn, you don't lose this mana as steps and phases end");
this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, false));
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new UntilEndOfTurnManaEffect(Mana.GreenMana(1)),
TargetController.YOU, false));
}

private SakuraTribeSpringcaller(final SakuraTribeSpringcaller card) {
Expand Down
44 changes: 4 additions & 40 deletions Mage.Sets/src/mage/cards/s/SavageVentmaw.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,13 @@

import mage.MageInt;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.mana.ManaEffect;
import mage.abilities.effects.mana.UntilEndOfTurnManaEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.game.Game;
import mage.players.Player;

import java.util.UUID;

Expand All @@ -31,8 +27,9 @@ public SavageVentmaw(UUID ownerId, CardSetInfo setInfo) {
this.addAbility(FlyingAbility.getInstance());

// Whenever Savage Ventmaw attacks, add {R}{R}{R}{G}{G}{G}. Until end of turn, you don't lose this mana as steps and phases end.
Effect effect = new SavageVentmawManaEffect();
this.addAbility(new AttacksTriggeredAbility(effect, false));
this.addAbility(new AttacksTriggeredAbility(new UntilEndOfTurnManaEffect(
new Mana(0, 0, 0, 3, 3, 0, 0, 0)
), false));
}

private SavageVentmaw(final SavageVentmaw card) {
Expand All @@ -44,36 +41,3 @@ public SavageVentmaw copy() {
return new SavageVentmaw(this);
}
}

class SavageVentmawManaEffect extends ManaEffect {

protected Mana mana;

public SavageVentmawManaEffect() {
super();
this.mana = new Mana(0, 0, 0, 3, 3, 0, 0, 0);
this.staticText = "add " + mana.toString() + ". Until end of turn, you don't lose this mana as steps and phases end";
}

private SavageVentmawManaEffect(final SavageVentmawManaEffect effect) {
super(effect);
this.mana = effect.mana.copy();
this.staticText = effect.staticText;
}

@Override
public SavageVentmawManaEffect copy() {
return new SavageVentmawManaEffect(this);
}

@Override
protected void addManaToPool(Player player, Mana manaToAdd, Game game, Ability source) {
player.getManaPool().addMana(manaToAdd, game, source, true);
}

@Override
public Mana produceMana(Game game, Ability source) {
return mana.copy();
}

}
35 changes: 2 additions & 33 deletions Mage.Sets/src/mage/cards/s/SuChiCaveGuard.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,15 @@

import mage.MageInt;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.common.DiesSourceTriggeredAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.mana.UntilEndOfTurnManaEffect;
import mage.abilities.keyword.VigilanceAbility;
import mage.abilities.keyword.WardAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.game.Game;
import mage.players.Player;

import java.util.UUID;

Expand All @@ -37,7 +33,7 @@ public SuChiCaveGuard(UUID ownerId, CardSetInfo setInfo) {
this.addAbility(new WardAbility(new ManaCostsImpl<>("{4}")));

// When Su-Chi Cave Guard dies, add eight {C}. Until end of turn, you don't lose this mana as steps and phases end.
this.addAbility(new DiesSourceTriggeredAbility(new SuChiCaveGuardEffect()));
this.addAbility(new DiesSourceTriggeredAbility(new UntilEndOfTurnManaEffect(Mana.ColorlessMana(8))));
}

private SuChiCaveGuard(final SuChiCaveGuard card) {
Expand All @@ -49,30 +45,3 @@ public SuChiCaveGuard copy() {
return new SuChiCaveGuard(this);
}
}

class SuChiCaveGuardEffect extends OneShotEffect {

SuChiCaveGuardEffect() {
super(Outcome.Benefit);
staticText = "add eight {C}. Until end of turn, you don't lose this mana as steps and phases end";
}

private SuChiCaveGuardEffect(final SuChiCaveGuardEffect effect) {
super(effect);
}

@Override
public SuChiCaveGuardEffect copy() {
return new SuChiCaveGuardEffect(this);
}

@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
if (player != null) {
player.getManaPool().addMana(Mana.ColorlessMana(8), game, source, true);
return true;
}
return false;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package mage.abilities.effects.mana;

import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.game.Game;
import mage.players.Player;

public class UntilEndOfTurnManaEffect extends BasicManaEffect {

public UntilEndOfTurnManaEffect(Mana mana) {
this(mana, null);
}

public UntilEndOfTurnManaEffect(Mana mana, DynamicValue netAmount) {
super(mana, netAmount);
staticText += ". Until end of turn, you don't lose this mana as steps and phases end";
}

protected UntilEndOfTurnManaEffect(final UntilEndOfTurnManaEffect effect) {
super(effect);
}

@Override
public UntilEndOfTurnManaEffect copy() {
return new UntilEndOfTurnManaEffect(this);
}

@Override
protected void addManaToPool(Player player, Mana manaToAdd, Game game, Ability source) {
player.getManaPool().addMana(manaToAdd, game, source, true);
}

}

0 comments on commit 34ae226

Please sign in to comment.