From 0125f88611aec6682e55b931f114b51ff3ad8474 Mon Sep 17 00:00:00 2001
From: Neil Gentleman <ngentleman@gmail.com>
Date: Sun, 17 Jul 2016 23:27:09 -0700
Subject: [PATCH] add mana-generation helpers to ChoiceColor

---
 .../src/mage/cards/c/CoalitionRelic.java      | 12 +------
 .../src/mage/cards/d/DawnsReflection.java     | 12 +------
 Mage.Sets/src/mage/cards/f/FoodChain.java     | 18 ++---------
 .../src/mage/cards/m/MarketFestival.java      | 19 +++---------
 Mage.Sets/src/mage/cards/p/PlasmCapture.java  | 12 +------
 .../src/mage/cards/v/VedalkenEngineer.java    | 13 +-------
 .../decorator/ConditionalManaEffect.java      | 15 ++-------
 .../AddConditionalManaOfAnyColorEffect.java   | 15 ++-------
 ...dManaAnyColorAttachedControllerEffect.java | 16 ++--------
 .../common/AddManaOfAnyColorEffect.java       | 17 ++--------
 .../effects/common/DynamicManaEffect.java     | 19 ++----------
 .../main/java/mage/choices/ChoiceColor.java   | 31 +++++++++++++++++++
 12 files changed, 55 insertions(+), 144 deletions(-)

diff --git a/Mage.Sets/src/mage/cards/c/CoalitionRelic.java b/Mage.Sets/src/mage/cards/c/CoalitionRelic.java
index 5c8943206b..b9ae158113 100644
--- a/Mage.Sets/src/mage/cards/c/CoalitionRelic.java
+++ b/Mage.Sets/src/mage/cards/c/CoalitionRelic.java
@@ -107,17 +107,7 @@ class CoalitionRelicEffect extends OneShotEffect {
                     }
                     player.choose(outcome, choice, game);
                 }
-                if (choice.getColor().isBlack()) {
-                    mana.increaseBlack();
-                } else if (choice.getColor().isBlue()) {
-                    mana.increaseBlue();
-                } else if (choice.getColor().isRed()) {
-                    mana.increaseRed();
-                } else if (choice.getColor().isGreen()) {
-                    mana.increaseGreen();
-                } else if (choice.getColor().isWhite()) {
-                    mana.increaseWhite();
-                }
+                choice.increaseMana(mana);
                 choice.clearChoice();
             }
             player.getManaPool().addMana(mana, game, source);
diff --git a/Mage.Sets/src/mage/cards/d/DawnsReflection.java b/Mage.Sets/src/mage/cards/d/DawnsReflection.java
index be7ff51afd..17f7aef0b7 100644
--- a/Mage.Sets/src/mage/cards/d/DawnsReflection.java
+++ b/Mage.Sets/src/mage/cards/d/DawnsReflection.java
@@ -140,17 +140,7 @@ class DawnsReflectionManaEffect extends ManaEffect {
                 while (controller.canRespond() && !controller.choose(Outcome.Benefit, choiceColor, game)) {
                 }
 
-                if (choiceColor.getColor().isBlack()) {
-                    mana.increaseBlack();
-                } else if (choiceColor.getColor().isBlue()) {
-                    mana.increaseBlue();
-                } else if (choiceColor.getColor().isRed()) {
-                    mana.increaseRed();
-                } else if (choiceColor.getColor().isGreen()) {
-                    mana.increaseGreen();
-                } else if (choiceColor.getColor().isWhite()) {
-                    mana.increaseWhite();
-                }
+                choiceColor.increaseMana(mana);
             }
 
             controller.getManaPool().addMana(mana, game, source);
diff --git a/Mage.Sets/src/mage/cards/f/FoodChain.java b/Mage.Sets/src/mage/cards/f/FoodChain.java
index 9b51e2515e..3a001b430d 100644
--- a/Mage.Sets/src/mage/cards/f/FoodChain.java
+++ b/Mage.Sets/src/mage/cards/f/FoodChain.java
@@ -30,7 +30,6 @@ package mage.cards.f;
 import java.util.UUID;
 import mage.ConditionalMana;
 import mage.Mana;
-import mage.ObjectColor;
 import mage.abilities.Ability;
 import mage.abilities.costs.Cost;
 import mage.abilities.costs.common.ExileTargetCost;
@@ -116,22 +115,11 @@ class FoodChainManaEffect extends ManaEffect {
             }
             ChoiceColor choice = new ChoiceColor();
             controller.choose(Outcome.PutManaInPool, choice, game);
-            ObjectColor chosenColor = choice.getColor();
-            if (chosenColor == null) {
+            if (choice.getColor() == null) {
                 return false;
             }
-            Mana mana = null;
-            if (chosenColor.isBlack()) {
-                mana = new FoodChainManaBuilder().setMana(Mana.BlackMana(manaCostExiled + 1), source, game).build();
-            } else if (chosenColor.isBlue()) {
-                mana = new FoodChainManaBuilder().setMana(Mana.BlueMana(manaCostExiled + 1), source, game).build();
-            } else if (chosenColor.isRed()) {
-                mana = new FoodChainManaBuilder().setMana(Mana.RedMana(manaCostExiled + 1), source, game).build();
-            } else if (chosenColor.isGreen()) {
-                mana = new FoodChainManaBuilder().setMana(Mana.GreenMana(manaCostExiled + 1), source, game).build();
-            } else if (chosenColor.isWhite()) {
-                mana = new FoodChainManaBuilder().setMana(Mana.WhiteMana(manaCostExiled + 1), source, game).build();
-            }
+            Mana chosen = choice.getMana(manaCostExiled + 1);
+            Mana mana = new FoodChainManaBuilder().setMana(chosen, source, game).build();
             if (mana != null) {
                 checkToFirePossibleEvents(mana, game, source);
                 controller.getManaPool().addMana(mana, game, source);
diff --git a/Mage.Sets/src/mage/cards/m/MarketFestival.java b/Mage.Sets/src/mage/cards/m/MarketFestival.java
index 2631f07870..8d4a7261ca 100644
--- a/Mage.Sets/src/mage/cards/m/MarketFestival.java
+++ b/Mage.Sets/src/mage/cards/m/MarketFestival.java
@@ -135,11 +135,11 @@ class MarketFestivalManaEffect extends ManaEffect {
     public boolean apply(Game game, Ability source) {
         Player controller = game.getPlayer(source.getControllerId());
         MageObject sourceObject = game.getObject(source.getSourceId());
-        if(controller != null && sourceObject != null){
-                int x = 2;
+        if (controller != null && sourceObject != null) {
+            int x = 2;
 
             Mana mana = new Mana();
-            for(int i = 0; i < x; i++){
+            for (int i = 0; i < x; i++) {
                 ChoiceColor choiceColor = new ChoiceColor();
                 if (i == 0) {
                     choiceColor.setMessage("First mana color for " + sourceObject.getLogName());
@@ -152,22 +152,11 @@ class MarketFestivalManaEffect extends ManaEffect {
                     }
                 }
 
-                if (choiceColor.getColor().isBlack()) {
-                    mana.increaseBlack();
-                } else if (choiceColor.getColor().isBlue()) {
-                    mana.increaseBlue();
-                } else if (choiceColor.getColor().isRed()) {
-                    mana.increaseRed();
-                } else if (choiceColor.getColor().isGreen()) {
-                    mana.increaseGreen();
-                } else if (choiceColor.getColor().isWhite()) {
-                    mana.increaseWhite();
-                }
+                choiceColor.increaseMana(mana);
             }
             checkToFirePossibleEvents(mana, game, source);
             controller.getManaPool().addMana(mana, game, source);
             return true;
-
         }
         return false;
     }
diff --git a/Mage.Sets/src/mage/cards/p/PlasmCapture.java b/Mage.Sets/src/mage/cards/p/PlasmCapture.java
index 4431c64c7c..99fa7e161b 100644
--- a/Mage.Sets/src/mage/cards/p/PlasmCapture.java
+++ b/Mage.Sets/src/mage/cards/p/PlasmCapture.java
@@ -134,17 +134,7 @@ class PlasmCaptureManaEffect extends ManaEffect {
                     }
                 }
 
-                if (choiceColor.getColor().isBlack()) {
-                    mana.increaseBlack();
-                } else if (choiceColor.getColor().isBlue()) {
-                    mana.increaseBlue();
-                } else if (choiceColor.getColor().isRed()) {
-                    mana.increaseRed();
-                } else if (choiceColor.getColor().isGreen()) {
-                    mana.increaseGreen();
-                } else if (choiceColor.getColor().isWhite()) {
-                    mana.increaseWhite();
-                }
+                choiceColor.increaseMana(mana);
             }
 
             player.getManaPool().addMana(mana, game, source);
diff --git a/Mage.Sets/src/mage/cards/v/VedalkenEngineer.java b/Mage.Sets/src/mage/cards/v/VedalkenEngineer.java
index 5f25dc340b..fa8b83edfa 100644
--- a/Mage.Sets/src/mage/cards/v/VedalkenEngineer.java
+++ b/Mage.Sets/src/mage/cards/v/VedalkenEngineer.java
@@ -156,24 +156,13 @@ class VedalkenEngineerEffect extends ManaEffect {
             return false;
         }
 
-        Mana mana = new Mana();
         ChoiceColor choiceColor = new ChoiceColor(true);
         while (!controller.choose(Outcome.Benefit, choiceColor, game)) {
             if (!controller.canRespond()) {
                 return false;
             }
         }
-        if (choiceColor.getColor().isBlack()) {
-            mana.setBlack(amount);
-        } else if (choiceColor.getColor().isBlue()) {
-            mana.setBlue(amount);
-        } else if (choiceColor.getColor().isRed()) {
-            mana.setRed(amount);
-        } else if (choiceColor.getColor().isGreen()) {
-            mana.setGreen(amount);
-        } else if (choiceColor.getColor().isWhite()) {
-            mana.setWhite(amount);
-        }
+        Mana mana = choiceColor.getMana(amount);
         Mana condMana = manaBuilder.setMana(mana, source, game).build();
         checkToFirePossibleEvents(condMana, game, source);
         controller.getManaPool().addMana(condMana, game, source);
diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalManaEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalManaEffect.java
index acac47195f..3f3ad49580 100644
--- a/Mage/src/main/java/mage/abilities/decorator/ConditionalManaEffect.java
+++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalManaEffect.java
@@ -90,17 +90,7 @@ public class ConditionalManaEffect extends ManaEffect {
                     return false; // it happens, don't know how
                 }
 
-                if (choice.getColor().isBlack()) {
-                    createdMana = Mana.BlackMana(amount);
-                } else if (choice.getColor().isBlue()) {
-                    createdMana = Mana.BlueMana(amount);
-                } else if (choice.getColor().isRed()) {
-                    createdMana = Mana.RedMana(amount);
-                } else if (choice.getColor().isGreen()) {
-                    createdMana = Mana.GreenMana(amount);
-                } else if (choice.getColor().isWhite()) {
-                    createdMana = Mana.WhiteMana(amount);
-                }
+                createdMana = choice.getMana(amount);
             }
             mana = createdMana;
         }
@@ -117,8 +107,7 @@ public class ConditionalManaEffect extends ManaEffect {
     }
 
     @Override
-    public Mana getMana(Game game, Ability source
-    ) {
+    public Mana getMana(Game game, Ability source) {
         Mana mana = null;
         if (condition.apply(game, source)) {
             mana = effect.getMana();
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 8259edb065..2da6d5747f 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/AddConditionalManaOfAnyColorEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/AddConditionalManaOfAnyColorEffect.java
@@ -94,19 +94,10 @@ public class AddConditionalManaOfAnyColorEffect extends ManaEffect {
                     return false;
                 }
             }
-            Mana mana = null;
-            if (choice.getColor().isBlack()) {
-                mana = manaBuilder.setMana(Mana.BlackMana(1), source, game).build();
-            } else if (choice.getColor().isBlue()) {
-                mana = manaBuilder.setMana(Mana.BlueMana(1), source, game).build();
-            } else if (choice.getColor().isRed()) {
-                mana = manaBuilder.setMana(Mana.RedMana(1), source, game).build();
-            } else if (choice.getColor().isGreen()) {
-                mana = manaBuilder.setMana(Mana.GreenMana(1), source, game).build();
-            } else if (choice.getColor().isWhite()) {
-                mana = manaBuilder.setMana(Mana.WhiteMana(1), source, game).build();
+            Mana mana = choice.getMana(1);
+            if (mana != null) {
+                mana = manaBuilder.setMana(mana, source, game).build();
             }
-
             if (mana != null) {
                 checkToFirePossibleEvents(mana, game, source);
                 controller.getManaPool().addMana(mana, game, source);
diff --git a/Mage/src/main/java/mage/abilities/effects/common/AddManaAnyColorAttachedControllerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/AddManaAnyColorAttachedControllerEffect.java
index a1d718350c..fa2847daee 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/AddManaAnyColorAttachedControllerEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/AddManaAnyColorAttachedControllerEffect.java
@@ -64,22 +64,10 @@ public class AddManaAnyColorAttachedControllerEffect extends ManaEffect {
                             return false;
                         }
                     }
-                    int amount = 1;
-                    Mana mana = null;
-                    if (choice.getColor().isBlack()) {
-                        mana = Mana.BlackMana(amount);
-                    } else if (choice.getColor().isBlue()) {
-                        mana = Mana.BlueMana(amount);
-                    } else if (choice.getColor().isRed()) {
-                        mana = Mana.RedMana(amount);
-                    } else if (choice.getColor().isGreen()) {
-                        mana = Mana.GreenMana(amount);
-                    } else if (choice.getColor().isWhite()) {
-                        mana = Mana.WhiteMana(amount);
-                    }
+                    Mana mana = choice.getMana(1);
                     if (mana != null) {
                         checkToFirePossibleEvents(mana, game, source);
-                        player.getManaPool().addMana(mana, game, source);                        
+                        player.getManaPool().addMana(mana, game, source);
                         return true;
                     }
                 }
diff --git a/Mage/src/main/java/mage/abilities/effects/common/AddManaOfAnyColorEffect.java b/Mage/src/main/java/mage/abilities/effects/common/AddManaOfAnyColorEffect.java
index a2c556ce82..4cf9e476c0 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/AddManaOfAnyColorEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/AddManaOfAnyColorEffect.java
@@ -46,7 +46,7 @@ public class AddManaOfAnyColorEffect extends BasicManaEffect {
     }
 
     public AddManaOfAnyColorEffect(final int amount) {
-        super(new Mana(0,0,0,0,0,0, amount, 0));
+        super(new Mana(0, 0, 0, 0, 0, 0, amount, 0));
         this.amount = amount;
         this.staticText = new StringBuilder("add ")
                 .append(CardUtil.numberToText(amount))
@@ -75,18 +75,7 @@ public class AddManaOfAnyColorEffect extends BasicManaEffect {
                 if (choice.getColor() == null) {
                     return false; // it happens, don't know how
                 }
-                Mana createdMana = null;
-                if (choice.getColor().isBlack()) {
-                    createdMana = Mana.BlackMana(amount);
-                } else if (choice.getColor().isBlue()) {
-                    createdMana = Mana.BlueMana(amount);
-                } else if (choice.getColor().isRed()) {
-                    createdMana = Mana.RedMana(amount);
-                } else if (choice.getColor().isGreen()) {
-                    createdMana = Mana.GreenMana(amount);
-                } else if (choice.getColor().isWhite()) {
-                    createdMana = Mana.WhiteMana(amount);
-                }
+                Mana createdMana = choice.getMana(amount);
                 if (createdMana != null) {
                     checkToFirePossibleEvents(createdMana, game, source);
                     controller.getManaPool().addMana(createdMana, game, source);                    
@@ -103,7 +92,7 @@ public class AddManaOfAnyColorEffect extends BasicManaEffect {
 
     @Override
     public Mana getMana() {
-        return (new Mana(0,0,0,0,0,0,amount, 0));
+        return new Mana(0, 0, 0, 0, 0, 0, amount, 0);
     }
     
 }
diff --git a/Mage/src/main/java/mage/abilities/effects/common/DynamicManaEffect.java b/Mage/src/main/java/mage/abilities/effects/common/DynamicManaEffect.java
index 7cfb211811..1c510e7d04 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/DynamicManaEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/DynamicManaEffect.java
@@ -42,7 +42,6 @@ import mage.players.Player;
  */
 public class DynamicManaEffect extends BasicManaEffect {
 
-    private final Mana computedMana;
     private final DynamicValue amount;
     private final DynamicValue netAmount;
     private String text = null;
@@ -73,7 +72,6 @@ public class DynamicManaEffect extends BasicManaEffect {
     public DynamicManaEffect(Mana mana, DynamicValue amount, String text, boolean oneChoice, DynamicValue netAmount) {
         super(mana);
         this.amount = amount;
-        computedMana = new Mana();
         this.text = text;
         this.oneChoice = oneChoice;
         this.netAmount = netAmount;
@@ -81,7 +79,6 @@ public class DynamicManaEffect extends BasicManaEffect {
 
     public DynamicManaEffect(final DynamicManaEffect effect) {
         super(effect);
-        this.computedMana = effect.computedMana.copy();
         this.amount = effect.amount.copy();
         this.text = effect.text;
         this.oneChoice = effect.oneChoice;
@@ -99,7 +96,7 @@ public class DynamicManaEffect extends BasicManaEffect {
 
     @Override
     public boolean apply(Game game, Ability source) {
-        computeMana(false, game, source);
+        Mana computedMana = computeMana(false, game, source);
         checkToFirePossibleEvents(computedMana, game, source);
         game.getPlayer(source.getControllerId()).getManaPool().addMana(computedMana, game, source);
         return true;
@@ -119,7 +116,7 @@ public class DynamicManaEffect extends BasicManaEffect {
     }
 
     public Mana computeMana(boolean netMana, Game game, Ability source) {
-        this.computedMana.clear();
+        Mana computedMana = new Mana();
         int count;
         if (netMana && netAmount != null) {
             // calculate the maximum available mana
@@ -155,17 +152,7 @@ public class DynamicManaEffect extends BasicManaEffect {
                                 }
                             }
                         }
-                        if (choiceColor.getColor().isBlack()) {
-                            computedMana.increaseBlack();
-                        } else if (choiceColor.getColor().isBlue()) {
-                            computedMana.increaseBlue();
-                        } else if (choiceColor.getColor().isRed()) {
-                            computedMana.increaseRed();
-                        } else if (choiceColor.getColor().isGreen()) {
-                            computedMana.increaseGreen();
-                        } else if (choiceColor.getColor().isWhite()) {
-                            computedMana.increaseWhite();
-                        }
+                        choiceColor.increaseMana(computedMana);
                         if (!oneChoice) {
                             choiceColor.clearChoice();
                         }
diff --git a/Mage/src/main/java/mage/choices/ChoiceColor.java b/Mage/src/main/java/mage/choices/ChoiceColor.java
index 35a1f3ba01..30208b8b7e 100644
--- a/Mage/src/main/java/mage/choices/ChoiceColor.java
+++ b/Mage/src/main/java/mage/choices/ChoiceColor.java
@@ -29,6 +29,8 @@
 package mage.choices;
 
 import java.util.ArrayList;
+
+import mage.Mana;
 import mage.ObjectColor;
 
 /**
@@ -90,4 +92,33 @@ public class ChoiceColor extends ChoiceImpl {
         return color;
     }
 
+    public Mana getMana(int amount) {
+        Mana mana = null;
+        if (getColor().isBlack()) {
+            mana = Mana.BlackMana(amount);
+        } else if (getColor().isBlue()) {
+            mana = Mana.BlueMana(amount);
+        } else if (getColor().isRed()) {
+            mana = Mana.RedMana(amount);
+        } else if (getColor().isGreen()) {
+            mana = Mana.GreenMana(amount);
+        } else if (getColor().isWhite()) {
+            mana = Mana.WhiteMana(amount);
+        }
+        return mana;
+    }
+
+    public void increaseMana(Mana mana) {
+        if (getColor().isBlack()) {
+            mana.increaseBlack();
+        } else if (getColor().isBlue()) {
+            mana.increaseBlue();
+        } else if (getColor().isRed()) {
+            mana.increaseRed();
+        } else if (getColor().isGreen()) {
+            mana.increaseGreen();
+        } else if (getColor().isWhite()) {
+            mana.increaseWhite();
+        }
+    }
 }