From 590e412550d64e401a085944a1f51eaa95f07d07 Mon Sep 17 00:00:00 2001
From: Evan Kranzler <theelk801@gmail.com>
Date: Sat, 21 Apr 2018 08:25:03 -0400
Subject: [PATCH] fixed color identity function not working for transguild
 courier

---
 Mage/src/main/java/mage/cards/Card.java     | 64 +-------------------
 Mage/src/main/java/mage/cards/CardImpl.java | 65 +++++++++++++++++++++
 2 files changed, 66 insertions(+), 63 deletions(-)

diff --git a/Mage/src/main/java/mage/cards/Card.java b/Mage/src/main/java/mage/cards/Card.java
index 16a30646ee..759a67f650 100644
--- a/Mage/src/main/java/mage/cards/Card.java
+++ b/Mage/src/main/java/mage/cards/Card.java
@@ -31,7 +31,6 @@ import java.util.List;
 import java.util.UUID;
 import mage.MageObject;
 import mage.Mana;
-import mage.ObjectColor;
 import mage.abilities.Abilities;
 import mage.abilities.Ability;
 import mage.abilities.SpellAbility;
@@ -46,12 +45,6 @@ import mage.game.permanent.Permanent;
 
 public interface Card extends MageObject {
 
-    final String regexBlack = ".*\\x7b.{0,2}B.{0,2}\\x7d.*";
-    final String regexBlue = ".*\\x7b.{0,2}U.{0,2}\\x7d.*";
-    final String regexRed = ".*\\x7b.{0,2}R.{0,2}\\x7d.*";
-    final String regexGreen = ".*\\x7b.{0,2}G.{0,2}\\x7d.*";
-    final String regexWhite = ".*\\x7b.{0,2}W.{0,2}\\x7d.*";
-
     UUID getOwnerId();
 
     String getCardNumber();
@@ -188,62 +181,7 @@ public interface Card extends MageObject {
      *
      * @return
      */
-    default FilterMana getColorIdentity() {
-        FilterMana mana = new FilterMana();
-        mana.setBlack(getManaCost().getText().matches(regexBlack));
-        mana.setBlue(getManaCost().getText().matches(regexBlue));
-        mana.setGreen(getManaCost().getText().matches(regexGreen));
-        mana.setRed(getManaCost().getText().matches(regexRed));
-        mana.setWhite(getManaCost().getText().matches(regexWhite));
-
-        for (String rule : getRules()) {
-            rule = rule.replaceAll("(?i)<i.*?</i>", ""); // Ignoring reminder text in italic
-            if (!mana.isBlack() && rule.matches(regexBlack)) {
-                mana.setBlack(true);
-            }
-            if (!mana.isBlue() && rule.matches(regexBlue)) {
-                mana.setBlue(true);
-            }
-            if (!mana.isGreen() && rule.matches(regexGreen)) {
-                mana.setGreen(true);
-            }
-            if (!mana.isRed() && rule.matches(regexRed)) {
-                mana.setRed(true);
-            }
-            if (!mana.isWhite() && rule.matches(regexWhite)) {
-                mana.setWhite(true);
-            }
-        }
-        if (isTransformable()) {
-            Card secondCard = getSecondCardFace();
-            ObjectColor color = secondCard.getColor(null);
-            mana.setBlack(mana.isBlack() || color.isBlack());
-            mana.setGreen(mana.isGreen() || color.isGreen());
-            mana.setRed(mana.isRed() || color.isRed());
-            mana.setBlue(mana.isBlue() || color.isBlue());
-            mana.setWhite(mana.isWhite() || color.isWhite());
-            for (String rule : secondCard.getRules()) {
-                rule = rule.replaceAll("(?i)<i.*?</i>", ""); // Ignoring reminder text in italic
-                if (!mana.isBlack() && rule.matches(regexBlack)) {
-                    mana.setBlack(true);
-                }
-                if (!mana.isBlue() && rule.matches(regexBlue)) {
-                    mana.setBlue(true);
-                }
-                if (!mana.isGreen() && rule.matches(regexGreen)) {
-                    mana.setGreen(true);
-                }
-                if (!mana.isRed() && rule.matches(regexRed)) {
-                    mana.setRed(true);
-                }
-                if (!mana.isWhite() && rule.matches(regexWhite)) {
-                    mana.setWhite(true);
-                }
-            }
-        }
-
-        return mana;
-    }
+    default FilterMana getColorIdentity();
 
     List<UUID> getAttachments();
 
diff --git a/Mage/src/main/java/mage/cards/CardImpl.java b/Mage/src/main/java/mage/cards/CardImpl.java
index b6cbab8180..db7017c9ea 100644
--- a/Mage/src/main/java/mage/cards/CardImpl.java
+++ b/Mage/src/main/java/mage/cards/CardImpl.java
@@ -46,6 +46,7 @@ import mage.counters.Counter;
 import mage.counters.CounterType;
 import mage.counters.Counters;
 import mage.filter.FilterCard;
+import mage.filter.FilterMana;
 import mage.filter.FilterPermanent;
 import mage.filter.FilterSpell;
 import mage.filter.common.FilterCreaturePermanent;
@@ -75,6 +76,12 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
 
     private static final Logger logger = Logger.getLogger(CardImpl.class);
 
+    private static final String regexBlack = ".*\\x7b.{0,2}B.{0,2}\\x7d.*";
+    private static final String regexBlue = ".*\\x7b.{0,2}U.{0,2}\\x7d.*";
+    private static final String regexRed = ".*\\x7b.{0,2}R.{0,2}\\x7d.*";
+    private static final String regexGreen = ".*\\x7b.{0,2}G.{0,2}\\x7d.*";
+    private static final String regexWhite = ".*\\x7b.{0,2}W.{0,2}\\x7d.*";
+
     protected UUID ownerId;
     protected String cardNumber;
     public String expansionSetCode;
@@ -844,6 +851,64 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
         return this;
     }
 
+    @Override
+    public FilterMana getColorIdentity() {
+        FilterMana mana = new FilterMana();
+        mana.setBlack(getManaCost().getText().matches(regexBlack));
+        mana.setBlue(getManaCost().getText().matches(regexBlue));
+        mana.setGreen(getManaCost().getText().matches(regexGreen));
+        mana.setRed(getManaCost().getText().matches(regexRed));
+        mana.setWhite(getManaCost().getText().matches(regexWhite));
+
+        for (String rule : getRules()) {
+            rule = rule.replaceAll("(?i)<i.*?</i>", ""); // Ignoring reminder text in italic
+            if (!mana.isBlack() && (rule.matches(regexBlack) || this.color.isBlack())) {
+                mana.setBlack(true);
+            }
+            if (!mana.isBlue() && (rule.matches(regexBlue) || this.color.isBlue())) {
+                mana.setBlue(true);
+            }
+            if (!mana.isGreen() && (rule.matches(regexGreen) || this.color.isGreen())) {
+                mana.setGreen(true);
+            }
+            if (!mana.isRed() && (rule.matches(regexRed) || this.color.isRed())) {
+                mana.setRed(true);
+            }
+            if (!mana.isWhite() && (rule.matches(regexWhite) || this.color.isWhite())) {
+                mana.setWhite(true);
+            }
+        }
+        if (isTransformable()) {
+            Card secondCard = getSecondCardFace();
+            ObjectColor color = secondCard.getColor(null);
+            mana.setBlack(mana.isBlack() || color.isBlack());
+            mana.setGreen(mana.isGreen() || color.isGreen());
+            mana.setRed(mana.isRed() || color.isRed());
+            mana.setBlue(mana.isBlue() || color.isBlue());
+            mana.setWhite(mana.isWhite() || color.isWhite());
+            for (String rule : secondCard.getRules()) {
+                rule = rule.replaceAll("(?i)<i.*?</i>", ""); // Ignoring reminder text in italic
+                if (!mana.isBlack() && rule.matches(regexBlack)) {
+                    mana.setBlack(true);
+                }
+                if (!mana.isBlue() && rule.matches(regexBlue)) {
+                    mana.setBlue(true);
+                }
+                if (!mana.isGreen() && rule.matches(regexGreen)) {
+                    mana.setGreen(true);
+                }
+                if (!mana.isRed() && rule.matches(regexRed)) {
+                    mana.setRed(true);
+                }
+                if (!mana.isWhite() && rule.matches(regexWhite)) {
+                    mana.setWhite(true);
+                }
+            }
+        }
+
+        return mana;
+    }
+
     @Override
     public void setZone(Zone zone, Game game) {
         game.setZone(getId(), zone);