From db98f237c647a3381a827f879561c438a7d7884d Mon Sep 17 00:00:00 2001 From: Hanmac Date: Wed, 1 Jun 2016 18:37:59 +0000 Subject: [PATCH] Card: add sharesCMCWith use it for DifferentCMC in ChangeZoneEffect also use sharesNameWith for DifferentNames in ChangeZoneEffect that does fix Seasons Past with SplitCards --- .../ability/effects/ChangeZoneEffect.java | 4 +-- .../src/main/java/forge/game/card/Card.java | 32 +++++++++++++++++-- .../java/forge/game/card/CardPredicates.java | 18 +++++++++++ 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index 909b73ded0d..5c490917812 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -802,12 +802,12 @@ public class ChangeZoneEffect extends SpellAbilityEffect { for (int i = 0; i < changeNum && destination != null; i++) { if (sa.hasParam("DifferentNames")) { for (Card c : chosenCards) { - fetchList = CardLists.filter(fetchList, Predicates.not(CardPredicates.nameEquals(c.getName()))); + fetchList = CardLists.filter(fetchList, Predicates.not(CardPredicates.sharesNameWith(c))); } } if (sa.hasParam("DifferentCMC")) { for (Card c: chosenCards) { - fetchList = CardLists.filter(fetchList, Predicates.not(CardPredicates.hasCMC(c.getCMC()))); + fetchList = CardLists.filter(fetchList, Predicates.not(CardPredicates.sharesCMCWith(c))); } } if (sa.hasParam("ShareLandType")) { diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index fe4bcb7a7ad..96a4dcd379f 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -5317,10 +5317,10 @@ public class Card extends GameEntity implements Comparable { boolean shares; shares = getName().equals(c1.getName()); - if (c1.isSplitCard()) { + if (isSplitCard() && c1.isSplitCard()) { shares |= c1.getName().equals(getState(CardStateName.LeftSplit).getName()); shares |= c1.getName().equals(getState(CardStateName.RightSplit).getName()); - } + } return shares; } @@ -5335,6 +5335,34 @@ public class Card extends GameEntity implements Comparable { return shares; } + public final boolean sharesCMCWith(final Card c1) { + int x; + int x2 = -1; + int y = 0; + int y2 = -1; + + if (isSplitCard() && getCurrentStateName() == CardStateName.Original) { + x = getState(CardStateName.LeftSplit).getManaCost().getCMC(); + x2 = getState(CardStateName.RightSplit).getManaCost().getCMC(); + } else { + x = getCMC(); + } + + if (c1.isSplitCard() && c1.getCurrentStateName() == CardStateName.Original) { + y = c1.getState(CardStateName.LeftSplit).getManaCost().getCMC(); + y2 = c1.getState(CardStateName.RightSplit).getManaCost().getCMC(); + + if (isSplitCard() && getCurrentStateName() == CardStateName.Original) { + return x == y || x == y2 || x2 == y || x2 == y2; + } else { + return x == y || x == y2; + } + } else { + y = c1.getCMC(); + return x == y || x2 == y; + } + } + public final boolean sharesCreatureTypeWith(final Card c1) { if (c1 == null) { return false; diff --git a/forge-game/src/main/java/forge/game/card/CardPredicates.java b/forge-game/src/main/java/forge/game/card/CardPredicates.java index c06ef8b0709..14e559775c1 100644 --- a/forge-game/src/main/java/forge/game/card/CardPredicates.java +++ b/forge-game/src/main/java/forge/game/card/CardPredicates.java @@ -108,6 +108,24 @@ public final class CardPredicates { }; } + public static final Predicate sharesNameWith(final Card name) { + return new Predicate() { + @Override + public boolean apply(Card c) { + return c.sharesNameWith(name); + } + }; + } + + public static final Predicate sharesCMCWith(final Card cmc) { + return new Predicate() { + @Override + public boolean apply(Card c) { + return c.sharesCMCWith(cmc); + } + }; + } + public static final Predicate sharesColorWith(final Card color) { return new Predicate() { @Override