From 2de6fc476c2a4a0ed09786ae721c99b07bc5c11a Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Thu, 28 Oct 2021 21:20:45 +0200 Subject: [PATCH] Fix dropping foil from card when copying --- .../main/java/forge/ai/ComputerUtilCard.java | 3 +-- .../ai/ability/ChooseGenericEffectAi.java | 2 +- .../java/forge/game/ability/AbilityUtils.java | 10 +++++----- .../ability/effects/PlayLandVariantEffect.java | 3 +-- .../game/ability/effects/ProtectAllEffect.java | 3 +-- .../src/main/java/forge/game/card/Card.java | 18 +++++++----------- .../main/java/forge/game/card/CardFactory.java | 5 +++++ .../java/forge/game/card/CardFactoryUtil.java | 6 +++--- .../java/forge/game/card/CardPredicates.java | 6 +++--- .../java/forge/game/card/CardProperty.java | 4 ++-- .../main/java/forge/game/card/CardUtil.java | 7 +------ .../java/forge/game/card/token/TokenInfo.java | 2 +- .../spellability/SpellAbilityCondition.java | 5 ++--- .../util/IntegerConstraint.java | 2 +- .../InputSelectCardsForConvokeOrImprovise.java | 3 +-- .../src/main/java/forge/gui/FThreads.java | 3 +-- 16 files changed, 36 insertions(+), 46 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java index af792a1b66b..538064d763f 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java @@ -40,7 +40,6 @@ import forge.game.card.CardFactory; import forge.game.card.CardFactoryUtil; import forge.game.card.CardLists; import forge.game.card.CardPredicates; -import forge.game.card.CardUtil; import forge.game.card.CounterEnumType; import forge.game.card.CounterType; import forge.game.combat.Combat; @@ -905,7 +904,7 @@ public class ComputerUtilCard { } for (final Card crd : list) { - ColorSet color = CardUtil.getColors(crd); + ColorSet color = crd.determineColor(); if (color.hasWhite()) map.get(0).setValue(Integer.valueOf(map.get(0).getValue()+1)); if (color.hasBlue()) map.get(1).setValue(Integer.valueOf(map.get(1).getValue()+1)); if (color.hasBlack()) map.get(2).setValue(Integer.valueOf(map.get(2).getValue()+1)); diff --git a/forge-ai/src/main/java/forge/ai/ability/ChooseGenericEffectAi.java b/forge-ai/src/main/java/forge/ai/ability/ChooseGenericEffectAi.java index e76505383bd..7bcc6b80dfb 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChooseGenericEffectAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChooseGenericEffectAi.java @@ -244,7 +244,7 @@ public class ChooseGenericEffectAi extends SpellAbilityAi { //if Iona does prevent from casting, allow it to draw for (final Card io : player.getCardsIn(ZoneType.Battlefield, "Iona, Shield of Emeria")) { - if (CardUtil.getColors(imprinted).hasAnyColor(MagicColor.fromName(io.getChosenColor()))) { + if (imprinted.determineColor().hasAnyColor(MagicColor.fromName(io.getChosenColor()))) { return allow; } } diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index e0969ec98a9..dae0902bba0 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -1789,7 +1789,7 @@ public class AbilityUtils { if (sq[0].contains("HasNumChosenColors")) { int sum = 0; for (Card card : getDefinedCards(c, sq[1], sa)) { - sum += CardUtil.getColors(card).getSharedColors(ColorSet.fromNames(c.getChosenColors())).countColors(); + sum += card.determineColor().getSharedColors(ColorSet.fromNames(c.getChosenColors())).countColors(); } return sum; } @@ -1990,7 +1990,7 @@ public class AbilityUtils { // Count$CardMulticolor.. if (sq[0].contains("CardMulticolor")) { - final boolean isMulti = CardUtil.getColors(c).isMulticolor(); + final boolean isMulti = c.determineColor().isMulticolor(); return doXMath(Integer.parseInt(sq[isMulti ? 1 : 2]), expr, c, ctb); } // Count$Madness.. @@ -2046,7 +2046,7 @@ public class AbilityUtils { } if (sq[0].contains("CardNumColors")) { - return doXMath(CardUtil.getColors(c).countColors(), expr, c, ctb); + return doXMath(c.determineColor().countColors(), expr, c, ctb); } if (sq[0].contains("CardNumAttacksThisTurn")) { return doXMath(c.getDamageHistory().getCreatureAttacksThisTurn(), expr, c, ctb); @@ -3766,7 +3766,7 @@ public class AbilityUtils { someCards = CardLists.filter(someCards, new Predicate() { @Override public boolean apply(final Card c) { - return CardUtil.getColors(c).isMulticolor(); + return c.determineColor().isMulticolor(); } }); } @@ -3775,7 +3775,7 @@ public class AbilityUtils { someCards = CardLists.filter(someCards, new Predicate() { @Override public boolean apply(final Card c) { - return CardUtil.getColors(c).isMonoColor(); + return c.determineColor().isMonoColor(); } }); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/PlayLandVariantEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PlayLandVariantEffect.java index c82b353a5a0..5269c48def3 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PlayLandVariantEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PlayLandVariantEffect.java @@ -15,7 +15,6 @@ import forge.game.Game; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; import forge.game.card.CardFactory; -import forge.game.card.CardUtil; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.item.PaperCard; @@ -35,7 +34,7 @@ public class PlayLandVariantEffect extends SpellAbilityEffect { cards = Lists.newArrayList(Iterables.filter(cards, cpp)); } // current color of source card - final ColorSet color = CardUtil.getColors(source); + final ColorSet color = source.determineColor(); if (color.isColorless()) { return; } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ProtectAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ProtectAllEffect.java index f7e111cb6ef..475a3801502 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ProtectAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ProtectAllEffect.java @@ -15,7 +15,6 @@ import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; import forge.game.card.CardCollectionView; import forge.game.card.CardLists; -import forge.game.card.CardUtil; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.game.zone.ZoneType; @@ -65,7 +64,7 @@ public class ProtectAllEffect extends SpellAbilityEffect { } } else if (sa.getParam("Gains").equals("TargetedCardColor")) { for (final Card c : sa.getSATargetingCard().getTargets().getTargetCards()) { - ColorSet cs = CardUtil.getColors(c); + ColorSet cs = c.determineColor(); for (byte col : MagicColor.WUBRG) { if (cs.hasAnyColor(col)) gains.add(MagicColor.toLongString(col).toLowerCase()); 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 fbe145d1c4c..634ab28de32 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -4937,17 +4937,13 @@ public class Card extends GameEntity implements Comparable, IHasSVars { view.updateEmblem(this); } - /* - * there are easy checkers for Color. The CardUtil functions should be made - * part of the Card class, so calling out is not necessary - */ - public final boolean isOfColor(final String col) { return CardUtil.getColors(this).hasAnyColor(MagicColor.fromName(col)); } - public final boolean isBlack() { return CardUtil.getColors(this).hasBlack(); } - public final boolean isBlue() { return CardUtil.getColors(this).hasBlue(); } - public final boolean isRed() { return CardUtil.getColors(this).hasRed(); } - public final boolean isGreen() { return CardUtil.getColors(this).hasGreen(); } - public final boolean isWhite() { return CardUtil.getColors(this).hasWhite(); } - public final boolean isColorless() { return CardUtil.getColors(this).isColorless(); } + public final boolean isOfColor(final String col) { return determineColor().hasAnyColor(MagicColor.fromName(col)); } + public final boolean isBlack() { return determineColor().hasBlack(); } + public final boolean isBlue() { return determineColor().hasBlue(); } + public final boolean isRed() { return determineColor().hasRed(); } + public final boolean isGreen() { return determineColor().hasGreen(); } + public final boolean isWhite() { return determineColor().hasWhite(); } + public final boolean isColorless() { return determineColor().isColorless(); } public final boolean sharesNameWith(final Card c1) { // in a corner case where c1 is null, there is no name to share with. diff --git a/forge-game/src/main/java/forge/game/card/CardFactory.java b/forge-game/src/main/java/forge/game/card/CardFactory.java index 1ffae8fd159..1c619716ffa 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactory.java +++ b/forge-game/src/main/java/forge/game/card/CardFactory.java @@ -104,6 +104,11 @@ public class CardFactory { out.setCommander(in.isRealCommander()); //out.setFaceDown(in.isFaceDown()); + int foil = in.getCurrentState().getFoil(); + if (foil > 0) { + out.setFoil(foil); + } + return out; } diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 36e2479e4e2..11166d7fad0 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -338,7 +338,7 @@ public class CardFactoryUtil { } for (final Card crd : list) { - ColorSet color = CardUtil.getColors(crd); + ColorSet color = crd.determineColor(); for (int i = 0; i < cntColors; i++) { if (color.hasAnyColor(MagicColor.WUBRG[i])) map[i]++; @@ -376,7 +376,7 @@ public class CardFactoryUtil { } for (final Card crd : list) { - ColorSet color = CardUtil.getColors(crd); + ColorSet color = crd.determineColor(); for (int i = 0; i < cntColors; i++) { if (color.hasAnyColor(MagicColor.WUBRG[i])) map[i]++; @@ -407,7 +407,7 @@ public class CardFactoryUtil { } for (final Card crd : list) { - ColorSet color = CardUtil.getColors(crd); + ColorSet color = crd.determineColor(); for (int i = 0; i < cntColors; i++) { if (color.hasAnyColor(colorRestrictions.get(i))) { map[i]++; 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 d8712ecacab..55912ec3aa8 100644 --- a/forge-game/src/main/java/forge/game/card/CardPredicates.java +++ b/forge-game/src/main/java/forge/game/card/CardPredicates.java @@ -264,7 +264,7 @@ public final class CardPredicates { return new Predicate() { @Override public boolean apply(final Card c) { - return CardUtil.getColors(c).hasAnyColor(color); + return c.determineColor().hasAnyColor(color); } }; } // getColor() @@ -273,7 +273,7 @@ public final class CardPredicates { return new Predicate() { @Override public boolean apply(final Card c) { - return CardUtil.getColors(c).hasExactlyColor(color); + return c.determineColor().hasExactlyColor(color); } }; } @@ -282,7 +282,7 @@ public final class CardPredicates { return new Predicate() { @Override public boolean apply(final Card c) { - return CardUtil.getColors(c).isColorless(); + return c.determineColor().isColorless(); } }; } diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index 95bbfd2f933..2025be855c7 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -689,7 +689,7 @@ public class CardProperty { break; case "MostProminentColor": byte mask = CardFactoryUtil.getMostProminentColors(game.getCardsIn(ZoneType.Battlefield)); - if (!CardUtil.getColors(card).hasAnyColor(mask)) + if (!card.determineColor().hasAnyColor(mask)) return false; break; case "LastCastThisTurn": @@ -703,7 +703,7 @@ public class CardProperty { if (castSA == null) { return false; } - if (!CardUtil.getColors(card).hasAnyColor(castSA.getPayingColors().getColor())) { + if (!card.determineColor().hasAnyColor(castSA.getPayingColors().getColor())) { return false; } break; diff --git a/forge-game/src/main/java/forge/game/card/CardUtil.java b/forge-game/src/main/java/forge/game/card/CardUtil.java index d5b2df735df..b833f3543fd 100644 --- a/forge-game/src/main/java/forge/game/card/CardUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardUtil.java @@ -85,10 +85,6 @@ public final class CardUtil { return false; } - public static ColorSet getColors(final Card c) { - return c.determineColor(); - } - public static boolean isStackingKeyword(final String keyword) { String kw = keyword; if (kw.startsWith("HIDDEN")) { @@ -158,7 +154,6 @@ public final class CardUtil { public static List getLastTurnCast(final String valid, final Card src, final CardTraitBase ctb) { return CardLists.getValidCardsAsList(src.getGame().getStack().getSpellsCastLastTurn(), valid, src.getController(), src, ctb); - } public static List getLKICopyList(final Iterable in, Map cachedMap) { @@ -343,7 +338,7 @@ public final class CardUtil { byte combinedColor = 0; for (Card tgt : tgts) { - ColorSet cs = CardUtil.getColors(tgt); + ColorSet cs = tgt.determineColor(); for (byte color : MagicColor.WUBRG) { if(!cs.hasAnyColor(color)) continue; diff --git a/forge-game/src/main/java/forge/game/card/token/TokenInfo.java b/forge-game/src/main/java/forge/game/card/token/TokenInfo.java index cd2a209d345..03338e6ee8c 100644 --- a/forge-game/src/main/java/forge/game/card/token/TokenInfo.java +++ b/forge-game/src/main/java/forge/game/card/token/TokenInfo.java @@ -158,7 +158,7 @@ public class TokenInfo { if (!colorMap.isEmpty()) { if (!result.isColorless()) { // change Token Colors - byte color = CardUtil.getColors(result).getColor(); + byte color = result.determineColor().getColor(); for (final Map.Entry e : colorMap.entrySet()) { byte v = MagicColor.fromName(e.getValue()); diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java index 44f8535dcfe..1ba5c680b6b 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityCondition.java @@ -34,7 +34,6 @@ import forge.game.GameObjectPredicates; import forge.game.GameType; import forge.game.ability.AbilityUtils; import forge.game.card.Card; -import forge.game.card.CardUtil; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.Player; @@ -300,9 +299,9 @@ public class SpellAbilityCondition extends SpellAbilityVariables { if (first == null) { return false; } - byte firstColor = CardUtil.getColors(first).getColor(); + byte firstColor = first.determineColor().getColor(); for (Card c : tgts) { - if (CardUtil.getColors(c).getColor() != firstColor) { + if (c.determineColor().getColor() != firstColor) { return false; } } diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/IntegerConstraint.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/IntegerConstraint.java index 54c41a01543..b2d4ebd7252 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/IntegerConstraint.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/IntegerConstraint.java @@ -23,7 +23,7 @@ public class IntegerConstraint { @Override public String toString() { - if( min == max ) { + if (min == max) { return String.valueOf( min ); } return "between " + min + " and " + max; diff --git a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectCardsForConvokeOrImprovise.java b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectCardsForConvokeOrImprovise.java index 248f9d393e0..b7012d86fff 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectCardsForConvokeOrImprovise.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectCardsForConvokeOrImprovise.java @@ -13,7 +13,6 @@ import forge.card.mana.ManaCost; import forge.card.mana.ManaCostShard; import forge.game.card.Card; import forge.game.card.CardCollectionView; -import forge.game.card.CardUtil; import forge.game.mana.ManaCostBeingPaid; import forge.game.player.Player; import forge.game.spellability.SpellAbility; @@ -74,7 +73,7 @@ public final class InputSelectCardsForConvokeOrImprovise extends InputSelectMany if (improvise) { chosenColor = ManaCostShard.COLORLESS.getColorMask(); } else { - ColorSet colors = CardUtil.getColors(card); + ColorSet colors = card.determineColor(); if (colors.isMulticolor()) { //if card is multicolor, strip out any colors which can't be paid towards remaining cost colors = ColorSet.fromMask(colors.getColor() & remainingCost.getUnpaidColors()); diff --git a/forge-gui/src/main/java/forge/gui/FThreads.java b/forge-gui/src/main/java/forge/gui/FThreads.java index f90221c0c0e..e463f3ead90 100644 --- a/forge-gui/src/main/java/forge/gui/FThreads.java +++ b/forge-gui/src/main/java/forge/gui/FThreads.java @@ -30,8 +30,7 @@ public class FThreads { public static void invokeInEdtNowOrLater(final Runnable proc) { if (isGuiThread()) { GuiBase.getInterface().invokeInEdtNow(proc); - } - else { + } else { GuiBase.getInterface().invokeInEdtLater(proc); } }