diff --git a/Mage.Sets/src/mage/cards/d/DrainPower.java b/Mage.Sets/src/mage/cards/d/DrainPower.java index dd74c601caf..5cc297b22c9 100644 --- a/Mage.Sets/src/mage/cards/d/DrainPower.java +++ b/Mage.Sets/src/mage/cards/d/DrainPower.java @@ -32,7 +32,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; -import mage.Mana; import mage.abilities.Ability; import mage.abilities.ActivatedAbility; import mage.abilities.costs.mana.ManaCost; @@ -42,11 +41,13 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityType; import mage.constants.CardType; +import mage.constants.Duration; import mage.constants.Outcome; import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.permanent.PermanentInListPredicate; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.players.ManaPoolItem; import mage.players.Player; import mage.target.TargetPermanent; import mage.target.TargetPlayer; @@ -58,7 +59,7 @@ import mage.target.TargetPlayer; public class DrainPower extends CardImpl { public DrainPower(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{U}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{U}{U}"); // Target player activates a mana ability of each land they control. Then that player loses all unspent mana and you add the mana lost this way. this.getSpellAbility().addEffect(new DrainPowerEffect()); @@ -76,11 +77,11 @@ public class DrainPower extends CardImpl { } class DrainPowerEffect extends OneShotEffect { - + private static final FilterLandPermanent filter = new FilterLandPermanent(); public DrainPowerEffect() { - super(Outcome.Tap); + super(Outcome.PutManaInPool); this.staticText = "Target player activates a mana ability of each land they control. Then that player loses all unspent mana and you add the mana lost this way"; } @@ -100,7 +101,7 @@ class DrainPowerEffect extends OneShotEffect { if (targetPlayer != null) { List ignorePermanents = new ArrayList<>(); TargetPermanent target = null; - + while (true) { Map> manaAbilitiesMap = new HashMap<>(); for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, targetPlayer.getId(), game)) { @@ -131,9 +132,9 @@ class DrainPowerEffect extends OneShotEffect { if (manaAbilitiesMap.isEmpty()) { break; } - - List permList = new ArrayList(manaAbilitiesMap.keySet()); - Permanent permanent = null; + + List permList = new ArrayList<>(manaAbilitiesMap.keySet()); + Permanent permanent; if (permList.size() > 1 || target != null) { FilterLandPermanent filter2 = new FilterLandPermanent("land you control to tap for mana (remaining: " + permList.size() + ')'); filter2.add(new PermanentInListPredicate(permList)); @@ -149,9 +150,9 @@ class DrainPowerEffect extends OneShotEffect { int i = 0; for (ActivatedManaAbilityImpl manaAbility : manaAbilitiesMap.get(permanent)) { i++; - if (manaAbilitiesMap.get(permanent).size() <= i - || targetPlayer.chooseUse(Outcome.Neutral, "Activate mana ability \"" + manaAbility.getRule() + "\" of " + permanent.getLogName() - + "? (Choose \"no\" to activate next mana ability)", source, game)) { + if (manaAbilitiesMap.get(permanent).size() <= i + || targetPlayer.chooseUse(Outcome.Neutral, "Activate mana ability \"" + manaAbility.getRule() + "\" of " + permanent.getLogName() + + "? (Choose \"no\" to activate next mana ability)", source, game)) { boolean originalCanUndo = manaAbility.isUndoPossible(); manaAbility.setUndoPossible(false); // prevents being able to undo Drain Power if (targetPlayer.activateAbility(manaAbility, game)) { @@ -163,14 +164,18 @@ class DrainPowerEffect extends OneShotEffect { } } } - - // 106.12. One card (Drain Power) causes one player to lose unspent mana and another to add “the mana lost this way.” (Note that these may be the same player.) - // This empties the former player’s mana pool and causes the mana emptied this way to be put into the latter player’s mana pool. Which permanents, spells, and/or + + // 106.12. One card (Drain Power) causes one player to lose unspent mana and another to add “the mana lost this way.” (Note that these may be the same player.) + // This empties the former player’s mana pool and causes the mana emptied this way to be put into the latter player’s mana pool. Which permanents, spells, and/or // abilities produced that mana are unchanged, as are any restrictions or additional effects associated with any of that mana. // TODO: retain riders associated with drained mana - Mana mana = targetPlayer.getManaPool().getMana(); + List manaItems = targetPlayer.getManaPool().getManaItems(); targetPlayer.getManaPool().emptyPool(game); - controller.getManaPool().addMana(mana, game, source); + for (ManaPoolItem manaPoolItem : manaItems) { + controller.getManaPool().addMana( + manaPoolItem.isConditional() ? manaPoolItem.getConditionalMana() : manaPoolItem.getMana(), + game, source, Duration.EndOfTurn.equals(manaPoolItem.getDuration())); + } return true; } return false; diff --git a/Mage.Sets/src/mage/cards/t/TorgaarFamineIncarnate.java b/Mage.Sets/src/mage/cards/t/TorgaarFamineIncarnate.java index f3e0e188767..5a8751e4d99 100644 --- a/Mage.Sets/src/mage/cards/t/TorgaarFamineIncarnate.java +++ b/Mage.Sets/src/mage/cards/t/TorgaarFamineIncarnate.java @@ -90,56 +90,6 @@ public class TorgaarFamineIncarnate extends CardImpl { } } -//class TorgaarFamineIncarnateSacrificeCost extends CostImpl { -// -// int numbSacrificed = 0; -// -// public TorgaarFamineIncarnateSacrificeCost() { -// this.text = "sacrifice any number of creatures"; -// -// } -// -// public TorgaarFamineIncarnateSacrificeCost(final TorgaarFamineIncarnateSacrificeCost cost) { -// super(cost); -// this.numbSacrificed = cost.numbSacrificed; -// } -// -// @Override -// public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { -// return true; -// } -// -// @Override -// public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { -// TargetControlledCreaturePermanent target -// = new TargetControlledCreaturePermanent(0, Integer.MAX_VALUE, -// new FilterControlledCreaturePermanent("select any number of creatures to sacrifice. " -// + "This spell costs {2} less to cast for each creature sacrificed this way"), true); -// Player player = game.getPlayer(controllerId); -// if (player != null) { -// player.chooseTarget(Outcome.Benefit, target, ability, game); -// for (UUID creatureId : target.getTargets()) { -// Permanent creature = game.getPermanent(creatureId); -// if (creature != null) { -// if (creature.sacrifice(sourceId, game)) { -// numbSacrificed++; -// } -// } -// } -// } -// this.paid = true; -// return paid; -// } -// -// public int getNumbSacrificed() { -// return numbSacrificed; -// } -// -// @Override -// public TorgaarFamineIncarnateSacrificeCost copy() { -// return new TorgaarFamineIncarnateSacrificeCost(this); -// } -//} class TorgaarFamineIncarnateEffect extends OneShotEffect { public TorgaarFamineIncarnateEffect() { diff --git a/Mage/src/main/java/mage/abilities/effects/common/AddConditionalManaOfAnyColorEffect.java b/Mage/src/main/java/mage/abilities/effects/common/AddConditionalManaOfAnyColorEffect.java index 3f683a25de9..02964f7426a 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/AddConditionalManaOfAnyColorEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/AddConditionalManaOfAnyColorEffect.java @@ -63,9 +63,9 @@ public class AddConditionalManaOfAnyColorEffect extends ManaEffect { staticText = "Add " + (amount instanceof StaticValue ? (CardUtil.numberToText(((StaticValue) amount).toString())) : "") + " mana " - + (oneChoice ? "of any" - + (amount instanceof StaticValue && (((StaticValue) amount).toString()).equals("1") ? "" : " one") - + " color" : "in any combination of colors") + + (oneChoice || (amount instanceof StaticValue && (((StaticValue) amount).toString()).equals("1")) + ? "of any" + (amount instanceof StaticValue && (((StaticValue) amount).toString()).equals("1") ? "" : " one") + " color" + : "in any combination of colors") + ". " + manaBuilder.getRule(); } diff --git a/Mage/src/main/java/mage/players/ManaPool.java b/Mage/src/main/java/mage/players/ManaPool.java index 565e96cac21..2448b8a9220 100644 --- a/Mage/src/main/java/mage/players/ManaPool.java +++ b/Mage/src/main/java/mage/players/ManaPool.java @@ -395,7 +395,8 @@ public class ManaPool implements Serializable { Mana mana = manaToAdd.copy(); if (!game.replaceEvent(new ManaEvent(EventType.ADD_MANA, source.getId(), source.getSourceId(), playerId, mana))) { if (mana instanceof ConditionalMana) { - ManaPoolItem item = new ManaPoolItem((ConditionalMana) mana, source.getSourceObject(game), source.getOriginalId()); + ManaPoolItem item = new ManaPoolItem((ConditionalMana) mana, source.getSourceObject(game), + ((ConditionalMana) mana).getManaProducerOriginalId() != null ? ((ConditionalMana) mana).getManaProducerOriginalId() : source.getOriginalId()); if (emptyOnTurnsEnd) { item.setDuration(Duration.EndOfTurn); } @@ -505,4 +506,13 @@ public class ManaPool implements Serializable { public boolean isEmpty() { return count() == 0; } + + public List getManaItems() { + List itemsCopy = new ArrayList<>(); + for (ManaPoolItem manaItem : manaItems) { + itemsCopy.add(manaItem.copy()); + } + return itemsCopy; + } + }