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.CardFactoryUtil;
|
||||||
import forge.game.card.CardLists;
|
import forge.game.card.CardLists;
|
||||||
import forge.game.card.CardPredicates;
|
import forge.game.card.CardPredicates;
|
||||||
import forge.game.card.CardUtil;
|
|
||||||
import forge.game.card.CounterEnumType;
|
import forge.game.card.CounterEnumType;
|
||||||
import forge.game.card.CounterType;
|
import forge.game.card.CounterType;
|
||||||
import forge.game.combat.Combat;
|
import forge.game.combat.Combat;
|
||||||
@@ -905,7 +904,7 @@ public class ComputerUtilCard {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (final Card crd : list) {
|
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.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.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));
|
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
|
//if Iona does prevent from casting, allow it to draw
|
||||||
for (final Card io : player.getCardsIn(ZoneType.Battlefield, "Iona, Shield of Emeria")) {
|
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;
|
return allow;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1789,7 +1789,7 @@ public class AbilityUtils {
|
|||||||
if (sq[0].contains("HasNumChosenColors")) {
|
if (sq[0].contains("HasNumChosenColors")) {
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
for (Card card : getDefinedCards(c, sq[1], sa)) {
|
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;
|
return sum;
|
||||||
}
|
}
|
||||||
@@ -1990,7 +1990,7 @@ public class AbilityUtils {
|
|||||||
|
|
||||||
// Count$CardMulticolor.<numMC>.<numNotMC>
|
// Count$CardMulticolor.<numMC>.<numNotMC>
|
||||||
if (sq[0].contains("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);
|
return doXMath(Integer.parseInt(sq[isMulti ? 1 : 2]), expr, c, ctb);
|
||||||
}
|
}
|
||||||
// Count$Madness.<True>.<False>
|
// Count$Madness.<True>.<False>
|
||||||
@@ -2046,7 +2046,7 @@ public class AbilityUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sq[0].contains("CardNumColors")) {
|
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")) {
|
if (sq[0].contains("CardNumAttacksThisTurn")) {
|
||||||
return doXMath(c.getDamageHistory().getCreatureAttacksThisTurn(), expr, c, ctb);
|
return doXMath(c.getDamageHistory().getCreatureAttacksThisTurn(), expr, c, ctb);
|
||||||
@@ -3766,7 +3766,7 @@ public class AbilityUtils {
|
|||||||
someCards = CardLists.filter(someCards, new Predicate<Card>() {
|
someCards = CardLists.filter(someCards, new Predicate<Card>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(final Card c) {
|
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>() {
|
someCards = CardLists.filter(someCards, new Predicate<Card>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(final Card c) {
|
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.ability.SpellAbilityEffect;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.card.CardFactory;
|
import forge.game.card.CardFactory;
|
||||||
import forge.game.card.CardUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
@@ -35,7 +34,7 @@ public class PlayLandVariantEffect extends SpellAbilityEffect {
|
|||||||
cards = Lists.newArrayList(Iterables.filter(cards, cpp));
|
cards = Lists.newArrayList(Iterables.filter(cards, cpp));
|
||||||
}
|
}
|
||||||
// current color of source card
|
// current color of source card
|
||||||
final ColorSet color = CardUtil.getColors(source);
|
final ColorSet color = source.determineColor();
|
||||||
if (color.isColorless()) {
|
if (color.isColorless()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import forge.game.ability.SpellAbilityEffect;
|
|||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.card.CardCollectionView;
|
import forge.game.card.CardCollectionView;
|
||||||
import forge.game.card.CardLists;
|
import forge.game.card.CardLists;
|
||||||
import forge.game.card.CardUtil;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
@@ -65,7 +64,7 @@ public class ProtectAllEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
} else if (sa.getParam("Gains").equals("TargetedCardColor")) {
|
} else if (sa.getParam("Gains").equals("TargetedCardColor")) {
|
||||||
for (final Card c : sa.getSATargetingCard().getTargets().getTargetCards()) {
|
for (final Card c : sa.getSATargetingCard().getTargets().getTargetCards()) {
|
||||||
ColorSet cs = CardUtil.getColors(c);
|
ColorSet cs = c.determineColor();
|
||||||
for (byte col : MagicColor.WUBRG) {
|
for (byte col : MagicColor.WUBRG) {
|
||||||
if (cs.hasAnyColor(col))
|
if (cs.hasAnyColor(col))
|
||||||
gains.add(MagicColor.toLongString(col).toLowerCase());
|
gains.add(MagicColor.toLongString(col).toLowerCase());
|
||||||
|
|||||||
@@ -4937,17 +4937,13 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
|||||||
view.updateEmblem(this);
|
view.updateEmblem(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
public final boolean isOfColor(final String col) { return determineColor().hasAnyColor(MagicColor.fromName(col)); }
|
||||||
* there are easy checkers for Color. The CardUtil functions should be made
|
public final boolean isBlack() { return determineColor().hasBlack(); }
|
||||||
* part of the Card class, so calling out is not necessary
|
public final boolean isBlue() { return determineColor().hasBlue(); }
|
||||||
*/
|
public final boolean isRed() { return determineColor().hasRed(); }
|
||||||
public final boolean isOfColor(final String col) { return CardUtil.getColors(this).hasAnyColor(MagicColor.fromName(col)); }
|
public final boolean isGreen() { return determineColor().hasGreen(); }
|
||||||
public final boolean isBlack() { return CardUtil.getColors(this).hasBlack(); }
|
public final boolean isWhite() { return determineColor().hasWhite(); }
|
||||||
public final boolean isBlue() { return CardUtil.getColors(this).hasBlue(); }
|
public final boolean isColorless() { return determineColor().isColorless(); }
|
||||||
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 sharesNameWith(final Card c1) {
|
public final boolean sharesNameWith(final Card c1) {
|
||||||
// in a corner case where c1 is null, there is no name to share with.
|
// 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.setCommander(in.isRealCommander());
|
||||||
//out.setFaceDown(in.isFaceDown());
|
//out.setFaceDown(in.isFaceDown());
|
||||||
|
|
||||||
|
int foil = in.getCurrentState().getFoil();
|
||||||
|
if (foil > 0) {
|
||||||
|
out.setFoil(foil);
|
||||||
|
}
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -338,7 +338,7 @@ public class CardFactoryUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (final Card crd : list) {
|
for (final Card crd : list) {
|
||||||
ColorSet color = CardUtil.getColors(crd);
|
ColorSet color = crd.determineColor();
|
||||||
for (int i = 0; i < cntColors; i++) {
|
for (int i = 0; i < cntColors; i++) {
|
||||||
if (color.hasAnyColor(MagicColor.WUBRG[i]))
|
if (color.hasAnyColor(MagicColor.WUBRG[i]))
|
||||||
map[i]++;
|
map[i]++;
|
||||||
@@ -376,7 +376,7 @@ public class CardFactoryUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (final Card crd : list) {
|
for (final Card crd : list) {
|
||||||
ColorSet color = CardUtil.getColors(crd);
|
ColorSet color = crd.determineColor();
|
||||||
for (int i = 0; i < cntColors; i++) {
|
for (int i = 0; i < cntColors; i++) {
|
||||||
if (color.hasAnyColor(MagicColor.WUBRG[i]))
|
if (color.hasAnyColor(MagicColor.WUBRG[i]))
|
||||||
map[i]++;
|
map[i]++;
|
||||||
@@ -407,7 +407,7 @@ public class CardFactoryUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (final Card crd : list) {
|
for (final Card crd : list) {
|
||||||
ColorSet color = CardUtil.getColors(crd);
|
ColorSet color = crd.determineColor();
|
||||||
for (int i = 0; i < cntColors; i++) {
|
for (int i = 0; i < cntColors; i++) {
|
||||||
if (color.hasAnyColor(colorRestrictions.get(i))) {
|
if (color.hasAnyColor(colorRestrictions.get(i))) {
|
||||||
map[i]++;
|
map[i]++;
|
||||||
|
|||||||
@@ -264,7 +264,7 @@ public final class CardPredicates {
|
|||||||
return new Predicate<Card>() {
|
return new Predicate<Card>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(final Card c) {
|
public boolean apply(final Card c) {
|
||||||
return CardUtil.getColors(c).hasAnyColor(color);
|
return c.determineColor().hasAnyColor(color);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} // getColor()
|
} // getColor()
|
||||||
@@ -273,7 +273,7 @@ public final class CardPredicates {
|
|||||||
return new Predicate<Card>() {
|
return new Predicate<Card>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(final Card c) {
|
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>() {
|
return new Predicate<Card>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(final Card c) {
|
public boolean apply(final Card c) {
|
||||||
return CardUtil.getColors(c).isColorless();
|
return c.determineColor().isColorless();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -689,7 +689,7 @@ public class CardProperty {
|
|||||||
break;
|
break;
|
||||||
case "MostProminentColor":
|
case "MostProminentColor":
|
||||||
byte mask = CardFactoryUtil.getMostProminentColors(game.getCardsIn(ZoneType.Battlefield));
|
byte mask = CardFactoryUtil.getMostProminentColors(game.getCardsIn(ZoneType.Battlefield));
|
||||||
if (!CardUtil.getColors(card).hasAnyColor(mask))
|
if (!card.determineColor().hasAnyColor(mask))
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
case "LastCastThisTurn":
|
case "LastCastThisTurn":
|
||||||
@@ -703,7 +703,7 @@ public class CardProperty {
|
|||||||
if (castSA == null) {
|
if (castSA == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!CardUtil.getColors(card).hasAnyColor(castSA.getPayingColors().getColor())) {
|
if (!card.determineColor().hasAnyColor(castSA.getPayingColors().getColor())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -85,10 +85,6 @@ public final class CardUtil {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ColorSet getColors(final Card c) {
|
|
||||||
return c.determineColor();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isStackingKeyword(final String keyword) {
|
public static boolean isStackingKeyword(final String keyword) {
|
||||||
String kw = keyword;
|
String kw = keyword;
|
||||||
if (kw.startsWith("HIDDEN")) {
|
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) {
|
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);
|
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) {
|
public static List<Card> getLKICopyList(final Iterable<Card> in, Map<Integer, Card> cachedMap) {
|
||||||
@@ -343,7 +338,7 @@ public final class CardUtil {
|
|||||||
|
|
||||||
byte combinedColor = 0;
|
byte combinedColor = 0;
|
||||||
for (Card tgt : tgts) {
|
for (Card tgt : tgts) {
|
||||||
ColorSet cs = CardUtil.getColors(tgt);
|
ColorSet cs = tgt.determineColor();
|
||||||
for (byte color : MagicColor.WUBRG) {
|
for (byte color : MagicColor.WUBRG) {
|
||||||
if(!cs.hasAnyColor(color))
|
if(!cs.hasAnyColor(color))
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ public class TokenInfo {
|
|||||||
if (!colorMap.isEmpty()) {
|
if (!colorMap.isEmpty()) {
|
||||||
if (!result.isColorless()) {
|
if (!result.isColorless()) {
|
||||||
// change Token Colors
|
// change Token Colors
|
||||||
byte color = CardUtil.getColors(result).getColor();
|
byte color = result.determineColor().getColor();
|
||||||
|
|
||||||
for (final Map.Entry<String, String> e : colorMap.entrySet()) {
|
for (final Map.Entry<String, String> e : colorMap.entrySet()) {
|
||||||
byte v = MagicColor.fromName(e.getValue());
|
byte v = MagicColor.fromName(e.getValue());
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ import forge.game.GameObjectPredicates;
|
|||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.card.CardUtil;
|
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
@@ -300,9 +299,9 @@ public class SpellAbilityCondition extends SpellAbilityVariables {
|
|||||||
if (first == null) {
|
if (first == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
byte firstColor = CardUtil.getColors(first).getColor();
|
byte firstColor = first.determineColor().getColor();
|
||||||
for (Card c : tgts) {
|
for (Card c : tgts) {
|
||||||
if (CardUtil.getColors(c).getColor() != firstColor) {
|
if (c.determineColor().getColor() != firstColor) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ public class IntegerConstraint {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
if( min == max ) {
|
if (min == max) {
|
||||||
return String.valueOf( min );
|
return String.valueOf( min );
|
||||||
}
|
}
|
||||||
return "between " + min + " and " + max;
|
return "between " + min + " and " + max;
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import forge.card.mana.ManaCost;
|
|||||||
import forge.card.mana.ManaCostShard;
|
import forge.card.mana.ManaCostShard;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.card.CardCollectionView;
|
import forge.game.card.CardCollectionView;
|
||||||
import forge.game.card.CardUtil;
|
|
||||||
import forge.game.mana.ManaCostBeingPaid;
|
import forge.game.mana.ManaCostBeingPaid;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
@@ -74,7 +73,7 @@ public final class InputSelectCardsForConvokeOrImprovise extends InputSelectMany
|
|||||||
if (improvise) {
|
if (improvise) {
|
||||||
chosenColor = ManaCostShard.COLORLESS.getColorMask();
|
chosenColor = ManaCostShard.COLORLESS.getColorMask();
|
||||||
} else {
|
} else {
|
||||||
ColorSet colors = CardUtil.getColors(card);
|
ColorSet colors = card.determineColor();
|
||||||
if (colors.isMulticolor()) {
|
if (colors.isMulticolor()) {
|
||||||
//if card is multicolor, strip out any colors which can't be paid towards remaining cost
|
//if card is multicolor, strip out any colors which can't be paid towards remaining cost
|
||||||
colors = ColorSet.fromMask(colors.getColor() & remainingCost.getUnpaidColors());
|
colors = ColorSet.fromMask(colors.getColor() & remainingCost.getUnpaidColors());
|
||||||
|
|||||||
@@ -30,8 +30,7 @@ public class FThreads {
|
|||||||
public static void invokeInEdtNowOrLater(final Runnable proc) {
|
public static void invokeInEdtNowOrLater(final Runnable proc) {
|
||||||
if (isGuiThread()) {
|
if (isGuiThread()) {
|
||||||
GuiBase.getInterface().invokeInEdtNow(proc);
|
GuiBase.getInterface().invokeInEdtNow(proc);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
GuiBase.getInterface().invokeInEdtLater(proc);
|
GuiBase.getInterface().invokeInEdtLater(proc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user