From af48b1745138adc01024728a59b81b94c9757afa Mon Sep 17 00:00:00 2001
From: spjspj <spjspj4@gmail.com>
Date: Fri, 19 Jan 2018 20:30:12 +1100
Subject: [PATCH 1/3] Fix M15 colors for GW (was WG), GU (was UG), RW (was WR)

---
 .../mage/card/arcane/ModernCardRenderer.java  |  2 +-
 Mage/src/main/java/mage/ObjectColor.java      | 77 +++++++++++++++++++
 2 files changed, 78 insertions(+), 1 deletion(-)

diff --git a/Mage.Client/src/main/java/org/mage/card/arcane/ModernCardRenderer.java b/Mage.Client/src/main/java/org/mage/card/arcane/ModernCardRenderer.java
index a75c12fe63..353acd6de0 100644
--- a/Mage.Client/src/main/java/org/mage/card/arcane/ModernCardRenderer.java
+++ b/Mage.Client/src/main/java/org/mage/card/arcane/ModernCardRenderer.java
@@ -1203,7 +1203,7 @@ public class ModernCardRenderer extends CardRenderer {
     protected static Paint getTextboxPaint(ObjectColor colors, Collection<CardType> types, int width) {
         if (colors.isMulticolored()) {
             if (colors.getColorCount() == 2) {
-                List<ObjectColor> twoColors = colors.getColors();
+                List<ObjectColor> twoColors = colors.getTwoColorsInOrder();
                 Color[] translatedColors;
                 if (types.contains(CardType.LAND)) {
                     translatedColors = new Color[]{
diff --git a/Mage/src/main/java/mage/ObjectColor.java b/Mage/src/main/java/mage/ObjectColor.java
index 8bb44e9d7e..39e657f65c 100644
--- a/Mage/src/main/java/mage/ObjectColor.java
+++ b/Mage/src/main/java/mage/ObjectColor.java
@@ -175,6 +175,83 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
         }
         return colors;
     }
+    
+    private int getColorIndex(int current, int potentialNext, boolean wantMinimum) {
+        if (current == -1) {
+            return potentialNext;
+        }
+        if ((current < potentialNext) && wantMinimum) {
+            return current;
+        }
+        if ((current < potentialNext) && !wantMinimum) {
+            return potentialNext;
+        }
+        return current;
+    }
+
+    public List<ObjectColor> getTwoColorsInOrder() {
+        List<ObjectColor> colors = new ArrayList<>();
+        int firstColor = -1; 
+        int secondColor = -1; 
+        if (this.isWhite()) {
+            firstColor = getColorIndex(firstColor, 1, true);
+            secondColor = getColorIndex(secondColor, 1, false);
+        }
+        if (this.isBlue()) {
+            firstColor = getColorIndex(firstColor, 2, true);
+            secondColor = getColorIndex(secondColor, 2, false);
+        }
+        if (this.isBlack()) {
+            firstColor = getColorIndex(firstColor, 3, true);
+            secondColor = getColorIndex(secondColor, 3, false);
+        }
+        if (this.isRed()) {
+            firstColor = getColorIndex(firstColor, 4, true);
+            secondColor = getColorIndex(secondColor, 4, false);
+        }
+        if (this.isGreen()) {
+            firstColor = getColorIndex(firstColor, 5, true);
+            secondColor = getColorIndex(secondColor, 5, false);
+        }
+        if (secondColor - firstColor <= 2) { 
+            if (this.isWhite()) {
+                colors.add(ObjectColor.WHITE);
+            }
+            if (this.isBlue()) {
+                colors.add(ObjectColor.BLUE);
+            }
+            if (this.isBlack()) {
+                colors.add(ObjectColor.BLACK);
+            }
+            if (this.isRed()) {
+                colors.add(ObjectColor.RED);
+            }
+            if (this.isGreen()) {
+                colors.add(ObjectColor.GREEN);
+            }
+        } else if (secondColor - firstColor >= 3) {
+            if (this.isGreen()) {
+                colors.add(ObjectColor.GREEN);
+            }
+            if (this.isRed()) {
+                colors.add(ObjectColor.RED);
+            }
+            if (this.isBlack()) {
+                colors.add(ObjectColor.BLACK);
+            }
+            if (this.isBlue()) {
+                colors.add(ObjectColor.BLUE);
+            }
+            if (this.isWhite()) {
+                colors.add(ObjectColor.WHITE);
+            }
+        }
+
+        if (this.isGold()) {
+            colors.add(ObjectColor.GOLD);
+        }
+        return colors;
+    }
 
     public void setColor(ObjectColor color) {
         this.setBlack(color.isBlack());

From b26cd21f027349904c33481f6b3a5106ca96dcf8 Mon Sep 17 00:00:00 2001
From: spjspj <spjspj4@gmail.com>
Date: Fri, 19 Jan 2018 20:33:17 +1100
Subject: [PATCH 2/3] Fix M15 colors for GW (was WG), GU (was UG), RW (was WR)

---
 .../src/main/java/org/mage/card/arcane/ModernCardRenderer.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Mage.Client/src/main/java/org/mage/card/arcane/ModernCardRenderer.java b/Mage.Client/src/main/java/org/mage/card/arcane/ModernCardRenderer.java
index 353acd6de0..35000dfdd3 100644
--- a/Mage.Client/src/main/java/org/mage/card/arcane/ModernCardRenderer.java
+++ b/Mage.Client/src/main/java/org/mage/card/arcane/ModernCardRenderer.java
@@ -1127,7 +1127,7 @@ public class ModernCardRenderer extends CardRenderer {
     protected static Paint getBorderPaint(ObjectColor colors, Collection<CardType> types, int width) {
         if (colors.isMulticolored()) {
             if (colors.getColorCount() == 2) {
-                List<ObjectColor> twoColors = colors.getColors();
+                List<ObjectColor> twoColors = colors.getTwoColorsInOrder();
 
                 // Two-color frames look better if we use a whiter white
                 // than the normal white frame color for them, as the normal

From d095f83d8a0b539b26a02662ba2a8872eaa58a49 Mon Sep 17 00:00:00 2001
From: spjspj <spjspj4@gmail.com>
Date: Fri, 19 Jan 2018 21:28:47 +1100
Subject: [PATCH 3/3] Fix M15 colors for GW (was WG), GU (was UG), RW (was WR)

---
 Mage/src/main/java/mage/ObjectColor.java | 130 +++++++++--------------
 1 file changed, 51 insertions(+), 79 deletions(-)

diff --git a/Mage/src/main/java/mage/ObjectColor.java b/Mage/src/main/java/mage/ObjectColor.java
index 39e657f65c..a71e093047 100644
--- a/Mage/src/main/java/mage/ObjectColor.java
+++ b/Mage/src/main/java/mage/ObjectColor.java
@@ -29,6 +29,7 @@ package mage;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 
@@ -42,7 +43,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
     public static final ObjectColor BLACK = new ObjectColor("B");
     public static final ObjectColor RED = new ObjectColor("R");
     public static final ObjectColor GREEN = new ObjectColor("G");
-    
+
     public static final ObjectColor GOLD = new ObjectColor("O");
 
     private boolean white;
@@ -50,7 +51,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
     private boolean black;
     private boolean red;
     private boolean green;
-    
+
     private boolean gold;
 
     public ObjectColor() {
@@ -74,7 +75,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
                 case 'G':
                     green = true;
                     break;
-                    
+
                 case 'O':
                     gold = true;
                     break;
@@ -88,7 +89,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
         black = color.black;
         red = color.red;
         green = color.green;
-        
+
         gold = color.gold;
     }
 
@@ -106,13 +107,13 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
         newColor.black = black || other.black;
         newColor.red = red || other.red;
         newColor.green = green || other.green;
-        
+
         newColor.gold = gold || other.gold;
         return newColor;
     }
 
     /**
-     * Returns a new color which contains the intersection of the colors of this 
+     * Returns a new color which contains the intersection of the colors of this
      * ObjectColor and the other ObjectColor.
      *
      * @param other The other ObjectColor to intersect with
@@ -145,7 +146,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
         if (red) {
             count++;
         }
-        
+
         if (gold) {
             count++;
         }
@@ -169,82 +170,54 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
         if (this.isGreen()) {
             colors.add(ObjectColor.GREEN);
         }
-        
+
         if (this.isGold()) {
             colors.add(ObjectColor.GOLD);
         }
         return colors;
     }
-    
-    private int getColorIndex(int current, int potentialNext, boolean wantMinimum) {
-        if (current == -1) {
-            return potentialNext;
-        }
-        if ((current < potentialNext) && wantMinimum) {
-            return current;
-        }
-        if ((current < potentialNext) && !wantMinimum) {
-            return potentialNext;
-        }
-        return current;
-    }
 
     public List<ObjectColor> getTwoColorsInOrder() {
         List<ObjectColor> colors = new ArrayList<>();
-        int firstColor = -1; 
-        int secondColor = -1; 
+        int firstColor = 5000;
+        int secondColor = -1;
         if (this.isWhite()) {
-            firstColor = getColorIndex(firstColor, 1, true);
-            secondColor = getColorIndex(secondColor, 1, false);
+            firstColor = 1;
+            secondColor = 1;
         }
         if (this.isBlue()) {
-            firstColor = getColorIndex(firstColor, 2, true);
-            secondColor = getColorIndex(secondColor, 2, false);
+            firstColor = Math.min(firstColor, 2);
+            secondColor = Math.max(secondColor, 2);
         }
         if (this.isBlack()) {
-            firstColor = getColorIndex(firstColor, 3, true);
-            secondColor = getColorIndex(secondColor, 3, false);
+            firstColor = Math.min(firstColor, 3);
+            secondColor = Math.max(secondColor, 3);
         }
         if (this.isRed()) {
-            firstColor = getColorIndex(firstColor, 4, true);
-            secondColor = getColorIndex(secondColor, 4, false);
+            firstColor = Math.min(firstColor, 4);
+            secondColor = Math.max(secondColor, 4);
         }
         if (this.isGreen()) {
-            firstColor = getColorIndex(firstColor, 5, true);
-            secondColor = getColorIndex(secondColor, 5, false);
+            firstColor = Math.min(firstColor, 5);
+            secondColor = Math.max(secondColor, 5);
         }
-        if (secondColor - firstColor <= 2) { 
-            if (this.isWhite()) {
-                colors.add(ObjectColor.WHITE);
-            }
-            if (this.isBlue()) {
-                colors.add(ObjectColor.BLUE);
-            }
-            if (this.isBlack()) {
-                colors.add(ObjectColor.BLACK);
-            }
-            if (this.isRed()) {
-                colors.add(ObjectColor.RED);
-            }
-            if (this.isGreen()) {
-                colors.add(ObjectColor.GREEN);
-            }
-        } else if (secondColor - firstColor >= 3) {
-            if (this.isGreen()) {
-                colors.add(ObjectColor.GREEN);
-            }
-            if (this.isRed()) {
-                colors.add(ObjectColor.RED);
-            }
-            if (this.isBlack()) {
-                colors.add(ObjectColor.BLACK);
-            }
-            if (this.isBlue()) {
-                colors.add(ObjectColor.BLUE);
-            }
-            if (this.isWhite()) {
-                colors.add(ObjectColor.WHITE);
-            }
+        if (this.isWhite()) {
+            colors.add(ObjectColor.WHITE);
+        }
+        if (this.isBlue()) {
+            colors.add(ObjectColor.BLUE);
+        }
+        if (this.isBlack()) {
+            colors.add(ObjectColor.BLACK);
+        }
+        if (this.isRed()) {
+            colors.add(ObjectColor.RED);
+        }
+        if (this.isGreen()) {
+            colors.add(ObjectColor.GREEN);
+        }
+        if (colors.size() >= 2 && secondColor - firstColor >= 3) {
+            Collections.swap(colors, 0, 1);
         }
 
         if (this.isGold()) {
@@ -259,7 +232,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
         this.setGreen(color.isGreen());
         this.setRed(color.isRed());
         this.setWhite(color.isWhite());
-        
+
         this.setGold(color.isGold());
     }
 
@@ -279,7 +252,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
         if (color.isGreen()) {
             setGreen(true);
         }
-        
+
         if (color.isGold()) {
             setGold(true);
         }
@@ -314,7 +287,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
                 || gold)) {
             return true;
         }
-        return green 
+        return green
                 && gold;
     }
 
@@ -357,12 +330,11 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
     public void setGreen(boolean green) {
         this.green = green;
     }
-    
-    
+
     public boolean isGold() {
         return gold;
     }
-    
+
     public void setGold(boolean gold) {
         this.gold = gold;
     }
@@ -385,7 +357,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
         if (green) {
             sb.append('G');
         }
-        
+
         if (gold) {
             sb.append('O');
         }
@@ -411,7 +383,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
             if (green) {
                 return "green";
             }
-            
+
             if (gold) {
                 return "gold";
             }
@@ -454,7 +426,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
         hash = 23 * hash + (this.black ? 1 : 0);
         hash = 23 * hash + (this.red ? 1 : 0);
         hash = 23 * hash + (this.green ? 1 : 0);
-        
+
         hash = 23 * hash + (this.gold ? 1 : 0);
         return hash;
     }
@@ -478,7 +450,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
         if (color.green && this.green) {
             return true;
         }
-        
+
         if (color.gold && this.gold) {
             return true;
         }
@@ -517,7 +489,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
             o1 = 4;
         } else if (this.isWhite()) {
             o1 = 5;
-            
+
         } else if (this.isGold()) {
             o1 = 6;
         }
@@ -535,7 +507,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
             o2 = 4;
         } else if (o.isWhite()) {
             o2 = 5;
-            
+
         } else if (o.isGold()) {
             o2 = 6;
         }
@@ -564,7 +536,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
         if (isWhite()) {
             return ColoredManaSymbol.W;
         }
-        
+
         if (isGold()) {
             return ColoredManaSymbol.O;
         }
@@ -578,7 +550,7 @@ public class ObjectColor implements Serializable, Copyable<ObjectColor>, Compara
         colors.add(ObjectColor.BLACK);
         colors.add(ObjectColor.RED);
         colors.add(ObjectColor.GREEN);
-        
+
         colors.add(ObjectColor.GOLD);
         return colors;
     }