mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 10:48:00 +00:00
Merge branch 'foiling' into 'master'
Fix dropping foil from card when copying See merge request core-developers/forge!5666
This commit is contained in:
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.<numMC>.<numNotMC>
|
||||
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.<True>.<False>
|
||||
@@ -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<Card>() {
|
||||
@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<Card>() {
|
||||
@Override
|
||||
public boolean apply(final Card c) {
|
||||
return CardUtil.getColors(c).isMonoColor();
|
||||
return c.determineColor().isMonoColor();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -4937,17 +4937,13 @@ public class Card extends GameEntity implements Comparable<Card>, 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.
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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]++;
|
||||
|
||||
@@ -264,7 +264,7 @@ public final class CardPredicates {
|
||||
return new Predicate<Card>() {
|
||||
@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<Card>() {
|
||||
@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<Card>() {
|
||||
@Override
|
||||
public boolean apply(final Card c) {
|
||||
return CardUtil.getColors(c).isColorless();
|
||||
return c.determineColor().isColorless();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<Card> 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<Card> getLKICopyList(final Iterable<Card> in, Map<Integer, Card> 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;
|
||||
|
||||
@@ -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<String, String> e : colorMap.entrySet()) {
|
||||
byte v = MagicColor.fromName(e.getValue());
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user