diff --git a/Mage/src/main/java/mage/MageObject.java b/Mage/src/main/java/mage/MageObject.java index db9ed97dee6..a0d9c5bc0ce 100644 --- a/Mage/src/main/java/mage/MageObject.java +++ b/Mage/src/main/java/mage/MageObject.java @@ -7,6 +7,7 @@ import mage.abilities.Abilities; import mage.abilities.Ability; import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCosts; +import mage.cards.FrameStyle; import mage.constants.CardType; import mage.game.Game; @@ -37,6 +38,8 @@ public interface MageObject extends MageItem, Serializable { ObjectColor getColor(Game game); ObjectColor getFrameColor(Game game); + + FrameStyle getFrameStyle(); ManaCosts getManaCost(); diff --git a/Mage/src/main/java/mage/MageObjectImpl.java b/Mage/src/main/java/mage/MageObjectImpl.java index 80b3d7fd8d2..daea728b079 100644 --- a/Mage/src/main/java/mage/MageObjectImpl.java +++ b/Mage/src/main/java/mage/MageObjectImpl.java @@ -39,6 +39,7 @@ import mage.abilities.costs.mana.ManaCosts; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.keyword.ChangelingAbility; import mage.abilities.mana.ManaAbility; +import mage.cards.FrameStyle; import mage.constants.CardType; import mage.game.Game; import mage.util.CardUtil; @@ -52,6 +53,7 @@ public abstract class MageObjectImpl implements MageObject { protected ManaCosts manaCost; protected ObjectColor color; protected ObjectColor frameColor; + protected FrameStyle frameStyle; protected List cardType = new ArrayList<>(); protected List subtype = new ArrayList<>(); protected List supertype = new ArrayList<>(); @@ -71,6 +73,7 @@ public abstract class MageObjectImpl implements MageObject { toughness = new MageInt(0); color = new ObjectColor(); frameColor = new ObjectColor(); + frameStyle = FrameStyle.M15_NORMAL; manaCost = new ManaCostsImpl<>(""); abilities = new AbilitiesImpl<>(); } @@ -82,6 +85,7 @@ public abstract class MageObjectImpl implements MageObject { text = object.text; color = object.color.copy(); frameColor = object.frameColor.copy(); + frameStyle = object.frameStyle; power = object.power.copy(); toughness = object.toughness.copy(); abilities = object.abilities.copy(); @@ -221,6 +225,11 @@ public abstract class MageObjectImpl implements MageObject { } } + @Override + public FrameStyle getFrameStyle() { + return frameStyle; + } + @Override public ManaCosts getManaCost() { return manaCost; diff --git a/Mage/src/main/java/mage/cards/FrameStyle.java b/Mage/src/main/java/mage/cards/FrameStyle.java new file mode 100644 index 00000000000..4a8c4f4962b --- /dev/null +++ b/Mage/src/main/java/mage/cards/FrameStyle.java @@ -0,0 +1,58 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.cards; + +/** + * + * @author StravantUser + */ +public enum FrameStyle { + /** + * The default card frame, normal M15 card frames + */ + M15_NORMAL(BorderType.M15, false), + + /** + * Battle for Zendkiar full art basic lands + */ + BFZ_FULL_ART_BASIC(BorderType.M15, true); + + /** + * General type of card + */ + public enum BorderType { + /** + * Old border cards + */ + OLD, + + /** + * Modern border cards (8th -> Theros) + */ + MOD, + + /** + * M15 border cards (M14 -> current) + */ + M15 + } + + private BorderType borderType; + private boolean isFullArt; + + public BorderType getBorderType() { + return borderType; + } + + public boolean isFullArt() { + return isFullArt; + } + + FrameStyle(BorderType borderType, boolean isFullArt) { + this.borderType = borderType; + this.isFullArt = isFullArt; + } +} diff --git a/Mage/src/main/java/mage/cards/mock/MockCard.java b/Mage/src/main/java/mage/cards/mock/MockCard.java index 7a0d375d972..593a6fb5387 100644 --- a/Mage/src/main/java/mage/cards/mock/MockCard.java +++ b/Mage/src/main/java/mage/cards/mock/MockCard.java @@ -30,6 +30,7 @@ public class MockCard extends CardImpl { this.subtype = card.getSubTypes(); this.supertype = card.getSupertypes(); + this.usesVariousArt = card.usesVariousArt(); this.manaCost = new ManaCostsImpl(join(card.getManaCosts())); @@ -37,6 +38,7 @@ public class MockCard extends CardImpl { this.color = card.getColor(); this.frameColor = card.getFrameColor(); + this.frameStyle = card.getFrameStyle(); this.splitCard = card.isSplitCard(); this.flipCard = card.isFlipCard(); diff --git a/Mage/src/main/java/mage/cards/repository/CardInfo.java b/Mage/src/main/java/mage/cards/repository/CardInfo.java index a9ead5ffcc9..cf6f5423282 100644 --- a/Mage/src/main/java/mage/cards/repository/CardInfo.java +++ b/Mage/src/main/java/mage/cards/repository/CardInfo.java @@ -36,6 +36,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import mage.cards.FrameStyle; import mage.constants.CardType; import mage.constants.Rarity; import mage.ObjectColor; @@ -100,6 +101,8 @@ public class CardInfo { @DatabaseField protected String frameColor; @DatabaseField + protected String frameStyle; + @DatabaseField protected boolean splitCard; @DatabaseField protected boolean splitCardHalf; @@ -138,6 +141,7 @@ public class CardInfo { this.secondSideName = secondSide.getName(); } + this.frameStyle = card.getFrameStyle().toString(); this.frameColor = card.getFrameColor(null).toString(); this.blue = card.getColor(null).isBlue(); this.black = card.getColor(null).isBlack(); @@ -227,6 +231,10 @@ public class CardInfo { return new ObjectColor(frameColor); } + public FrameStyle getFrameStyle() { + return FrameStyle.valueOf(this.frameStyle); + } + private String joinList(List items) { StringBuilder sb = new StringBuilder(); for (Object item : items) { diff --git a/Mage/src/main/java/mage/cards/repository/CardRepository.java b/Mage/src/main/java/mage/cards/repository/CardRepository.java index 278d9ea027c..855323a3d5d 100644 --- a/Mage/src/main/java/mage/cards/repository/CardRepository.java +++ b/Mage/src/main/java/mage/cards/repository/CardRepository.java @@ -62,16 +62,16 @@ public enum CardRepository { private static final String JDBC_URL = "jdbc:h2:file:./db/cards.h2;AUTO_SERVER=TRUE"; private static final String VERSION_ENTITY_NAME = "card"; // raise this if db structure was changed - private static final long CARD_DB_VERSION = 46; + private static final long CARD_DB_VERSION = 47; // raise this if new cards were added to the server - private static final long CARD_CONTENT_VERSION = 57; + private static final long CARD_CONTENT_VERSION = 58; private Dao cardDao; private Set classNames; private final TreeSet landTypes = new TreeSet(); - private CardRepository() { + CardRepository() { File file = new File("db"); if (!file.exists()) { file.mkdirs(); diff --git a/Mage/src/main/java/mage/game/command/Commander.java b/Mage/src/main/java/mage/game/command/Commander.java index 2805caeb80c..3831292c623 100644 --- a/Mage/src/main/java/mage/game/command/Commander.java +++ b/Mage/src/main/java/mage/game/command/Commander.java @@ -39,6 +39,7 @@ import mage.abilities.common.CastCommanderAbility; import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCosts; import mage.cards.Card; +import mage.cards.FrameStyle; import mage.constants.CardType; import mage.game.Game; import mage.util.GameLog; @@ -150,6 +151,11 @@ public class Commander implements CommandObject { return card.getFrameColor(game); } + @Override + public FrameStyle getFrameStyle() { + return card.getFrameStyle(); + } + @Override public ManaCosts getManaCost() { return card.getManaCost(); diff --git a/Mage/src/main/java/mage/game/command/Emblem.java b/Mage/src/main/java/mage/game/command/Emblem.java index 6f9f10a864b..eb9acc3b3a0 100644 --- a/Mage/src/main/java/mage/game/command/Emblem.java +++ b/Mage/src/main/java/mage/game/command/Emblem.java @@ -38,6 +38,7 @@ import mage.abilities.Ability; import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCosts; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.cards.FrameStyle; import mage.constants.CardType; import mage.game.Game; import mage.util.GameLog; @@ -55,6 +56,7 @@ public class Emblem implements CommandObject { private UUID id; private UUID controllerId; private UUID sourceId; + private FrameStyle frameStyle; private Abilities abilites = new AbilitiesImpl<>(); private String expansionSetCodeForImage = null; @@ -65,11 +67,17 @@ public class Emblem implements CommandObject { public Emblem(final Emblem emblem) { this.id = emblem.id; this.name = emblem.name; + this.frameStyle = emblem.frameStyle; this.controllerId = emblem.controllerId; this.sourceId = emblem.sourceId; this.abilites = emblem.abilites.copy(); } + @Override + public FrameStyle getFrameStyle() { + return frameStyle; + } + @Override public void assignNewId() { this.id = UUID.randomUUID(); diff --git a/Mage/src/main/java/mage/game/permanent/PermanentCard.java b/Mage/src/main/java/mage/game/permanent/PermanentCard.java index bb583cd2921..23eb2800a76 100644 --- a/Mage/src/main/java/mage/game/permanent/PermanentCard.java +++ b/Mage/src/main/java/mage/game/permanent/PermanentCard.java @@ -119,6 +119,7 @@ public class PermanentCard extends PermanentImpl { this.cardType.addAll(card.getCardType()); this.color = card.getColor(null).copy(); this.frameColor = card.getFrameColor(null).copy(); + this.frameStyle = card.getFrameStyle(); this.manaCost = card.getManaCost().copy(); if (card instanceof PermanentCard) { this.maxLevelCounters = ((PermanentCard) card).maxLevelCounters; diff --git a/Mage/src/main/java/mage/game/permanent/PermanentToken.java b/Mage/src/main/java/mage/game/permanent/PermanentToken.java index e95fc3c0ca6..7c730b61fab 100644 --- a/Mage/src/main/java/mage/game/permanent/PermanentToken.java +++ b/Mage/src/main/java/mage/game/permanent/PermanentToken.java @@ -83,6 +83,7 @@ public class PermanentToken extends PermanentImpl { this.cardType = token.getCardType(); this.color = token.getColor(game).copy(); this.frameColor = token.getFrameColor(game); + this.frameStyle = token.getFrameStyle(); this.power.modifyBaseValue(token.getPower().getBaseValueModified()); this.toughness.modifyBaseValue(token.getToughness().getBaseValueModified()); this.supertype = token.getSupertype(); diff --git a/Mage/src/main/java/mage/game/stack/Spell.java b/Mage/src/main/java/mage/game/stack/Spell.java index 85e4b2bb860..7d3d7db703b 100644 --- a/Mage/src/main/java/mage/game/stack/Spell.java +++ b/Mage/src/main/java/mage/game/stack/Spell.java @@ -46,6 +46,7 @@ import mage.abilities.keyword.BestowAbility; import mage.abilities.keyword.MorphAbility; import mage.cards.Card; import mage.cards.CardsImpl; +import mage.cards.FrameStyle; import mage.cards.SplitCard; import mage.constants.CardType; import mage.constants.Outcome; @@ -77,6 +78,7 @@ public class Spell extends StackObjImpl implements Card { private final Card card; private final ObjectColor color; private final ObjectColor frameColor; + private final FrameStyle frameStyle; private final SpellAbility ability; private final Zone fromZone; private final UUID id; @@ -90,6 +92,7 @@ public class Spell extends StackObjImpl implements Card { this.card = card; this.color = card.getColor(null).copy(); this.frameColor = card.getFrameColor(null).copy(); + this.frameStyle = card.getFrameStyle(); id = ability.getId(); this.ability = ability; this.ability.setControllerId(controllerId); @@ -131,6 +134,7 @@ public class Spell extends StackObjImpl implements Card { this.faceDown = spell.faceDown; this.color = spell.color.copy(); this.frameColor = spell.color.copy(); + this.frameStyle = spell.frameStyle; } public boolean activate(Game game, boolean noMana) { @@ -492,6 +496,11 @@ public class Spell extends StackObjImpl implements Card { return frameColor; } + @Override + public FrameStyle getFrameStyle() { + return frameStyle; + } + @Override public ManaCosts getManaCost() { return card.getManaCost(); diff --git a/Mage/src/main/java/mage/game/stack/StackAbility.java b/Mage/src/main/java/mage/game/stack/StackAbility.java index 824787d22a9..17e4bb29106 100644 --- a/Mage/src/main/java/mage/game/stack/StackAbility.java +++ b/Mage/src/main/java/mage/game/stack/StackAbility.java @@ -49,6 +49,7 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.Effects; import mage.cards.Card; +import mage.cards.FrameStyle; import mage.constants.AbilityType; import mage.constants.AbilityWord; import mage.constants.CardType; @@ -198,6 +199,12 @@ public class StackAbility extends StackObjImpl implements Ability { return ability.getSourceObject(game).getFrameColor(game); } + @Override + public FrameStyle getFrameStyle() { + // Abilities all use the same frame + return FrameStyle.M15_NORMAL; + } + @Override public ManaCosts getManaCost() { return emptyCost;