diff --git a/res/cardsfolder/winters_night.txt b/res/cardsfolder/winters_night.txt index ce43c80e4cb..7357eca8541 100644 --- a/res/cardsfolder/winters_night.txt +++ b/res/cardsfolder/winters_night.txt @@ -3,7 +3,7 @@ ManaCost:R G W Types:World Enchantment Text:no text T:Mode$ TapsForMana | ValidCard$ Land.Snow | Execute$ TrigMana | TriggerZones$ Battlefield | TriggerDescription$ Whenever a player taps a snow land for mana, that player adds one mana to his or her mana pool of any type that land produced. That land doesn't untap during its controller's next untap step. -SVar:TrigMana:AB$ManaReflected | Cost$ 0 | ColorOrType$ Type | Valid$ Card.IsTriggeredCard | ReflectProperty$ Produce | SubAbility$ SVar=DBPump +SVar:TrigMana:AB$ManaReflected | Cost$ 0 | ColorOrType$ Type | Valid$ Card.IsTriggeredCard | ReflectProperty$ Produce | Defined$ TriggeredPlayer | SubAbility$ SVar=DBPump SVar:DBPump:DB$Pump | Defined$ TriggeredCard | Permanent$ True | KW$ HIDDEN This card doesn't untap during your next untap step. SVar:RemAIDeck:True SVar:RemRandomDeck:True diff --git a/src/forge/card/abilityFactory/AbilityFactory_Mana.java b/src/forge/card/abilityFactory/AbilityFactory_Mana.java index 9a15b592295..99c3a07e87d 100644 --- a/src/forge/card/abilityFactory/AbilityFactory_Mana.java +++ b/src/forge/card/abilityFactory/AbilityFactory_Mana.java @@ -304,20 +304,31 @@ public class AbilityFactory_Mana { public static void manaReflectedResolve(Ability_Mana abMana, AbilityFactory af){ // Spells are not undoable + HashMap params = af.getMapParams(); abMana.setUndoable(af.isAbility() && abMana.isUndoable()); Card card = af.getHostCard(); ArrayList colors = reflectableMana(abMana, af, new ArrayList(), new ArrayList()); - String generated = generatedReflectedMana(abMana, af, colors); + ArrayList tgtPlayers; - if (abMana.getCanceled()){ - abMana.undo(); - return; - } + Target tgt = af.getAbTgt(); + if (tgt != null) + tgtPlayers = tgt.getTargetPlayers(); + else + tgtPlayers = AbilityFactory.getDefinedPlayers(abMana.getSourceCard(), params.get("Defined"), abMana); + + for(Player player : tgtPlayers) { + String generated = generatedReflectedMana(abMana, af, colors, player); + + if (abMana.getCanceled()){ + abMana.undo(); + return; + } - abMana.produceMana(generated, card.getController()); + abMana.produceMana(generated, player); + } doDrawback(af, abMana, card); } @@ -426,7 +437,7 @@ public class AbilityFactory_Mana { return colors; } - private static String generatedReflectedMana(Ability_Mana abMana, AbilityFactory af, ArrayList colors){ + private static String generatedReflectedMana(Ability_Mana abMana, AbilityFactory af, ArrayList colors, Player player){ // Calculate generated mana here for stack description and resolving HashMap params = af.getMapParams(); int amount = params.containsKey("Amount") ? AbilityFactory.calculateAmount(af.getHostCard(), params.get("Amount"), abMana) : 1; @@ -438,7 +449,7 @@ public class AbilityFactory_Mana { else if (colors.size() == 1) baseMana = Input_PayManaCostUtil.getShortColorString(colors.get(0)); else{ - if (abMana.getActivatingPlayer().isHuman()){ + if (player.isHuman()){ Object o = GuiUtils.getChoiceOptional("Select Mana to Produce", colors.toArray()); if (o == null) { // User hit cancel @@ -451,6 +462,7 @@ public class AbilityFactory_Mana { } else{ // AI doesn't really have anything here yet + baseMana = Input_PayManaCostUtil.getShortColorString(colors.get(0)); } }