diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java index 2425356cfb3..f0106a7b9bd 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java @@ -883,10 +883,12 @@ public class ComputerPlayer extends PlayerImpl implements Player { for (Mana mana: unplayable.keySet()) { for (Card card: lands) { for (ManaAbility ability: card.getAbilities().getManaAbilities(Zone.BATTLEFIELD)) { - if (ability.getNetMana(game).enough(mana)) { - this.playLand(card, game); - lands.remove(card); - return; + for (Mana netMana: ability.getNetMana(game)) { + if (netMana.enough(mana)) { + this.playLand(card, game); + lands.remove(card); + return; + } } } } @@ -895,10 +897,12 @@ public class ComputerPlayer extends PlayerImpl implements Player { for (Mana mana: unplayable.keySet()) { for (Card card: lands) { for (ManaAbility ability: card.getAbilities().getManaAbilities(Zone.BATTLEFIELD)) { - if (mana.contains(ability.getNetMana(game))) { - this.playLand(card, game); - lands.remove(card); - return; + for (Mana netMana: ability.getNetMana(game)) { + if (mana.contains(netMana)) { + this.playLand(card, game); + lands.remove(card); + return; + } } } } @@ -1018,9 +1022,11 @@ public class ComputerPlayer extends PlayerImpl implements Player { // pay all colored costs first for (ManaAbility ability: perm.getAbilities().getAvailableManaAbilities(Zone.BATTLEFIELD, game)) { if (cost instanceof ColoredManaCost) { - if (cost.testPay(ability.getNetMana(game))) { - if (activateAbility(ability, game)) { - return true; + for (Mana netMana: ability.getNetMana(game)) { + if (cost.testPay(netMana)) { + if (activateAbility(ability, game)) { + return true; + } } } } @@ -1028,9 +1034,11 @@ public class ComputerPlayer extends PlayerImpl implements Player { // then pay hybrid for (ManaAbility ability: perm.getAbilities().getAvailableManaAbilities(Zone.BATTLEFIELD, game)) { if (cost instanceof HybridManaCost) { - if (cost.testPay(ability.getNetMana(game))) { - if (activateAbility(ability, game)) { - return true; + for (Mana netMana: ability.getNetMana(game)) { + if (cost.testPay(netMana)) { + if (activateAbility(ability, game)) { + return true; + } } } } @@ -1038,9 +1046,11 @@ public class ComputerPlayer extends PlayerImpl implements Player { // then pay mono hybrid for (ManaAbility ability: perm.getAbilities().getAvailableManaAbilities(Zone.BATTLEFIELD, game)) { if (cost instanceof MonoHybridManaCost) { - if (cost.testPay(ability.getNetMana(game))) { - if (activateAbility(ability, game)) { - return true; + for (Mana netMana: ability.getNetMana(game)) { + if (cost.testPay(netMana)) { + if (activateAbility(ability, game)) { + return true; + } } } } @@ -1048,9 +1058,11 @@ public class ComputerPlayer extends PlayerImpl implements Player { // finally pay generic for (ManaAbility ability: perm.getAbilities().getAvailableManaAbilities(Zone.BATTLEFIELD, game)) { if (cost instanceof GenericManaCost) { - if (cost.testPay(ability.getNetMana(game))) { - if (activateAbility(ability, game)) { - return true; + for (Mana netMana: ability.getNetMana(game)) { + if (cost.testPay(netMana)) { + if (activateAbility(ability, game)) { + return true; + } } } } @@ -1080,14 +1092,17 @@ public class ComputerPlayer extends PlayerImpl implements Player { private List getSortedProducers(ManaCosts unpaid, Game game) { List unsorted = this.getAvailableManaProducers(game); unsorted.addAll(this.getAvailableManaProducersWithCost(game)); - Map scored = new HashMap(); + Map scored = new HashMap<>(); for (Permanent permanent: unsorted) { int score = 0; for (ManaCost cost: unpaid) { + Abilities: for (ManaAbility ability: permanent.getAbilities().getAvailableManaAbilities(Zone.BATTLEFIELD, game)) { - if (cost.testPay(ability.getNetMana(game))) { - score++; - break; + for (Mana netMana: ability.getNetMana(game)) { + if (cost.testPay(netMana)) { + score++; + break Abilities; + } } } } @@ -1107,14 +1122,14 @@ public class ComputerPlayer extends PlayerImpl implements Player { } private List sortByValue(Map map) { - List> list = new LinkedList>(map.entrySet()); + List> list = new LinkedList<>(map.entrySet()); Collections.sort(list, new Comparator>() { @Override public int compare(Entry o1, Entry o2) { return (o1.getValue().compareTo(o2.getValue())); } }); - List result = new ArrayList(); + List result = new ArrayList<>(); for (Entry entry : list) { result.add(entry.getKey()); } @@ -1937,7 +1952,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { protected void logState(Game game) { if (log.isTraceEnabled()) { - logList(new StringBuilder("Computer player ").append(name).append(" hand: ").toString(), new ArrayList(hand.getCards(game))); + logList("Computer player " + name + " hand: ", new ArrayList(hand.getCards(game))); } } diff --git a/Mage.Sets/src/mage/sets/bornofthegods/AstralCornucopia.java b/Mage.Sets/src/mage/sets/bornofthegods/AstralCornucopia.java index a8fe83a8c97..719bb7721f5 100644 --- a/Mage.Sets/src/mage/sets/bornofthegods/AstralCornucopia.java +++ b/Mage.Sets/src/mage/sets/bornofthegods/AstralCornucopia.java @@ -27,6 +27,8 @@ */ package mage.sets.bornofthegods; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; import mage.Mana; import mage.abilities.Ability; @@ -127,11 +129,12 @@ class AstralCornucopiaManaAbility extends ManaAbility { } @Override - public Mana getNetMana(Game game) { - if (game == null) { - return new Mana(); - } - return new Mana(((AstralCornucopiaManaEffect)this.getEffects().get(0)).computeMana(game, this)); + public List getNetMana(Game game) { + List newNetMana = new ArrayList<>(); + if (game != null) { + newNetMana.add(new Mana(((AstralCornucopiaManaEffect)this.getEffects().get(0)).computeMana(game, this))); + } + return newNetMana; } } diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/HeartbeatOfSpring.java b/Mage.Sets/src/mage/sets/championsofkamigawa/HeartbeatOfSpring.java index 9ec085707f8..065fedb07fa 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/HeartbeatOfSpring.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/HeartbeatOfSpring.java @@ -127,7 +127,9 @@ class HeartbeatOfSpringEffect extends ManaEffect { Abilities mana = land.getAbilities().getManaAbilities(Zone.BATTLEFIELD); Mana types = new Mana(); for (ManaAbility ability : mana) { - types.add(ability.getNetMana(game)); + for (Mana netMana: ability.getNetMana(game)) { + types.add(netMana); + } } Choice choice = new ChoiceImpl(true); choice.setMessage("Pick a mana color"); diff --git a/Mage.Sets/src/mage/sets/conflux/ExoticOrchard.java b/Mage.Sets/src/mage/sets/conflux/ExoticOrchard.java index 9e3f290be72..c277e21be00 100644 --- a/Mage.Sets/src/mage/sets/conflux/ExoticOrchard.java +++ b/Mage.Sets/src/mage/sets/conflux/ExoticOrchard.java @@ -97,7 +97,9 @@ class ExoticOrchardEffect extends ManaEffect { for (Permanent land : lands) { Abilities mana = land.getAbilities().getManaAbilities(Zone.BATTLEFIELD); for (ManaAbility ability : mana) { - types.add(ability.getNetMana(game)); + for (Mana netMana: ability.getNetMana(game)) { + types.add(netMana); + } } } Choice choice = new ChoiceImpl(true); @@ -131,16 +133,22 @@ class ExoticOrchardEffect extends ManaEffect { } else { player.choose(outcome, choice, game); } - if (choice.getChoice().equals("Black")) { - player.getManaPool().addMana(Mana.BlackMana, game, source); - } else if (choice.getChoice().equals("Blue")) { - player.getManaPool().addMana(Mana.BlueMana, game, source); - } else if (choice.getChoice().equals("Red")) { - player.getManaPool().addMana(Mana.RedMana, game, source); - } else if (choice.getChoice().equals("Green")) { - player.getManaPool().addMana(Mana.GreenMana, game, source); - } else if (choice.getChoice().equals("White")) { - player.getManaPool().addMana(Mana.WhiteMana, game, source); + switch (choice.getChoice()) { + case "Black": + player.getManaPool().addMana(Mana.BlackMana, game, source); + break; + case "Blue": + player.getManaPool().addMana(Mana.BlueMana, game, source); + break; + case "Red": + player.getManaPool().addMana(Mana.RedMana, game, source); + break; + case "Green": + player.getManaPool().addMana(Mana.GreenMana, game, source); + break; + case "White": + player.getManaPool().addMana(Mana.WhiteMana, game, source); + break; } } return true; diff --git a/Mage.Sets/src/mage/sets/conflux/KnotvineMystic.java b/Mage.Sets/src/mage/sets/conflux/KnotvineMystic.java index da2a89ff83d..746b36ae2d3 100644 --- a/Mage.Sets/src/mage/sets/conflux/KnotvineMystic.java +++ b/Mage.Sets/src/mage/sets/conflux/KnotvineMystic.java @@ -55,6 +55,8 @@ public class KnotvineMystic extends CardImpl{ this.subtype.add("Druid"); this.power = new MageInt(2); this.toughness = new MageInt(2); + + // {1}, {T}: Add {R}{G}{W} to your mana pool. Ability ability = new KnotvineMysticManaAbility(); ability.addManaCost(new GenericManaCost(1)); this.addAbility(ability); @@ -75,9 +77,7 @@ class KnotvineMysticManaAbility extends BasicManaAbility { public KnotvineMysticManaAbility() { super(new BasicManaEffect(new Mana(1, 1, 0, 1, 0, 0, 0))); - this.netMana.setGreen(1); - this.netMana.setRed(1); - this.netMana.setWhite(1); + this.netMana.add(new Mana(1, 1, 0, 1, 0, 0, 0)); } public KnotvineMysticManaAbility(final KnotvineMysticManaAbility ability) { diff --git a/Mage.Sets/src/mage/sets/darksteel/UrGolemsEye.java b/Mage.Sets/src/mage/sets/darksteel/UrGolemsEye.java index 0a1a075be08..1c5b141dcec 100644 --- a/Mage.Sets/src/mage/sets/darksteel/UrGolemsEye.java +++ b/Mage.Sets/src/mage/sets/darksteel/UrGolemsEye.java @@ -64,7 +64,7 @@ class UrGolemsEyeAbility extends BasicManaAbility { public UrGolemsEyeAbility() { super(new BasicManaEffect(new Mana(0, 0, 0, 0, 0, 2, 0))); - this.netMana.setColorless(2); + this.netMana.add(new Mana(0, 0, 0, 0, 0, 2, 0)); } public UrGolemsEyeAbility(final UrGolemsEyeAbility ability) { diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/ZhurTaaAncient.java b/Mage.Sets/src/mage/sets/dragonsmaze/ZhurTaaAncient.java index f4a87c49bfa..12ce318cc8e 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/ZhurTaaAncient.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/ZhurTaaAncient.java @@ -133,7 +133,9 @@ class ZhurTaaAncientEffect extends ManaEffect { Abilities mana = land.getAbilities().getManaAbilities(Zone.BATTLEFIELD); Mana types = new Mana(); for (ManaAbility ability : mana) { - types.add(ability.getNetMana(game)); + for (Mana netMana: ability.getNetMana(game)) { + types.add(netMana); + } } Choice choice = new ChoiceImpl(true); choice.setMessage("Pick a mana color"); diff --git a/Mage.Sets/src/mage/sets/fifthdawn/SylvokExplorer.java b/Mage.Sets/src/mage/sets/fifthdawn/SylvokExplorer.java index a631318f3ae..3d35c2f87af 100644 --- a/Mage.Sets/src/mage/sets/fifthdawn/SylvokExplorer.java +++ b/Mage.Sets/src/mage/sets/fifthdawn/SylvokExplorer.java @@ -104,7 +104,9 @@ class SylvokExplorerEffect extends ManaEffect { for (Permanent land : lands) { Abilities mana = land.getAbilities().getManaAbilities(Zone.BATTLEFIELD); for (ManaAbility ability : mana) { - types.add(ability.getNetMana(game)); + for (Mana netMana: ability.getNetMana(game)) { + types.add(netMana); + } } } Choice choice = new ChoiceImpl(true); diff --git a/Mage.Sets/src/mage/sets/judgment/MirarisWake.java b/Mage.Sets/src/mage/sets/judgment/MirarisWake.java index 2b505bba816..bd4c2c4f905 100644 --- a/Mage.Sets/src/mage/sets/judgment/MirarisWake.java +++ b/Mage.Sets/src/mage/sets/judgment/MirarisWake.java @@ -131,7 +131,9 @@ class MirarisWakeManaEffect extends ManaEffect { Abilities mana = land.getAbilities().getManaAbilities(Zone.BATTLEFIELD); Mana types = new Mana(); for (ManaAbility ability: mana) { - types.add(ability.getNetMana(game)); + for (Mana netMana: ability.getNetMana(game)) { + types.add(netMana); + } } Choice choice = new ChoiceImpl(true); choice.setMessage("Pick a mana color"); diff --git a/Mage.Sets/src/mage/sets/mirage/LionsEyeDiamond.java b/Mage.Sets/src/mage/sets/mirage/LionsEyeDiamond.java index aff77dcd3ae..47d9bda6904 100644 --- a/Mage.Sets/src/mage/sets/mirage/LionsEyeDiamond.java +++ b/Mage.Sets/src/mage/sets/mirage/LionsEyeDiamond.java @@ -76,7 +76,7 @@ class LionsEyeDiamondAbility extends ManaAbility { public LionsEyeDiamondAbility(Zone zone, Mana mana, Cost cost) { super(zone, new BasicManaEffect(mana), cost); - this.netMana = mana.copy(); + this.netMana.add(mana.copy()); } public LionsEyeDiamondAbility(final LionsEyeDiamondAbility ability) { diff --git a/Mage.Sets/src/mage/sets/newphyrexia/VorinclexVoiceOfHunger.java b/Mage.Sets/src/mage/sets/newphyrexia/VorinclexVoiceOfHunger.java index 819927dbb11..0de9ccda69e 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/VorinclexVoiceOfHunger.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/VorinclexVoiceOfHunger.java @@ -137,7 +137,9 @@ class VorinclexEffect extends ManaEffect { Abilities mana = land.getAbilities().getManaAbilities(Zone.BATTLEFIELD); Mana types = new Mana(); for (ManaAbility ability: mana) { - types.add(ability.getNetMana(game)); + for (Mana netMana: ability.getNetMana(game)) { + types.add(netMana); + } } Choice choice = new ChoiceImpl(true); choice.setMessage("Pick a mana color"); diff --git a/Mage.Sets/src/mage/sets/ninthedition/FellwarStone.java b/Mage.Sets/src/mage/sets/ninthedition/FellwarStone.java index 3230cd59904..eb902f8bdf4 100644 --- a/Mage.Sets/src/mage/sets/ninthedition/FellwarStone.java +++ b/Mage.Sets/src/mage/sets/ninthedition/FellwarStone.java @@ -97,7 +97,9 @@ class FellwarStoneEffect extends ManaEffect { for (Permanent land : lands) { Abilities mana = land.getAbilities().getManaAbilities(Zone.BATTLEFIELD); for (ManaAbility ability : mana) { - types.add(ability.getNetMana(game)); + for (Mana netMana: ability.getNetMana(game)) { + types.add(netMana); + } } } Choice choice = new ChoiceImpl(true); diff --git a/Mage.Sets/src/mage/sets/planechase/VedalkenEngineer.java b/Mage.Sets/src/mage/sets/planechase/VedalkenEngineer.java index 226675dbebf..b0483bcaeea 100644 --- a/Mage.Sets/src/mage/sets/planechase/VedalkenEngineer.java +++ b/Mage.Sets/src/mage/sets/planechase/VedalkenEngineer.java @@ -115,7 +115,7 @@ class VedalkenEngineerAbility extends ManaAbility { public VedalkenEngineerAbility(Cost cost, int amount, ConditionalManaBuilder manaBuilder) { super(Zone.BATTLEFIELD, new VedalkenEngineerEffect(amount, manaBuilder), cost); this.addChoice(new ChoiceColor()); - this.netMana.setAny(amount); + this.netMana.add(new Mana(0,0,0,0,0,0, amount)); } public VedalkenEngineerAbility(final VedalkenEngineerAbility ability) { diff --git a/Mage.Sets/src/mage/sets/revisededition/SolRing.java b/Mage.Sets/src/mage/sets/revisededition/SolRing.java index 690553a50dd..22116a788e3 100644 --- a/Mage.Sets/src/mage/sets/revisededition/SolRing.java +++ b/Mage.Sets/src/mage/sets/revisededition/SolRing.java @@ -62,7 +62,7 @@ class SolRingAbility extends BasicManaAbility { public SolRingAbility() { super(new BasicManaEffect(Mana.ColorlessMana(2))); - this.netMana.setColorless(2); + this.netMana.add(new Mana(0,0,0,0,0,2,0)); } public SolRingAbility(final SolRingAbility ability) { diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/DreamstoneHedron.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/DreamstoneHedron.java index f62adb9e426..942a66fccff 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/DreamstoneHedron.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/DreamstoneHedron.java @@ -73,7 +73,7 @@ public class DreamstoneHedron extends CardImpl { public DreamstoneHedronFirstManaAbility() { super(new BasicManaEffect(new Mana(0, 0, 0, 0, 0, 3, 0))); - this.netMana.setColorless(3); + this.netMana.add(new Mana(0,0,0,0,0,3,0)); } public DreamstoneHedronFirstManaAbility(final DreamstoneHedronFirstManaAbility ability) { diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/EldraziTemple.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/EldraziTemple.java index 8e323f5712f..2e689706b11 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/EldraziTemple.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/EldraziTemple.java @@ -70,7 +70,7 @@ class EldraziTempleManaAbility extends BasicManaAbility { EldraziTempleManaAbility ( ) { super(new BasicManaEffect(new EldraziConditionalMana())); - this.netMana.setColorless(2); + this.netMana.add(new Mana(0,0,0,0,0,2,0)); } EldraziTempleManaAbility ( EldraziTempleManaAbility ability ) { diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/GrandArchitect.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/GrandArchitect.java index 5dfca3cb18d..e0a0e00fac3 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/GrandArchitect.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/GrandArchitect.java @@ -148,7 +148,7 @@ class GrandArchitectManaAbility extends ManaAbility { GrandArchitectManaAbility ( ) { super(Zone.BATTLEFIELD, new BasicManaEffect(new GrandArchitectConditionalMana()), new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, true))); - this.netMana.setColorless(2); + this.netMana.add(new Mana(0,0,0,0,0,2,0)); } GrandArchitectManaAbility ( GrandArchitectManaAbility ability ) { diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/MyrReservoir.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/MyrReservoir.java index eafc06cd75b..07863fd0e74 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/MyrReservoir.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/MyrReservoir.java @@ -88,7 +88,7 @@ class MyrReservoirManaAbility extends BasicManaAbility { MyrReservoirManaAbility() { super(new BasicManaEffect(new MyrConditionalMana())); - this.netMana.setColorless(2); + this.netMana.add(new Mana(0,0,0,0,0,2,0)); } MyrReservoirManaAbility(MyrReservoirManaAbility ability) { diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/PalladiumMyr.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/PalladiumMyr.java index 945e5d1eb85..51117d52488 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/PalladiumMyr.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/PalladiumMyr.java @@ -67,7 +67,7 @@ class PalladiumMyrAbility extends BasicManaAbility { public PalladiumMyrAbility() { super(new BasicManaEffect(Mana.ColorlessMana(2))); - this.netMana.setColorless(2); + this.netMana.add(new Mana(0,0,0,0,0,2,0)); } public PalladiumMyrAbility(final PalladiumMyrAbility ability) { diff --git a/Mage.Sets/src/mage/sets/shadowmoor/PrismaticOmen.java b/Mage.Sets/src/mage/sets/shadowmoor/PrismaticOmen.java index 1a8f9426a28..671c6f3872c 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/PrismaticOmen.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/PrismaticOmen.java @@ -80,7 +80,7 @@ public class PrismaticOmen extends CardImpl { class BecomesBasicLandTypeAllEffect extends ContinuousEffectImpl { - protected ArrayList landTypes = new ArrayList(); + protected ArrayList landTypes = new ArrayList<>(); public BecomesBasicLandTypeAllEffect(String... landNames) { super(Duration.WhileOnBattlefield, Outcome.Detriment); @@ -112,7 +112,9 @@ class BecomesBasicLandTypeAllEffect extends ContinuousEffectImpl { Mana mana = new Mana(); for (Ability ability : land.getAbilities()){ if (ability instanceof BasicManaAbility) { - mana.add(((BasicManaAbility)ability ).getNetMana(game)); + for (Mana netMana: ((BasicManaAbility)ability ).getNetMana(game)) { + mana.add(netMana); + } } } if (mana.getGreen() == 0 && landTypes.contains("Forest")) { diff --git a/Mage.Sets/src/mage/sets/shardsofalara/KeeperOfProgenitus.java b/Mage.Sets/src/mage/sets/shardsofalara/KeeperOfProgenitus.java index 5f846f8060d..887e753394b 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/KeeperOfProgenitus.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/KeeperOfProgenitus.java @@ -135,7 +135,9 @@ class HeartbeatOfSpringEffect extends ManaEffect { Abilities mana = land.getAbilities().getManaAbilities(Zone.BATTLEFIELD); Mana types = new Mana(); for (ManaAbility ability: mana) { - types.add(ability.getNetMana(game)); + for (Mana netMana: ability.getNetMana(game)) { + types.add(netMana); + } } Choice choice = new ChoiceImpl(true); choice.setMessage("Pick a mana color"); diff --git a/Mage.Sets/src/mage/sets/tempest/ReflectingPool.java b/Mage.Sets/src/mage/sets/tempest/ReflectingPool.java index 21aaddd2a15..ceda2c6e70d 100644 --- a/Mage.Sets/src/mage/sets/tempest/ReflectingPool.java +++ b/Mage.Sets/src/mage/sets/tempest/ReflectingPool.java @@ -93,7 +93,9 @@ class ReflectingPoolEffect extends ManaEffect { for (Permanent land : lands) { Abilities mana = land.getAbilities().getManaAbilities(Zone.BATTLEFIELD); for (ManaAbility ability : mana) { - types.add(ability.getNetMana(game)); + for (Mana netMana: ability.getNetMana(game)) { + types.add(netMana); + } } } Choice choice = new ChoiceImpl(false); diff --git a/Mage.Sets/src/mage/sets/theros/NykthosShrineToNyx.java b/Mage.Sets/src/mage/sets/theros/NykthosShrineToNyx.java index 41ebb75db7c..023b1f12718 100644 --- a/Mage.Sets/src/mage/sets/theros/NykthosShrineToNyx.java +++ b/Mage.Sets/src/mage/sets/theros/NykthosShrineToNyx.java @@ -27,7 +27,7 @@ */ package mage.sets.theros; -import java.util.ArrayList; +import java.util.List; import java.util.UUID; import mage.Mana; import mage.abilities.Ability; @@ -91,18 +91,12 @@ class NykthosShrineToNyxManaAbility extends ManaAbility { } @Override - public Mana getNetMana(Game game) { - if (game == null) { - return new Mana(); - } - // TODO: Give back at least the highest amount (https://github.com/magefree/mage/issues/585) - int amount = 0; - for (String colorChoice :ChoiceColor.colorChoices) { - Mana newMana = ((NykthosDynamicManaEffect)this.getEffects().get(0)).computeMana(colorChoice, game, this); - if (newMana.count() > amount) { - netMana = newMana; - amount = newMana.count(); - } + public List getNetMana(Game game) { + netMana.clear(); + if (game != null) { + for (String colorChoice :ChoiceColor.colorChoices) { + netMana.add(((NykthosDynamicManaEffect)this.getEffects().get(0)).computeMana(colorChoice, game, this)); + } } return netMana; } diff --git a/Mage.Sets/src/mage/sets/theros/NyleasPresence.java b/Mage.Sets/src/mage/sets/theros/NyleasPresence.java index 960be35dd68..801c57caac3 100644 --- a/Mage.Sets/src/mage/sets/theros/NyleasPresence.java +++ b/Mage.Sets/src/mage/sets/theros/NyleasPresence.java @@ -95,7 +95,7 @@ public class NyleasPresence extends CardImpl { class NyleasPresenceLandTypeEffect extends ContinuousEffectImpl { - protected ArrayList landTypes = new ArrayList(); + protected ArrayList landTypes = new ArrayList<>(); public NyleasPresenceLandTypeEffect(String... landNames) { super(Duration.WhileOnBattlefield, Outcome.Detriment); @@ -129,7 +129,9 @@ class NyleasPresenceLandTypeEffect extends ContinuousEffectImpl { Mana mana = new Mana(); for (Ability ability : land.getAbilities()){ if (ability instanceof BasicManaAbility) { - mana.add(((BasicManaAbility)ability ).getNetMana(game)); + for (Mana netMana: ((BasicManaAbility)ability ).getNetMana(game)) { + mana.add(netMana); + } } } if (mana.getGreen() == 0 && landTypes.contains("Forest")) { diff --git a/Mage.Sets/src/mage/sets/urzassaga/WornPowerstone.java b/Mage.Sets/src/mage/sets/urzassaga/WornPowerstone.java index bdf1991f452..61f70e0a12f 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/WornPowerstone.java +++ b/Mage.Sets/src/mage/sets/urzassaga/WornPowerstone.java @@ -64,7 +64,7 @@ class WornPowerstoneAbility extends BasicManaAbility { public WornPowerstoneAbility() { super(new BasicManaEffect(Mana.ColorlessMana(2))); - this.netMana.setColorless(2); + this.netMana.add(new Mana(0,0,0,0,0,2,0)); } public WornPowerstoneAbility(final WornPowerstoneAbility ability) { diff --git a/Mage/src/mage/abilities/decorator/ConditionalManaEffect.java b/Mage/src/mage/abilities/decorator/ConditionalManaEffect.java index cd69ecc94af..4ec4d37870e 100644 --- a/Mage/src/mage/abilities/decorator/ConditionalManaEffect.java +++ b/Mage/src/mage/abilities/decorator/ConditionalManaEffect.java @@ -61,9 +61,9 @@ public class ConditionalManaEffect extends ManaEffect { public ConditionalManaEffect(ConditionalManaEffect effect) { super(effect); - this.effect = (BasicManaEffect) effect.effect.copy(); + this.effect = effect.effect.copy(); if (effect.otherwiseEffect != null) { - this.otherwiseEffect = (BasicManaEffect) effect.otherwiseEffect.copy(); + this.otherwiseEffect = effect.otherwiseEffect.copy(); } this.condition = effect.condition; } diff --git a/Mage/src/mage/abilities/effects/common/AddManaOfAnyColorTargetCanProduceEffect.java b/Mage/src/mage/abilities/effects/common/AddManaOfAnyColorTargetCanProduceEffect.java index 6e5574613c9..f7ba23fc15e 100644 --- a/Mage/src/mage/abilities/effects/common/AddManaOfAnyColorTargetCanProduceEffect.java +++ b/Mage/src/mage/abilities/effects/common/AddManaOfAnyColorTargetCanProduceEffect.java @@ -62,7 +62,9 @@ public class AddManaOfAnyColorTargetCanProduceEffect extends ManaEffect { Abilities mana = permanent.getAbilities().getManaAbilities(Zone.BATTLEFIELD); Mana types = new Mana(); for (ManaAbility ability : mana) { - types.add(ability.getNetMana(game)); + for(Mana netMana: ability.getNetMana(game)) { + types.add(netMana); + } } Choice choice = new ChoiceImpl(true); choice.setMessage("Pick a mana color"); diff --git a/Mage/src/mage/abilities/mana/ActivateIfConditionManaAbility.java b/Mage/src/mage/abilities/mana/ActivateIfConditionManaAbility.java index e7946940209..e6a5ac7c8e6 100644 --- a/Mage/src/mage/abilities/mana/ActivateIfConditionManaAbility.java +++ b/Mage/src/mage/abilities/mana/ActivateIfConditionManaAbility.java @@ -29,6 +29,7 @@ package mage.abilities.mana; import java.util.UUID; +import mage.Mana; import mage.constants.Zone; import mage.abilities.condition.Condition; import mage.abilities.costs.Cost; @@ -47,7 +48,7 @@ public class ActivateIfConditionManaAbility extends ManaAbility { public ActivateIfConditionManaAbility(Zone zone, BasicManaEffect effect, Cost cost, Condition condition) { super(zone, effect, cost); - this.netMana = effect.getMana(); + this.netMana.add(effect.getMana()); this.condition = condition; } diff --git a/Mage/src/mage/abilities/mana/ActivateOncePerTurnManaAbility.java b/Mage/src/mage/abilities/mana/ActivateOncePerTurnManaAbility.java index fc90fa52749..3b5bf16c74b 100644 --- a/Mage/src/mage/abilities/mana/ActivateOncePerTurnManaAbility.java +++ b/Mage/src/mage/abilities/mana/ActivateOncePerTurnManaAbility.java @@ -29,6 +29,7 @@ package mage.abilities.mana; import java.util.UUID; +import mage.Mana; import mage.abilities.costs.Cost; import mage.abilities.effects.common.AddManaOfAnyColorEffect; import mage.abilities.effects.common.BasicManaEffect; @@ -55,12 +56,12 @@ public class ActivateOncePerTurnManaAbility extends ManaAbility { public ActivateOncePerTurnManaAbility(Zone zone, BasicManaEffect effect, Cost cost) { super(zone, effect, cost); - this.netMana = effect.getMana(); + this.netMana.add(effect.getMana()); } public ActivateOncePerTurnManaAbility(Zone zone, AddManaOfAnyColorEffect effect, Cost cost) { super(zone, effect, cost); - this.netMana.setAny(effect.getAmount()); + this.netMana.add(new Mana(0,0,0,0,0,0,effect.getAmount())); } public ActivateOncePerTurnManaAbility(ActivateOncePerTurnManaAbility ability) { diff --git a/Mage/src/mage/abilities/mana/AnyColorManaAbility.java b/Mage/src/mage/abilities/mana/AnyColorManaAbility.java index 0873324f1cf..6a0e98e090f 100644 --- a/Mage/src/mage/abilities/mana/AnyColorManaAbility.java +++ b/Mage/src/mage/abilities/mana/AnyColorManaAbility.java @@ -27,6 +27,7 @@ */ package mage.abilities.mana; +import mage.Mana; import mage.abilities.costs.Cost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.AddManaOfAnyColorEffect; @@ -39,7 +40,7 @@ public class AnyColorManaAbility extends ManaAbility { public AnyColorManaAbility(Cost cost) { super(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(), cost); - this.netMana.setAny(1); + this.netMana.add(new Mana(0,0,0,0,0,0,1)); } public AnyColorManaAbility(final AnyColorManaAbility ability) { diff --git a/Mage/src/mage/abilities/mana/BlackManaAbility.java b/Mage/src/mage/abilities/mana/BlackManaAbility.java index 86abb58e519..96e1c591506 100644 --- a/Mage/src/mage/abilities/mana/BlackManaAbility.java +++ b/Mage/src/mage/abilities/mana/BlackManaAbility.java @@ -30,6 +30,7 @@ package mage.abilities.mana; import mage.Mana; import mage.abilities.effects.common.BasicManaEffect; +import mage.constants.ColoredManaSymbol; /** * @@ -39,7 +40,7 @@ public class BlackManaAbility extends BasicManaAbility { public BlackManaAbility() { super(new BasicManaEffect(Mana.BlackMana)); - this.netMana.setBlack(1); + this.netMana.add(new Mana(ColoredManaSymbol.B)); } public BlackManaAbility(BlackManaAbility ability) { diff --git a/Mage/src/mage/abilities/mana/BlueManaAbility.java b/Mage/src/mage/abilities/mana/BlueManaAbility.java index 9f8b414c4f1..5c26f819063 100644 --- a/Mage/src/mage/abilities/mana/BlueManaAbility.java +++ b/Mage/src/mage/abilities/mana/BlueManaAbility.java @@ -30,6 +30,7 @@ package mage.abilities.mana; import mage.Mana; import mage.abilities.effects.common.BasicManaEffect; +import mage.constants.ColoredManaSymbol; /** * @@ -39,7 +40,7 @@ public class BlueManaAbility extends BasicManaAbility { public BlueManaAbility() { super(new BasicManaEffect(Mana.BlueMana)); - this.netMana.setBlue(1); + this.netMana.add(new Mana(ColoredManaSymbol.U)); } public BlueManaAbility(BlueManaAbility ability) { diff --git a/Mage/src/mage/abilities/mana/ColorlessManaAbility.java b/Mage/src/mage/abilities/mana/ColorlessManaAbility.java index 709a3fc6449..3f1e5636ca3 100644 --- a/Mage/src/mage/abilities/mana/ColorlessManaAbility.java +++ b/Mage/src/mage/abilities/mana/ColorlessManaAbility.java @@ -39,7 +39,7 @@ public class ColorlessManaAbility extends BasicManaAbility { public ColorlessManaAbility() { super(new BasicManaEffect(Mana.ColorlessMana)); - this.netMana.setColorless(1); + this.netMana.add(new Mana(0,0,0,0,0,1,0)); } public ColorlessManaAbility(ColorlessManaAbility ability) { diff --git a/Mage/src/mage/abilities/mana/ConditionalAnyColorManaAbility.java b/Mage/src/mage/abilities/mana/ConditionalAnyColorManaAbility.java index d2d47fcd977..a5892859e28 100644 --- a/Mage/src/mage/abilities/mana/ConditionalAnyColorManaAbility.java +++ b/Mage/src/mage/abilities/mana/ConditionalAnyColorManaAbility.java @@ -27,6 +27,7 @@ */ package mage.abilities.mana; +import mage.Mana; import mage.abilities.costs.Cost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.AddConditionalManaOfAnyColorEffect; @@ -62,7 +63,7 @@ public class ConditionalAnyColorManaAbility extends ManaAbility { for (int i = 0; i < choices; i++) { this.addChoice(new ChoiceColor()); } - this.netMana.setAny(amount); + this.netMana.add(new Mana(0,0,0,0,0,0,amount)); } public ConditionalAnyColorManaAbility(final ConditionalAnyColorManaAbility ability) { diff --git a/Mage/src/mage/abilities/mana/ConditionalColorlessManaAbility.java b/Mage/src/mage/abilities/mana/ConditionalColorlessManaAbility.java index 7c5587ce11b..37d1096b5b7 100644 --- a/Mage/src/mage/abilities/mana/ConditionalColorlessManaAbility.java +++ b/Mage/src/mage/abilities/mana/ConditionalColorlessManaAbility.java @@ -6,6 +6,7 @@ package mage.abilities.mana; +import mage.Mana; import mage.abilities.costs.Cost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.AddConditionalColorlessManaEffect; @@ -24,8 +25,8 @@ public class ConditionalColorlessManaAbility extends ManaAbility { } public ConditionalColorlessManaAbility(Cost cost, int amount, ConditionalManaBuilder manaBuilder) { - super(Zone.BATTLEFIELD, new AddConditionalColorlessManaEffect(amount, manaBuilder), cost); - this.netMana.setColorless(amount); + super(Zone.BATTLEFIELD, new AddConditionalColorlessManaEffect(amount, manaBuilder), cost); + this.netMana.add(new Mana(0,0,0,0,0,amount,0)); } public ConditionalColorlessManaAbility(final ConditionalColorlessManaAbility ability) { diff --git a/Mage/src/mage/abilities/mana/ConditionalManaAbility.java b/Mage/src/mage/abilities/mana/ConditionalManaAbility.java index ec320fd3742..f17763d17cf 100644 --- a/Mage/src/mage/abilities/mana/ConditionalManaAbility.java +++ b/Mage/src/mage/abilities/mana/ConditionalManaAbility.java @@ -28,6 +28,8 @@ package mage.abilities.mana; +import java.util.ArrayList; +import java.util.List; import mage.Mana; import mage.abilities.costs.Cost; import mage.abilities.decorator.ConditionalManaEffect; @@ -59,7 +61,9 @@ public class ConditionalManaAbility extends ManaAbility { } @Override - public Mana getNetMana(Game game) { - return conditionalManaEffect.getMana(game, this); + public List getNetMana(Game game) { + List newNetMana = new ArrayList<>(); + newNetMana.add(conditionalManaEffect.getMana(game, this)); + return newNetMana; } } diff --git a/Mage/src/mage/abilities/mana/DynamicManaAbility.java b/Mage/src/mage/abilities/mana/DynamicManaAbility.java index 02a408c8263..33891af58dc 100644 --- a/Mage/src/mage/abilities/mana/DynamicManaAbility.java +++ b/Mage/src/mage/abilities/mana/DynamicManaAbility.java @@ -27,6 +27,8 @@ */ package mage.abilities.mana; +import java.util.ArrayList; +import java.util.List; import mage.Mana; import mage.abilities.costs.Cost; import mage.abilities.costs.common.TapSourceCost; @@ -84,10 +86,11 @@ public class DynamicManaAbility extends ManaAbility { } @Override - public Mana getNetMana(Game game) { - if (game == null) { - return new Mana(); - } - return new Mana(manaEffect.computeMana(true, game, this)); + public List getNetMana(Game game) { + List newNetMana = new ArrayList<>(); + if (game != null) { + newNetMana.add(manaEffect.computeMana(true, game, this)); + } + return newNetMana; } } diff --git a/Mage/src/mage/abilities/mana/GreenManaAbility.java b/Mage/src/mage/abilities/mana/GreenManaAbility.java index 4c8763371e1..683c6df3335 100644 --- a/Mage/src/mage/abilities/mana/GreenManaAbility.java +++ b/Mage/src/mage/abilities/mana/GreenManaAbility.java @@ -30,6 +30,7 @@ package mage.abilities.mana; import mage.Mana; import mage.abilities.effects.common.BasicManaEffect; +import mage.constants.ColoredManaSymbol; /** * @@ -39,7 +40,7 @@ public class GreenManaAbility extends BasicManaAbility { public GreenManaAbility() { super(new BasicManaEffect(Mana.GreenMana)); - this.netMana.setGreen(1); + this.netMana.add(new Mana(ColoredManaSymbol.G)); } public GreenManaAbility(GreenManaAbility ability) { diff --git a/Mage/src/mage/abilities/mana/ManaAbility.java b/Mage/src/mage/abilities/mana/ManaAbility.java index f258aa54df5..a1a2bcc327d 100644 --- a/Mage/src/mage/abilities/mana/ManaAbility.java +++ b/Mage/src/mage/abilities/mana/ManaAbility.java @@ -28,6 +28,8 @@ package mage.abilities.mana; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; import mage.Mana; import mage.abilities.ActivatedAbilityImpl; @@ -43,7 +45,7 @@ import mage.game.Game; */ public abstract class ManaAbility extends ActivatedAbilityImpl { - protected Mana netMana = new Mana(); + protected List netMana = new ArrayList<>(); public ManaAbility(Zone zone, ManaEffect effect, Cost cost) { super(AbilityType.MANA, zone); @@ -58,7 +60,7 @@ public abstract class ManaAbility extends ActivatedAbilityImpl { public ManaAbility(ManaAbility ability) { super(ability); - this.netMana = ability.netMana.copy(); + this.netMana.addAll(ability.netMana); } @Override @@ -70,7 +72,14 @@ public abstract class ManaAbility extends ActivatedAbilityImpl { return costs.canPay(this, sourceId, controllerId, game); } - public Mana getNetMana(Game game) { + /** + * Used to check the possible mana production to determine + * which spells and/or abilities can be used. (player.getPlayable()). + * + * @param game + * @return + */ + public List getNetMana(Game game) { return netMana; - } + } } diff --git a/Mage/src/mage/abilities/mana/ManaOptions.java b/Mage/src/mage/abilities/mana/ManaOptions.java index 2b2da9b2a8e..d91dc28453d 100644 --- a/Mage/src/mage/abilities/mana/ManaOptions.java +++ b/Mage/src/mage/abilities/mana/ManaOptions.java @@ -59,18 +59,35 @@ public class ManaOptions extends ArrayList { if (!abilities.isEmpty()) { if (abilities.size() == 1) { //if there is only one mana option available add it to all the existing options - addMana(abilities.get(0).getNetMana(game)); + List netManas = abilities.get(0).getNetMana(game); + if (netManas.size() == 1) { + addMana(netManas.get(0)); + } else { + List copy = copy(); + this.clear(); + for (Mana netMana: netManas) { + for (Mana mana: copy) { + Mana newMana = new Mana(); + newMana.add(mana); + newMana.add(netMana); + this.add(newMana); + } + } + } + } else if (abilities.size() > 1) { //perform a union of all existing options and the new options List copy = copy(); this.clear(); for (ManaAbility ability: abilities) { - for (Mana mana: copy) { - Mana newMana = new Mana(); - newMana.add(mana); - newMana.add(ability.getNetMana(game)); - this.add(newMana); + for (Mana netMana: ability.getNetMana(game)) { + for (Mana mana: copy) { + Mana newMana = new Mana(); + newMana.add(mana); + newMana.add(netMana); + this.add(newMana); + } } } } @@ -85,11 +102,38 @@ public class ManaOptions extends ArrayList { if (abilities.size() == 1) { //if there is only one mana option available add it to all the existing options ManaAbility ability = abilities.get(0); + List netManas = abilities.get(0).getNetMana(game); if (ability.getManaCosts().isEmpty()) { - addMana(ability.getNetMana(game)); + if (netManas.size() == 1) { + addMana(netManas.get(0)); + } else { + List copy = copy(); + this.clear(); + for (Mana netMana: netManas) { + for (Mana mana: copy) { + Mana newMana = new Mana(); + newMana.add(mana); + newMana.add(netMana); + this.add(newMana); + } + } + } } - else { - addMana(ability.getManaCosts().getMana(), ability.getNetMana(game)); + else { + if (netManas.size() == 1) { + addMana(ability.getManaCosts().getMana(), netManas.get(0)); + } else { + List copy = copy(); + this.clear(); + for (Mana netMana: netManas) { + for (Mana mana: copy) { + Mana newMana = new Mana(); + newMana.add(mana); + newMana.add(netMana); + addMana(ability.getManaCosts().getMana(), netMana); + } + } + } } } else if (abilities.size() > 1) { @@ -97,23 +141,28 @@ public class ManaOptions extends ArrayList { List copy = copy(); this.clear(); for (ManaAbility ability: abilities) { + List netManas = ability.getNetMana(game); if (ability.getManaCosts().isEmpty()) { - for (Mana mana: copy) { - Mana newMana = new Mana(); - newMana.add(mana); - newMana.add(ability.getNetMana(game)); - this.add(newMana); + for (Mana netMana: netManas) { + for (Mana mana: copy) { + Mana newMana = new Mana(); + newMana.add(mana); + newMana.add(netMana); + this.add(newMana); + } } } else { - for (Mana mana: copy) { - Mana newMana = new Mana(); - newMana.add(mana); - if (mana.contains(ability.getManaCosts().getMana())) { - newMana.subtract(ability.getManaCosts().getMana()); - newMana.add(ability.getNetMana(game)); + for (Mana netMana: netManas) { + for (Mana mana: copy) { + Mana newMana = new Mana(); + newMana.add(mana); + if (mana.contains(ability.getManaCosts().getMana())) { + newMana.subtract(ability.getManaCosts().getMana()); + newMana.add(netMana); + } + this.add(newMana); } - this.add(newMana); } } } diff --git a/Mage/src/mage/abilities/mana/RedManaAbility.java b/Mage/src/mage/abilities/mana/RedManaAbility.java index 0f88622501a..417002fcc2b 100644 --- a/Mage/src/mage/abilities/mana/RedManaAbility.java +++ b/Mage/src/mage/abilities/mana/RedManaAbility.java @@ -30,6 +30,7 @@ package mage.abilities.mana; import mage.Mana; import mage.abilities.effects.common.BasicManaEffect; +import mage.constants.ColoredManaSymbol; /** * @@ -39,7 +40,7 @@ public class RedManaAbility extends BasicManaAbility { public RedManaAbility() { super(new BasicManaEffect(Mana.RedMana)); - this.netMana.setRed(1); + this.netMana.add(new Mana(ColoredManaSymbol.R)); } public RedManaAbility(RedManaAbility ability) { diff --git a/Mage/src/mage/abilities/mana/SimpleManaAbility.java b/Mage/src/mage/abilities/mana/SimpleManaAbility.java index dc36f2ae4bf..bd974e740ed 100644 --- a/Mage/src/mage/abilities/mana/SimpleManaAbility.java +++ b/Mage/src/mage/abilities/mana/SimpleManaAbility.java @@ -46,7 +46,7 @@ public class SimpleManaAbility extends ManaAbility { public SimpleManaAbility(Zone zone, Mana mana, Cost cost) { super(zone, new BasicManaEffect(mana), cost); - this.netMana = mana.copy(); + this.netMana.add(mana.copy()); } public SimpleManaAbility(final SimpleManaAbility ability) { diff --git a/Mage/src/mage/abilities/mana/WhiteManaAbility.java b/Mage/src/mage/abilities/mana/WhiteManaAbility.java index f06737e85c0..cba870ec0b5 100644 --- a/Mage/src/mage/abilities/mana/WhiteManaAbility.java +++ b/Mage/src/mage/abilities/mana/WhiteManaAbility.java @@ -30,6 +30,7 @@ package mage.abilities.mana; import mage.Mana; import mage.abilities.effects.common.BasicManaEffect; +import mage.constants.ColoredManaSymbol; /** * @@ -39,7 +40,7 @@ public class WhiteManaAbility extends BasicManaAbility { public WhiteManaAbility() { super(new BasicManaEffect(Mana.WhiteMana)); - this.netMana.setWhite(1); + this.netMana.add(new Mana(ColoredManaSymbol.W)); } public WhiteManaAbility(WhiteManaAbility ability) { diff --git a/Mage/src/mage/cards/CardImpl.java b/Mage/src/mage/cards/CardImpl.java index 510bb90ff90..1d01a7fbb5f 100644 --- a/Mage/src/mage/cards/CardImpl.java +++ b/Mage/src/mage/cards/CardImpl.java @@ -290,7 +290,9 @@ public abstract class CardImpl extends MageObjectImpl implements Card { public List getMana() { List mana = new ArrayList<>(); for (ManaAbility ability : this.abilities.getManaAbilities(Zone.BATTLEFIELD)) { - mana.add(ability.getNetMana(null)); + for (Mana netMana: ability.getNetMana(null)) { + mana.add(netMana); + } } return mana; }