Remove use of card classes for duplicate cards. Remove set related information from being tied to card classes.

This commit is contained in:
JOAC69 2016-09-01 23:33:59 -05:00
parent 3c2189e7a1
commit e8230946af
32 changed files with 356 additions and 155 deletions

View file

@ -0,0 +1,31 @@
package mage.abilities.effects.common.combat;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.constants.Outcome;
import mage.constants.TurnPhase;
import mage.game.Game;
import mage.game.turn.TurnMod;
class AdditionalCombatPhaseEffect extends OneShotEffect {
public AdditionalCombatPhaseEffect() {
super(Outcome.Benefit);
staticText = "After this phase, there is an additional combat phase";
}
public AdditionalCombatPhaseEffect(final AdditionalCombatPhaseEffect effect) {
super(effect);
}
@Override
public AdditionalCombatPhaseEffect copy() {
return new AdditionalCombatPhaseEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
game.getState().getTurnMods().add(new TurnMod(source.getControllerId(), TurnPhase.COMBAT, null, false));
return true;
}
}

View file

@ -0,0 +1,25 @@
package mage.cards;
import mage.ObjectColor;
public final class CardGraphicInfo {
private final ObjectColor frameColor;
private final FrameStyle frameStyle;
private final boolean useVariousArt;
public CardGraphicInfo(FrameStyle frameStyle, boolean useVariousArt) {
this(null, frameStyle, useVariousArt);
}
public CardGraphicInfo(ObjectColor frameColor, FrameStyle frameStyle, boolean useVariousArt) {
this.frameColor = frameColor;
this.frameStyle = frameStyle;
this.useVariousArt = useVariousArt;
}
public ObjectColor getFrameColor() { return this.frameColor != null ? this.frameColor.copy() : null; }
public FrameStyle getFrameStyle() { return this.frameStyle; }
public boolean getUsesVariousArt() { return this.useVariousArt; }
}

View file

@ -72,6 +72,7 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
protected String tokenDescriptor;
protected Rarity rarity;
protected boolean transformable;
protected Class<?> secondSideCardClazz;
protected Card secondSideCard;
protected boolean nightCard;
protected SpellAbility spellAbility;
@ -81,18 +82,15 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
protected boolean splitCard;
protected boolean morphCard;
public CardImpl(UUID ownerId, int cardNumber, String name, Rarity rarity, CardType[] cardTypes, String costs) {
this(ownerId, String.valueOf(cardNumber), name, rarity, cardTypes, costs, SpellAbilityType.BASE);
public CardImpl(UUID ownerId, CardSetInfo setInfo, CardType[] cardTypes, String costs) {
this(ownerId, setInfo, cardTypes, costs, SpellAbilityType.BASE);
}
public CardImpl(UUID ownerId, String cardNumber, String name, Rarity rarity, CardType[] cardTypes, String costs) {
this(ownerId, cardNumber, name, rarity, cardTypes, costs, SpellAbilityType.BASE);
}
public CardImpl(UUID ownerId, String cardNumber, String name, Rarity rarity, CardType[] cardTypes, String costs, SpellAbilityType spellAbilityType) {
this(ownerId, name);
this.rarity = rarity;
this.cardNumber = cardNumber;
public CardImpl(UUID ownerId, CardSetInfo setInfo, CardType[] cardTypes, String costs, SpellAbilityType spellAbilityType) {
this(ownerId, setInfo.getName());
this.rarity = setInfo.getRarity();
this.cardNumber = setInfo.getCardNumber();
this.expansionSetCode = setInfo.getExpansionSetCode();
this.cardType.addAll(Arrays.asList(cardTypes));
this.manaCost.load(costs);
setDefaultColor();
@ -108,7 +106,18 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
ability.setSourceId(this.getId());
abilities.add(ability);
}
this.usesVariousArt = Character.isDigit(this.getClass().getName().charAt(this.getClass().getName().length() - 1));
CardGraphicInfo graphicInfo = setInfo.getGraphicInfo();
if (graphicInfo != null) {
this.usesVariousArt = graphicInfo.getUsesVariousArt();
if (graphicInfo.getFrameColor() != null) {
this.frameColor = graphicInfo.getFrameColor().copy();
}
if (graphicInfo.getFrameStyle() != null) {
this.frameStyle = graphicInfo.getFrameStyle();
}
}
this.morphCard = false;
}
@ -141,7 +150,7 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
transformable = card.transformable;
if (transformable) {
secondSideCard = card.secondSideCard;
secondSideCardClazz = card.secondSideCardClazz;
nightCard = card.nightCard;
}
flipCard = card.flipCard;
@ -157,12 +166,12 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
this.abilities.setSourceId(objectId);
}
public static Card createCard(String name) {
public static Card createCard(String name, CardSetInfo setInfo) {
try {
return createCard(Class.forName(name));
return createCard(Class.forName(name), setInfo);
} catch (ClassNotFoundException ex) {
try {
return createCard(PluginClassloaderRegistery.forName(name));
return createCard(PluginClassloaderRegistery.forName(name), setInfo);
} catch (ClassNotFoundException ex2) {
// ignored
}
@ -171,10 +180,17 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
}
}
public static Card createCard(Class<?> clazz) {
public static Card createCard(Class<?> clazz, CardSetInfo setInfo) {
try {
Constructor<?> con = clazz.getConstructor(new Class[]{UUID.class});
Card card = (Card) con.newInstance(new Object[]{null});
Card card;
if (setInfo == null) {
Constructor<?> con = clazz.getConstructor(UUID.class);
card = (Card) con.newInstance(new Object[]{null});
}
else {
Constructor<?> con = clazz.getConstructor(UUID.class, CardSetInfo.class);
card = (Card) con.newInstance(null, setInfo);
}
card.build();
return card;
} catch (Exception e) {
@ -542,8 +558,24 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
}
@Override
public Card getSecondCardFace() {
return this.secondSideCard;
public final Card getSecondCardFace() {
if (secondSideCardClazz == null) {
return null;
}
if (secondSideCard != null) {
return secondSideCard;
}
List<ExpansionSet.SetCardInfo> cardInfo = Sets.findSet(expansionSetCode).findCardInfoByClass(secondSideCardClazz);
assert cardInfo.size() == 1; // should find 1 second side card
if (cardInfo.isEmpty()) {
return null;
}
ExpansionSet.SetCardInfo info = cardInfo.get(0);
return secondSideCard = createCard(secondSideCardClazz,
new CardSetInfo(info.getName(), expansionSetCode, info.getCardNumber(), info.getRarity(), info.getGraphicInfo()));
}
@Override

View file

@ -0,0 +1,35 @@
package mage.cards;
import mage.constants.Rarity;
import java.io.Serializable;
public final class CardSetInfo implements Serializable {
private final String name;
private final String cardNumber;
private final String expansionSetCode;
private final Rarity rarity;
private final CardGraphicInfo graphicInfo;
public CardSetInfo(String name, String expansionSetCode, String cardNumber, Rarity rarity) {
this(name, expansionSetCode, cardNumber, rarity, null);
}
public CardSetInfo(String name, String expansionSetCode, String cardNumber, Rarity rarity, CardGraphicInfo graphicInfo) {
this.name = name;
this.expansionSetCode = expansionSetCode;
this.cardNumber = cardNumber;
this.rarity = rarity;
this.graphicInfo = graphicInfo;
}
public String getName() { return this.name; }
public String getExpansionSetCode() { return this.expansionSetCode; }
public String getCardNumber() { return this.cardNumber; }
public Rarity getRarity() { return this.rarity; }
public CardGraphicInfo getGraphicInfo() { return this.graphicInfo; }
}

View file

@ -33,6 +33,8 @@ import java.util.Date;
import java.util.EnumMap;
import java.util.Iterator;
import java.util.List;
import mage.ObjectColor;
import mage.cards.repository.CardCriteria;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
@ -44,6 +46,49 @@ import mage.util.RandomUtil;
* @author BetaSteward_at_googlemail.com
*/
public abstract class ExpansionSet implements Serializable {
public class SetCardInfo implements Serializable {
private final String name;
private final String cardNumber;
private final Rarity rarity;
private final Class<?> cardClass;
private final boolean usesVariousArt;
private final CardGraphicInfo graphicInfo;
public SetCardInfo(String name, int cardNumber, Rarity rarity, Class<?> cardClass) {
this(name, String.valueOf(cardNumber), rarity, cardClass, null);
}
public SetCardInfo(String name, String cardNumber, Rarity rarity, Class<?> cardClass) {
this(name, cardNumber, rarity, cardClass, null);
}
public SetCardInfo(String name, int cardNumber, Rarity rarity, Class<?> cardClass, CardGraphicInfo graphicInfo) {
this(name, String.valueOf(cardNumber), rarity, cardClass, graphicInfo);
}
public SetCardInfo(String name, String cardNumber, Rarity rarity, Class<?> cardClass, CardGraphicInfo graphicInfo) {
this.name = name;
this.cardNumber = cardNumber;
this.rarity = rarity;
this.cardClass = cardClass;
this.usesVariousArt = false;
this.graphicInfo = graphicInfo;
}
public String getName() { return this.name; }
public String getCardNumber() { return this.cardNumber; }
public Rarity getRarity() { return this.rarity; }
public Class<?> getCardClass() { return this.cardClass; }
public boolean getUsesVariousArt() { return this.usesVariousArt; }
public CardGraphicInfo getGraphicInfo() { return this.graphicInfo; }
}
protected final List<SetCardInfo> cards = new ArrayList<>();
protected String name;
protected String code;
@ -108,11 +153,23 @@ public abstract class ExpansionSet implements Serializable {
return blockName;
}
public List<SetCardInfo> getSetCardInfo() { return cards; }
@Override
public String toString() {
return name;
}
public List<SetCardInfo> findCardInfoByClass(Class<?> clazz) {
ArrayList<SetCardInfo> result = new ArrayList<>();
for (SetCardInfo info : cards) {
if (info.getCardClass().equals(clazz)) {
result.add(info);
}
}
return result;
}
public List<Card> create15CardBooster() {
// Forces 15 card booster packs.
// if the packs are too small, it adds commons to fill it out.

View file

@ -40,8 +40,8 @@ public abstract class LevelerCard extends CardImpl {
private int maxLevelCounters;
public LevelerCard(UUID ownerId, int cardNumber, String name, Rarity rarity, CardType[] cardTypes, String costs) {
super(ownerId, cardNumber, name, rarity, cardTypes, costs);
public LevelerCard(UUID ownerId, CardSetInfo setInfo, CardType[] cardTypes, String costs) {
super(ownerId, setInfo, cardTypes, costs);
}
public LevelerCard(LevelerCard card) {

View file

@ -50,8 +50,8 @@ public abstract class MeldCard extends CardImpl {
protected boolean isMelded;
protected Cards halves;
public MeldCard(UUID ownerId, int cardNumber, String name, Rarity rarity, CardType[] cardTypes, String costs) {
super(ownerId, cardNumber, name, rarity, cardTypes, costs);
public MeldCard(UUID ownerId, CardSetInfo setInfo, CardType[] cardTypes, String costs) {
super(ownerId, setInfo, cardTypes, costs);
halves = new CardsImpl();
}

View file

@ -27,9 +27,6 @@
*/
package mage.cards;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.*;
import mage.cards.decks.DeckCardInfo;
import mage.cards.decks.DeckCardLayout;
import mage.cards.decks.DeckCardLists;
@ -42,6 +39,10 @@ import mage.util.ClassScanner;
import mage.util.RandomUtil;
import org.apache.log4j.Logger;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.*;
/**
*
* @author BetaSteward_at_googlemail.com

View file

@ -49,14 +49,11 @@ public abstract class SplitCard extends CardImpl {
protected Card leftHalfCard;
protected Card rightHalfCard;
public SplitCard(UUID ownerId, int cardNumber, String nameLeft, String nameRight, Rarity rarity, CardType[] cardTypes, String costsLeft, String costsRight, boolean fused) {
this(ownerId, String.valueOf(cardNumber), nameLeft, nameRight, rarity, cardTypes, costsLeft, costsRight, fused);
}
public SplitCard(UUID ownerId, String cardNumber, String nameLeft, String nameRight, Rarity rarity, CardType[] cardTypes, String costsLeft, String costsRight, boolean fused) {
super(ownerId, cardNumber, new StringBuilder(nameLeft).append(" // ").append(nameRight).toString(), rarity, cardTypes, costsLeft + costsRight, (fused ? SpellAbilityType.SPLIT_FUSED : SpellAbilityType.SPLIT));
leftHalfCard = new SplitCardHalfImpl(this.getOwnerId(), this.getCardNumber(), nameLeft, this.rarity, cardTypes, costsLeft, this, SpellAbilityType.SPLIT_LEFT);
rightHalfCard = new SplitCardHalfImpl(this.getOwnerId(), this.getCardNumber(), nameRight, this.rarity, cardTypes, costsRight, this, SpellAbilityType.SPLIT_RIGHT);
public SplitCard(UUID ownerId, CardSetInfo setInfo, CardType[] cardTypes, String costsLeft, String costsRight, boolean fused) {
super(ownerId, setInfo, cardTypes, costsLeft + costsRight, (fused ? SpellAbilityType.SPLIT_FUSED : SpellAbilityType.SPLIT));
String[] names = setInfo.getName().split(" // ");
leftHalfCard = new SplitCardHalfImpl(this.getOwnerId(), new CardSetInfo(names[0], setInfo.getExpansionSetCode(), setInfo.getCardNumber(), setInfo.getRarity(), setInfo.getGraphicInfo()), cardTypes, costsLeft, this, SpellAbilityType.SPLIT_LEFT);
rightHalfCard = new SplitCardHalfImpl(this.getOwnerId(), new CardSetInfo(names[1], setInfo.getExpansionSetCode(), setInfo.getCardNumber(), setInfo.getRarity(), setInfo.getGraphicInfo()), cardTypes, costsRight, this, SpellAbilityType.SPLIT_RIGHT);
this.splitCard = true;
}

View file

@ -21,8 +21,8 @@ public class SplitCardHalfImpl extends CardImpl implements SplitCardHalf {
SplitCard splitCardParent;
public SplitCardHalfImpl(UUID ownerId, String cardNumber, String name, Rarity rarity, CardType[] cardTypes, String costs, SplitCard splitCardParent, SpellAbilityType spellAbilityType) {
super(ownerId, cardNumber, name, rarity, cardTypes, costs, spellAbilityType);
public SplitCardHalfImpl(UUID ownerId, CardSetInfo setInfo, CardType[] cardTypes, String costs, SplitCard splitCardParent, SpellAbilityType spellAbilityType) {
super(ownerId, setInfo, cardTypes, costs, spellAbilityType);
this.splitCardParent = splitCardParent;
}

View file

@ -29,6 +29,8 @@
package mage.cards.basiclands;
import java.util.UUID;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.abilities.mana.ManaAbility;
@ -40,12 +42,8 @@ import mage.cards.CardImpl;
*/
public abstract class BasicLand extends CardImpl {
public BasicLand(UUID ownerId, int cardNumber, String name, ManaAbility mana) {
this(ownerId, String.valueOf(cardNumber), name, mana);
}
public BasicLand(UUID ownerId, String cardNumber, String name, ManaAbility mana) {
super(ownerId, cardNumber, name, Rarity.LAND, new CardType[]{CardType.LAND}, null);
public BasicLand(UUID ownerId, CardSetInfo setInfo, ManaAbility mana) {
super(ownerId, setInfo, new CardType[]{CardType.LAND}, null);
this.supertype.add("Basic");
this.subtype.add(name);
this.addAbility(mana);

View file

@ -31,19 +31,16 @@ package mage.cards.basiclands;
import java.util.UUID;
import mage.ObjectColor;
import mage.abilities.mana.GreenManaAbility;
import mage.cards.Card;
import mage.cards.CardSetInfo;
/**
*
* @author BetaSteward_at_googlemail.com
*/
public abstract class Forest extends BasicLand {
public Forest(UUID ownerId, int cardNumber) {
this(ownerId, String.valueOf(cardNumber));
}
public Forest(UUID ownerId, String cardNumber) {
super(ownerId, cardNumber, "Forest", new GreenManaAbility());
public class Forest extends BasicLand {
public Forest(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new GreenManaAbility());
this.frameColor = ObjectColor.GREEN;
}
@ -51,4 +48,8 @@ public abstract class Forest extends BasicLand {
super(land);
}
@Override
public Card copy() {
return new Forest(this);
}
}

View file

@ -31,19 +31,16 @@ package mage.cards.basiclands;
import java.util.UUID;
import mage.ObjectColor;
import mage.abilities.mana.BlueManaAbility;
import mage.cards.Card;
import mage.cards.CardSetInfo;
/**
*
* @author BetaSteward_at_googlemail.com
*/
public abstract class Island extends BasicLand {
public Island(UUID ownerId, int cardNumber) {
this(ownerId, String.valueOf(cardNumber));
}
public Island(UUID ownerId, String cardNumber) {
super(ownerId, cardNumber, "Island", new BlueManaAbility());
public class Island extends BasicLand {
public Island(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new BlueManaAbility());
this.frameColor = ObjectColor.BLUE;
}
@ -51,4 +48,8 @@ public abstract class Island extends BasicLand {
super(land);
}
@Override
public Card copy() {
return new Island(this);
}
}

View file

@ -31,19 +31,16 @@ package mage.cards.basiclands;
import java.util.UUID;
import mage.ObjectColor;
import mage.abilities.mana.RedManaAbility;
import mage.cards.Card;
import mage.cards.CardSetInfo;
/**
*
* @author BetaSteward_at_googlemail.com
*/
public abstract class Mountain extends BasicLand {
public Mountain(UUID ownerId, int cardNumber) {
this(ownerId, String.valueOf(cardNumber));
}
public Mountain(UUID ownerId, String cardNumber) {
super(ownerId, cardNumber, "Mountain", new RedManaAbility());
public class Mountain extends BasicLand {
public Mountain(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new RedManaAbility());
this.frameColor = ObjectColor.RED;
}
@ -51,4 +48,8 @@ public abstract class Mountain extends BasicLand {
super(land);
}
@Override
public Card copy() {
return new Mountain(this);
}
}

View file

@ -31,19 +31,16 @@ package mage.cards.basiclands;
import java.util.UUID;
import mage.ObjectColor;
import mage.abilities.mana.WhiteManaAbility;
import mage.cards.Card;
import mage.cards.CardSetInfo;
/**
*
* @author BetaSteward_at_googlemail.com
*/
public abstract class Plains extends BasicLand {
public Plains(UUID ownerId, int cardNumber) {
this(ownerId, String.valueOf(cardNumber));
}
public Plains(UUID ownerId, String cardNumber) {
super(ownerId, cardNumber, "Plains", new WhiteManaAbility());
public class Plains extends BasicLand {
public Plains(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new WhiteManaAbility());
this.frameColor = ObjectColor.WHITE;
}
@ -51,4 +48,8 @@ public abstract class Plains extends BasicLand {
super(land);
}
@Override
public Card copy() {
return new Plains(this);
}
}

View file

@ -31,19 +31,16 @@ package mage.cards.basiclands;
import java.util.UUID;
import mage.ObjectColor;
import mage.abilities.mana.BlackManaAbility;
import mage.cards.Card;
import mage.cards.CardSetInfo;
/**
*
* @author BetaSteward_at_googlemail.com
*/
public abstract class Swamp extends BasicLand {
public Swamp(UUID ownerId, int cardNumber) {
this(ownerId, String.valueOf(cardNumber));
}
public Swamp(UUID ownerId, String cardNumber) {
super(ownerId, cardNumber, "Swamp", new BlackManaAbility());
public class Swamp extends BasicLand {
public Swamp(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new BlackManaAbility());
this.frameColor = ObjectColor.BLACK;
}
@ -51,4 +48,8 @@ public abstract class Swamp extends BasicLand {
super(land);
}
@Override
public Card copy() {
return new Swamp(this);
}
}

View file

@ -3,6 +3,7 @@ package mage.cards.mock;
import java.util.List;
import mage.MageInt;
import mage.abilities.Ability;
import mage.cards.CardSetInfo;
import mage.cards.SplitCard;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
@ -15,11 +16,7 @@ import mage.constants.CardType;
public class MockSplitCard extends SplitCard {
public MockSplitCard(CardInfo card) {
super(null,
card.getCardNumber(),
getLeftHalfName(card),
getRightHalfName(card),
card.getRarity(),
super(null, new CardSetInfo(card.getName(), card.getSetCode(), card.getCardNumber(), card.getRarity()),
card.getTypes().toArray(new CardType[0]),
join(card.getManaCosts()),
"",
@ -31,6 +28,8 @@ public class MockSplitCard extends SplitCard {
this.subtype = card.getSubTypes();
this.supertype = card.getSupertypes();
this.frameColor = card.getFrameColor();
this.frameStyle = card.getFrameStyle();
this.usesVariousArt = card.usesVariousArt();
this.color = card.getColor();

View file

@ -37,6 +37,7 @@ import java.util.Arrays;
import java.util.List;
import mage.cards.FrameStyle;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.ObjectColor;
@ -66,7 +67,7 @@ public class CardInfo {
protected String cardNumber;
@DatabaseField(indexName = "setCode_cardNumber_index")
protected String setCode;
@DatabaseField(unique = true, indexName = "className_index")
@DatabaseField(indexName = "className_index")
protected String className;
@DatabaseField
protected String power;
@ -202,7 +203,7 @@ public class CardInfo {
}
public Card getCard() {
return CardImpl.createCard(className);
return CardImpl.createCard(className, new CardSetInfo(name, setCode, cardNumber, rarity));
}
public Card getMockCard() {

View file

@ -45,6 +45,8 @@ import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.Callable;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SetType;
import mage.util.RandomUtil;
@ -129,6 +131,23 @@ public enum CardRepository {
return false;
}
public boolean cardExists(CardSetInfo className) {
try {
if (classNames == null) {
QueryBuilder<CardInfo, Object> qb = cardDao.queryBuilder();
qb.distinct().selectColumns("className").where().isNotNull("className");
List<CardInfo> results = cardDao.query(qb.prepare());
classNames = new TreeSet<>();
for (CardInfo card : results) {
classNames.add(card.getClassName());
}
}
return classNames.contains(className);
} catch (SQLException ex) {
}
return false;
}
public Set<String> getNames() {
Set<String> names = new TreeSet<>();
try {

View file

@ -33,11 +33,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.ExpansionSet;
import mage.cards.Sets;
import mage.cards.SplitCard;
import mage.cards.*;
import mage.util.ClassScanner;
import org.apache.log4j.Logger;
@ -69,10 +65,12 @@ public class CardScanner {
}
ExpansionRepository.instance.setContentVersion(ExpansionRepository.instance.getContentVersionConstant());
for (ClassLoader cl : packageMap.keySet()) {
for (Class c : ClassScanner.findClasses(cl, packageMap.get(cl), CardImpl.class)) {
if (!CardRepository.instance.cardExists(c.getCanonicalName())) {
Card card = CardImpl.createCard(c);
for (ExpansionSet set : Sets.getInstance().values()) {
for (ExpansionSet.SetCardInfo setInfo : set.getSetCardInfo()) {
if (CardRepository.instance.findCard(set.getCode(), setInfo.getCardNumber()) == null) {
Card card = CardImpl.createCard(setInfo.getCardClass(),
new CardSetInfo(setInfo.getName(), set.getCode(), setInfo.getCardNumber(),
setInfo.getRarity(), setInfo.getGraphicInfo()));
if (card != null) {
cardsToAdd.add(new CardInfo(card));
if (card instanceof SplitCard) {
@ -84,11 +82,11 @@ public class CardScanner {
}
}
}
if (!cardsToAdd.isEmpty()) {
logger.info("Cards need storing in DB: " + cardsToAdd.size());
CardRepository.instance.addCards(cardsToAdd);
}
CardRepository.instance.setContentVersion(CardRepository.instance.getContentVersionConstant());
}
}

View file

@ -38,6 +38,7 @@ import mage.abilities.effects.common.continuous.CommanderReplacementEffect;
import mage.abilities.effects.common.cost.CommanderCostModification;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.constants.CardType;
@ -164,8 +165,7 @@ public abstract class GameTinyLeadersImpl extends GameImpl {
class DefaultCommander extends CardImpl {
public DefaultCommander(UUID ownerId, String commanderName, String manaString) {
super(ownerId, 999, commanderName, Rarity.RARE, new CardType[]{CardType.CREATURE}, manaString);
this.expansionSetCode = "";
super(ownerId, new CardSetInfo(commanderName, "", "999", Rarity.RARE), new CardType[]{CardType.CREATURE}, manaString);
this.supertype.add("Legendary");
if (manaString.contains("{G}")) {

View file

@ -131,8 +131,11 @@ public class PermanentCard extends PermanentImpl {
transformable = card.isTransformable();
if (transformable) {
secondSideCard = card.getSecondCardFace();
nightCard = card.isNightCard();
this.nightCard = card.isNightCard();
if (! this.nightCard) {
this.secondSideCard = card.getSecondCardFace();
this.secondSideCardClazz = this.secondSideCard.getClass();
}
}
this.flipCard = card.isFlipCard();
this.flipCardName = card.getFlipCardName();