refactor: improved card info

This commit is contained in:
Oleg Agafonov 2024-02-18 22:40:30 +04:00
parent b1e4ea2790
commit ad8e7daf97
47 changed files with 84 additions and 81 deletions

View file

@ -1705,7 +1705,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
java.util.List<CardInfo> cardPool = CardRepository.instance.findCards(cardCriteria); java.util.List<CardInfo> cardPool = CardRepository.instance.findCards(cardCriteria);
if (!cardPool.isEmpty()) { if (!cardPool.isEmpty()) {
Card acard = cardPool.get(RandomUtil.nextInt(cardPool.size())).getMockCard(); Card acard = cardPool.get(RandomUtil.nextInt(cardPool.size())).createMockCard();
if (acard.getName().equals(card.getName())) { if (acard.getName().equals(card.getName())) {
CardView pimpedCard = new CardView(acard); CardView pimpedCard = new CardView(acard);
@ -1751,7 +1751,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
for (CardView card : stack) { for (CardView card : stack) {
CardInfo oldestCardInfo = CardRepository.instance.findOldestNonPromoVersionCard(card.getName()); CardInfo oldestCardInfo = CardRepository.instance.findOldestNonPromoVersionCard(card.getName());
if (oldestCardInfo != null) { if (oldestCardInfo != null) {
CardView oldestCardView = new CardView(oldestCardInfo.getMockCard()); CardView oldestCardView = new CardView(oldestCardInfo.createMockCard());
this.removeCardView(card); this.removeCardView(card);
eventSource.fireEvent(card, ClientEventType.DECK_REMOVE_SPECIFIC_CARD); eventSource.fireEvent(card, ClientEventType.DECK_REMOVE_SPECIFIC_CARD);
this.addCardView(oldestCardView, false); this.addCardView(oldestCardView, false);

View file

@ -64,7 +64,7 @@ public class VirtualCardInfo {
return; return;
} }
this.init(new CardView(cardInfo.getCard()), bigCard, gameId); this.init(new CardView(cardInfo.createCard()), bigCard, gameId);
} }
public void init(CardView cardView, BigCard bigCard, UUID gameId) { public void init(CardView cardView, BigCard bigCard, UUID gameId) {

View file

@ -126,7 +126,7 @@ public class MageEditorPane extends JEditorPane {
if (cardView == null) { if (cardView == null) {
CardInfo card = CardRepository.instance.findCards(cardName).stream().findFirst().orElse(null); CardInfo card = CardRepository.instance.findCards(cardName).stream().findFirst().orElse(null);
if (card != null) { if (card != null) {
cardView = new CardView(card.getMockCard()); cardView = new CardView(card.createMockCard());
} }
} }

View file

@ -4,16 +4,13 @@ import mage.cards.Card;
import mage.cards.decks.Deck; import mage.cards.decks.Deck;
import mage.cards.repository.CardCriteria; import mage.cards.repository.CardCriteria;
import mage.cards.repository.CardInfo; import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.cards.repository.ExpansionRepository; import mage.cards.repository.ExpansionRepository;
import mage.client.dialog.PreferencesDialog; import mage.client.dialog.PreferencesDialog;
import mage.client.util.sets.ConstructedFormats; import mage.client.util.sets.ConstructedFormats;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.ColoredManaSymbol; import mage.constants.ColoredManaSymbol;
import mage.constants.Rarity;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.util.RandomUtil; import mage.util.RandomUtil;
import mage.util.TournamentUtil;
import java.util.*; import java.util.*;
@ -230,6 +227,6 @@ public final class DeckGenerator {
private static Card getBasicLand(ColoredManaSymbol color, Map<String, List<CardInfo>> basicLands) { private static Card getBasicLand(ColoredManaSymbol color, Map<String, List<CardInfo>> basicLands) {
String landName = DeckGeneratorPool.getBasicLandName(color.toString()); String landName = DeckGeneratorPool.getBasicLandName(color.toString());
List<CardInfo> basicLandsInfo = basicLands.get(landName); List<CardInfo> basicLandsInfo = basicLands.get(landName);
return basicLandsInfo.get(RandomUtil.nextInt(basicLandsInfo.size())).getMockCard().copy(); return basicLandsInfo.get(RandomUtil.nextInt(basicLandsInfo.size())).createMockCard().copy();
} }
} }

View file

@ -278,7 +278,7 @@ public class DeckGeneratorPool
public List<Card> filterLands(List<CardInfo> landCardsInfo) { public List<Card> filterLands(List<CardInfo> landCardsInfo) {
List<Card> matchingLandList = new ArrayList<>(); List<Card> matchingLandList = new ArrayList<>();
for(CardInfo landCardInfo: landCardsInfo) { for(CardInfo landCardInfo: landCardsInfo) {
Card landCard = landCardInfo.getMockCard(); Card landCard = landCardInfo.createMockCard();
if(landProducesChosenColors(landCard)) { if(landProducesChosenColors(landCard)) {
matchingLandList.add(landCard); matchingLandList.add(landCard);
} }
@ -556,7 +556,7 @@ public class DeckGeneratorPool
if (retrievedCount > 0 && retrievedCount >= spellCount) { if (retrievedCount > 0 && retrievedCount >= spellCount) {
int tries = 0; int tries = 0;
while (count < spellCount) { while (count < spellCount) {
Card card = cardPool.get(RandomUtil.nextInt(retrievedCount)).getMockCard(); Card card = cardPool.get(RandomUtil.nextInt(retrievedCount)).createMockCard();
if (genPool.isValidSpellCard(card)) { if (genPool.isValidSpellCard(card)) {
int cardCMC = card.getManaValue(); int cardCMC = card.getManaValue();
for (DeckGeneratorCMC.CMC deckCMC : deckCMCs) { for (DeckGeneratorCMC.CMC deckCMC : deckCMCs) {

View file

@ -480,7 +480,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
} }
} }
// filter by settings // filter by settings
Card card = cardInfo.getMockCard(); Card card = cardInfo.createMockCard();
if (!filter.match(card, null)) { if (!filter.match(card, null)) {
continue; continue;
} }

View file

@ -292,7 +292,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
if (card == null) { if (card == null) {
// Need to make a new card // Need to make a new card
Logger.getLogger(DeckEditorPanel.class).info("Retrieve " + cardView.getCardNumber() + " Failed"); Logger.getLogger(DeckEditorPanel.class).info("Retrieve " + cardView.getCardNumber() + " Failed");
card = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber()).getCard(); card = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber()).createCard();
} else { } else {
// Only need a temporary card once // Only need a temporary card once
temporaryCards.remove(cardView.getId()); temporaryCards.remove(cardView.getId());
@ -578,7 +578,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
// add cards // add cards
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber()); CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
for (int i = cardsFound; i < numberToSet; i++) { for (int i = cardsFound; i < numberToSet; i++) {
cards.add(cardInfo.getMockCard()); cards.add(cardInfo.createMockCard());
} }
} else { } else {
// remove cards // remove cards
@ -605,7 +605,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
} else { } else {
// editor: create mock card // editor: create mock card
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber()); CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
card = cardInfo != null ? cardInfo.getMockCard() : null; card = cardInfo != null ? cardInfo.createMockCard() : null;
} }
if (card != null) { if (card != null) {
@ -633,7 +633,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
SimpleCardView cardView = (SimpleCardView) event.getSource(); SimpleCardView cardView = (SimpleCardView) event.getSource();
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber()); CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
Card card = cardInfo != null ? cardInfo.getMockCard() : null; Card card = cardInfo != null ? cardInfo.createMockCard() : null;
if (card != null) { if (card != null) {
deck.getSideboard().add(card); deck.getSideboard().add(card);
} }

View file

@ -443,7 +443,7 @@ public class MageBook extends JComponent {
List<CardInfo> cards = CardRepository.instance.findCards(criteria); List<CardInfo> cards = CardRepository.instance.findCards(criteria);
cards.sort(new NaturalOrderCardNumberComparator()); cards.sort(new NaturalOrderCardNumberComparator());
List<Object> res = new ArrayList<>(); List<Object> res = new ArrayList<>();
cards.forEach(card -> res.add(new CardView(card.getMockCard()))); cards.forEach(card -> res.add(new CardView(card.createMockCard())));
return res; return res;
} }

View file

@ -173,7 +173,7 @@ public class AddLandDialog extends MageDialog {
int foundLands = 0; int foundLands = 0;
int foundNoneAfter = 0; int foundNoneAfter = 0;
for (int i = 0; foundLands != number && foundNoneAfter < 1000; i++) { for (int i = 0; foundLands != number && foundNoneAfter < 1000; i++) {
Card land = cards.get(RandomUtil.nextInt(cards.size())).getMockCard(); Card land = cards.get(RandomUtil.nextInt(cards.size())).createMockCard();
boolean useLand = !useFullArt; boolean useLand = !useFullArt;
if (useFullArt && (land.getFrameStyle() == FrameStyle.BFZ_FULL_ART_BASIC if (useFullArt && (land.getFrameStyle() == FrameStyle.BFZ_FULL_ART_BASIC
|| land.getFrameStyle() == FrameStyle.UGL_FULL_ART_BASIC || land.getFrameStyle() == FrameStyle.UGL_FULL_ART_BASIC

View file

@ -18,7 +18,7 @@ public final class CardsViewUtil {
for (SimpleCardView simple : view.values()) { for (SimpleCardView simple : view.values()) {
CardInfo cardInfo = CardRepository.instance.findCard(simple.getExpansionSetCode(), simple.getCardNumber()); CardInfo cardInfo = CardRepository.instance.findCard(simple.getExpansionSetCode(), simple.getCardNumber());
Card card = cardInfo != null ? cardInfo.getMockCard() : null; Card card = cardInfo != null ? cardInfo.createMockCard() : null;
if (card != null) { if (card != null) {
cards.put(simple.getId(), new CardView(card, simple)); cards.put(simple.getId(), new CardView(card, simple));
} }
@ -35,7 +35,7 @@ public final class CardsViewUtil {
Card card = loadedCards.get(key); Card card = loadedCards.get(key);
if (card == null) { if (card == null) {
CardInfo cardInfo = CardRepository.instance.findCard(simple.getExpansionSetCode(), simple.getCardNumber()); CardInfo cardInfo = CardRepository.instance.findCard(simple.getExpansionSetCode(), simple.getCardNumber());
card = cardInfo != null ? cardInfo.getMockCard() : null; card = cardInfo != null ? cardInfo.createMockCard() : null;
loadedCards.put(key, card); loadedCards.put(key, card);
} }
if (card != null) { if (card != null) {

View file

@ -27,7 +27,7 @@ public final class DeckUtil {
deck.setName(view.getName()); deck.setName(view.getName());
for (SimpleCardView cardView : view.getCards().values()) { for (SimpleCardView cardView : view.getCards().values()) {
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber()); CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
Card card = cardInfo != null ? cardInfo.getMockCard() : null; Card card = cardInfo != null ? cardInfo.createMockCard() : null;
if (card != null) { if (card != null) {
deck.getCards().add(card); deck.getCards().add(card);
} else { } else {
@ -36,7 +36,7 @@ public final class DeckUtil {
} }
for (SimpleCardView cardView : view.getSideboard().values()) { for (SimpleCardView cardView : view.getSideboard().values()) {
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber()); CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
Card card = cardInfo != null ? cardInfo.getMockCard() : null; Card card = cardInfo != null ? cardInfo.createMockCard() : null;
if (card != null) { if (card != null) {
deck.getSideboard().add(card); deck.getSideboard().add(card);
} else { } else {

View file

@ -715,7 +715,7 @@ public final class SystemUtil {
Set<Card> cardsToLoad = new HashSet<>(); Set<Card> cardsToLoad = new HashSet<>();
for (int i = 0; i < command.Amount; i++) { for (int i = 0; i < command.Amount; i++) {
CardInfo cardInfo = cards.get(RandomUtil.nextInt(cards.size())); CardInfo cardInfo = cards.get(RandomUtil.nextInt(cards.size()));
Card card = cardInfo != null ? cardInfo.getCard() : null; Card card = cardInfo != null ? cardInfo.createCard() : null;
if (card != null) { if (card != null) {
cardsToLoad.add(card); cardsToLoad.add(card);
} }
@ -783,7 +783,7 @@ public final class SystemUtil {
Set<Card> cardsToLoad = new LinkedHashSet<>(); Set<Card> cardsToLoad = new LinkedHashSet<>();
for (int i = 0; i < amount; i++) { for (int i = 0; i < amount; i++) {
cardsToLoad.add(cardInfo.getCard()); cardsToLoad.add(cardInfo.createCard());
} }
game.loadCards(cardsToLoad, owner.getId()); game.loadCards(cardsToLoad, owner.getId());

View file

@ -49,7 +49,7 @@ public class MomirDuel extends GameImpl {
Player player = getPlayer(playerId); Player player = getPlayer(playerId);
if (player != null) { if (player != null) {
CardInfo cardInfo = CardRepository.instance.findCard("Momir Vig, Simic Visionary"); CardInfo cardInfo = CardRepository.instance.findCard("Momir Vig, Simic Visionary");
addEmblem(new MomirEmblem(), cardInfo.getCard(), playerId); addEmblem(new MomirEmblem(), cardInfo.createCard(), playerId);
} }
} }
getState().addAbility(ability, null); getState().addAbility(ability, null);

View file

@ -55,7 +55,7 @@ public class MomirGame extends GameImpl {
// how-to fix: make sure that a Momir Emblem and a source card uses same set (DIS - Dissension) // how-to fix: make sure that a Momir Emblem and a source card uses same set (DIS - Dissension)
throw new IllegalStateException("Wrong code usage: momir card and emblem must exists in the same set (DIS)"); throw new IllegalStateException("Wrong code usage: momir card and emblem must exists in the same set (DIS)");
} }
addEmblem(new MomirEmblem(), cardInfo.getCard(), playerId); addEmblem(new MomirEmblem(), cardInfo.createCard(), playerId);
} }
} }
getState().addAbility(ability, null); getState().addAbility(ability, null);

View file

@ -2283,7 +2283,7 @@ public class ComputerPlayer extends PlayerImpl {
} }
for (int i = 0; i < number; i++) { for (int i = 0; i < number; i++) {
Card land = cards.get(RandomUtil.nextInt(cards.size())).getCard(); Card land = cards.get(RandomUtil.nextInt(cards.size())).createCard();
deck.getCards().add(land); deck.getCards().add(land);
} }
} }

View file

@ -153,7 +153,7 @@ public class ChatManagerImpl implements ChatManager {
CardInfo cardInfo = CardRepository.instance.findCard(searchName, true); CardInfo cardInfo = CardRepository.instance.findCard(searchName, true);
if (cardInfo != null) { if (cardInfo != null) {
String newMessagePart = GameLog.getColoredObjectIdName( String newMessagePart = GameLog.getColoredObjectIdName(
cardInfo.getCard().getColor(), cardInfo.createCard().getColor(),
UUID.randomUUID(), UUID.randomUUID(),
cardInfo.getName(), cardInfo.getName(),
"", "",

View file

@ -76,6 +76,7 @@ class AWingAttacksNextCombatIfAbleSourceEffect extends RequirementEffect {
@Override @Override
public void init(Ability source, Game game) { public void init(Ability source, Game game) {
super.init(source, game);
turnNumber = game.getTurnNum(); turnNumber = game.getTurnNum();
phaseCount = game.getPhase().getCount(); phaseCount = game.getPhase().getCount();
} }

View file

@ -83,7 +83,7 @@ enum capitaloffensecount implements DynamicValue {
return 0; return 0;
} }
Card card = cardsInfo.get(0).getCard(); Card card = cardsInfo.get(0).createCard();
if (card == null) { if (card == null) {
return 0; return 0;
} }

View file

@ -69,7 +69,7 @@ class GarthOneEyeEffect extends OneShotEffect {
.findCards(new CardCriteria().setCodes("LEA")) .findCards(new CardCriteria().setCodes("LEA"))
.stream() .stream()
.filter(cardInfo -> names.contains(cardInfo.getName())) .filter(cardInfo -> names.contains(cardInfo.getName()))
.collect(Collectors.toMap(CardInfo::getName, CardInfo::getCard))); .collect(Collectors.toMap(CardInfo::getName, CardInfo::createCard)));
} }
GarthOneEyeEffect() { GarthOneEyeEffect() {

View file

@ -358,7 +358,7 @@ public final class Battlebond extends ExpansionSet {
//Check if the pack already contains a partner pair //Check if the pack already contains a partner pair
if (partnerAllowed) { if (partnerAllowed) {
//Added card always replaces an uncommon card //Added card always replaces an uncommon card
Card card = CardRepository.instance.findCardWithPreferredSetAndNumber(partnerName, sourceCard.getExpansionSetCode(), null).getCard(); Card card = CardRepository.instance.findCardWithPreferredSetAndNumber(partnerName, sourceCard.getExpansionSetCode(), null).createCard();
if (i < max) { if (i < max) {
booster.add(card); booster.add(card);
} else { } else {

View file

@ -3516,7 +3516,7 @@ public class MysteryBooster extends ExpansionSet {
for (int slot = 1; slot < 16; ++slot) { for (int slot = 1; slot < 16; ++slot) {
final List<CardInfo> availableCards = this.possibleCardsPerBoosterSlot.get(slot); final List<CardInfo> availableCards = this.possibleCardsPerBoosterSlot.get(slot);
final int printSheetCardNumber = RandomUtil.nextInt(availableCards.size()); final int printSheetCardNumber = RandomUtil.nextInt(availableCards.size());
final Card chosenCard = availableCards.get(printSheetCardNumber).getCard(); final Card chosenCard = availableCards.get(printSheetCardNumber).createCard();
booster.add(chosenCard); booster.add(chosenCard);
} }
return booster; return booster;

View file

@ -649,8 +649,8 @@ public class CopySpellTest extends CardTestPlayerBase {
@Test @Test
public void test_SimpleCopy_Card() { public void test_SimpleCopy_Card() {
Card sourceCard = CardRepository.instance.findCard("Grizzly Bears").getCard(); Card sourceCard = CardRepository.instance.findCard("Grizzly Bears").createCard();
Card originalCard = CardRepository.instance.findCard("Grizzly Bears").getCard(); Card originalCard = CardRepository.instance.findCard("Grizzly Bears").createCard();
prepareZoneAndZCC(originalCard); prepareZoneAndZCC(originalCard);
Card copiedCard = currentGame.copyCard(originalCard, null, playerA.getId()); Card copiedCard = currentGame.copyCard(originalCard, null, playerA.getId());
// main // main
@ -664,8 +664,8 @@ public class CopySpellTest extends CardTestPlayerBase {
@Test @Test
public void test_SimpleCopy_SplitCard() { public void test_SimpleCopy_SplitCard() {
SplitCard sourceCard = (SplitCard) CardRepository.instance.findCard("Alive // Well").getCard(); SplitCard sourceCard = (SplitCard) CardRepository.instance.findCard("Alive // Well").createCard();
SplitCard originalCard = (SplitCard) CardRepository.instance.findCard("Alive // Well").getCard(); SplitCard originalCard = (SplitCard) CardRepository.instance.findCard("Alive // Well").createCard();
prepareZoneAndZCC(originalCard); prepareZoneAndZCC(originalCard);
SplitCard copiedCard = (SplitCard) currentGame.copyCard(originalCard, null, playerA.getId()); SplitCard copiedCard = (SplitCard) currentGame.copyCard(originalCard, null, playerA.getId());
// main // main
@ -693,8 +693,8 @@ public class CopySpellTest extends CardTestPlayerBase {
@Test @Test
public void test_SimpleCopy_AdventureCard() { public void test_SimpleCopy_AdventureCard() {
AdventureCard sourceCard = (AdventureCard) CardRepository.instance.findCard("Animating Faerie").getCard(); AdventureCard sourceCard = (AdventureCard) CardRepository.instance.findCard("Animating Faerie").createCard();
AdventureCard originalCard = (AdventureCard) CardRepository.instance.findCard("Animating Faerie").getCard(); AdventureCard originalCard = (AdventureCard) CardRepository.instance.findCard("Animating Faerie").createCard();
prepareZoneAndZCC(originalCard); prepareZoneAndZCC(originalCard);
AdventureCard copiedCard = (AdventureCard) currentGame.copyCard(originalCard, null, playerA.getId()); AdventureCard copiedCard = (AdventureCard) currentGame.copyCard(originalCard, null, playerA.getId());
// main // main
@ -715,8 +715,8 @@ public class CopySpellTest extends CardTestPlayerBase {
@Test @Test
public void test_SimpleCopy_MDFC() { public void test_SimpleCopy_MDFC() {
ModalDoubleFacedCard sourceCard = (ModalDoubleFacedCard) CardRepository.instance.findCard("Agadeem's Awakening").getCard(); ModalDoubleFacedCard sourceCard = (ModalDoubleFacedCard) CardRepository.instance.findCard("Agadeem's Awakening").createCard();
ModalDoubleFacedCard originalCard = (ModalDoubleFacedCard) CardRepository.instance.findCard("Agadeem's Awakening").getCard(); ModalDoubleFacedCard originalCard = (ModalDoubleFacedCard) CardRepository.instance.findCard("Agadeem's Awakening").createCard();
prepareZoneAndZCC(originalCard); prepareZoneAndZCC(originalCard);
ModalDoubleFacedCard copiedCard = (ModalDoubleFacedCard) currentGame.copyCard(originalCard, null, playerA.getId()); ModalDoubleFacedCard copiedCard = (ModalDoubleFacedCard) currentGame.copyCard(originalCard, null, playerA.getId());
// main // main

View file

@ -18,7 +18,7 @@ public class EmblemOfCardTest extends CardTestPlayerBase {
// Flying, lifelink // Flying, lifelink
// Pay 7 life: Draw seven cards. // Pay 7 life: Draw seven cards.
addEmblem(playerA, new EmblemOfCard( addEmblem(playerA, new EmblemOfCard(
CardRepository.instance.findCard("Griselbrand", true).getMockCard() CardRepository.instance.findCard("Griselbrand", true).createMockCard()
)); ));
setLife(playerA, 20); setLife(playerA, 20);
@ -40,7 +40,7 @@ public class EmblemOfCardTest extends CardTestPlayerBase {
// A player losing unspent mana causes that player to lose that much life. // A player losing unspent mana causes that player to lose that much life.
// {1}, {T}: Each player adds {B}{R}{G}. // {1}, {T}: Each player adds {B}{R}{G}.
addEmblem(playerA, new EmblemOfCard( addEmblem(playerA, new EmblemOfCard(
CardRepository.instance.findCard("Yurlok of Scorch Thrash", true).getMockCard() CardRepository.instance.findCard("Yurlok of Scorch Thrash", true).createMockCard()
)); ));
setLife(playerA, 20); setLife(playerA, 20);
@ -66,7 +66,7 @@ public class EmblemOfCardTest extends CardTestPlayerBase {
public void testEmblemOfOmniscience() { public void testEmblemOfOmniscience() {
// You may cast spells from your hand without paying their mana costs. // You may cast spells from your hand without paying their mana costs.
addEmblem(playerA, new EmblemOfCard( addEmblem(playerA, new EmblemOfCard(
CardRepository.instance.findCard("Omniscience", true).getMockCard() CardRepository.instance.findCard("Omniscience", true).createMockCard()
)); ));
// Colossal Dreadmaw {4}{G}{G} // Colossal Dreadmaw {4}{G}{G}
@ -85,7 +85,7 @@ public class EmblemOfCardTest extends CardTestPlayerBase {
public void testEmblemOfParadoxEngine() { public void testEmblemOfParadoxEngine() {
// Whenever you cast a spell, untap all nonland permanents you control. // Whenever you cast a spell, untap all nonland permanents you control.
addEmblem(playerA, new EmblemOfCard( addEmblem(playerA, new EmblemOfCard(
CardRepository.instance.findCard("Paradox Engine", true).getMockCard() CardRepository.instance.findCard("Paradox Engine", true).createMockCard()
)); ));
// {T}: Add {G}. // {T}: Add {G}.
@ -136,7 +136,7 @@ public class EmblemOfCardTest extends CardTestPlayerBase {
// If an effect would put one or more counters on a permanent you // If an effect would put one or more counters on a permanent you
// control, it puts twice that many of those counters on that permanent instead. // control, it puts twice that many of those counters on that permanent instead.
addEmblem(playerA, new EmblemOfCard( addEmblem(playerA, new EmblemOfCard(
CardRepository.instance.findCard("Doubling Season", true).getMockCard() CardRepository.instance.findCard("Doubling Season", true).createMockCard()
)); ));
// {T}: Add {W}. // {T}: Add {W}.
@ -191,7 +191,7 @@ public class EmblemOfCardTest extends CardTestPlayerBase {
// The first spell you cast each turn has cascade. // The first spell you cast each turn has cascade.
addEmblem(playerA, new EmblemOfCard( addEmblem(playerA, new EmblemOfCard(
CardRepository.instance.findCard("Maelstrom Nexus", true).getMockCard() CardRepository.instance.findCard("Maelstrom Nexus", true).createMockCard()
)); ));
// Grizzly Bears {1}{G} // Grizzly Bears {1}{G}

View file

@ -19,7 +19,7 @@ public class Plus2MaceTest extends CardTestPlayerBase {
String cardName = "+2 Mace"; String cardName = "+2 Mace";
CardInfo cardinfo = CardRepository.instance.findCard(cardName); CardInfo cardinfo = CardRepository.instance.findCard(cardName);
Assert.assertNotNull(cardName + " must exists", cardinfo); Assert.assertNotNull(cardName + " must exists", cardinfo);
Card card = cardinfo.getCard(); Card card = cardinfo.createCard();
String cardText = GameLog.replaceNameByColoredName(card, card.getSpellAbility().toString(), null); String cardText = GameLog.replaceNameByColoredName(card, card.getSpellAbility().toString(), null);
Assert.assertTrue("card text must contain card name", cardText.contains(cardName)); Assert.assertTrue("card text must contain card name", cardText.contains(cardName));
} }

View file

@ -9,7 +9,7 @@ public class WrennAndSixTest {
@Test @Test
public void testFirstLoyaltyAbilityRulesText() { public void testFirstLoyaltyAbilityRulesText() {
Card wrennAndSix = CardRepository.instance.findCard("Wrenn and Six").getCard(); Card wrennAndSix = CardRepository.instance.findCard("Wrenn and Six").createCard();
String firstLoyaltyAbilityRulesText = wrennAndSix.getRules().get(0); String firstLoyaltyAbilityRulesText = wrennAndSix.getRules().get(0);
Assert.assertEquals(firstLoyaltyAbilityRulesText, "+1: Return up to one target land card from your graveyard to your hand."); Assert.assertEquals(firstLoyaltyAbilityRulesText, "+1: Return up to one target land card from your graveyard to your hand.");

View file

@ -74,7 +74,7 @@ public class CommanderColorIdentityTest extends CardTestCommander3PlayersFFA {
if (cardInfo == null) { if (cardInfo == null) {
throw new IllegalArgumentException("Couldn't find the card " + cardName + " in the DB."); throw new IllegalArgumentException("Couldn't find the card " + cardName + " in the DB.");
} }
Card card = cardInfo.getCard(); Card card = cardInfo.createCard();
FilterMana filterMana = card.getColorIdentity(); FilterMana filterMana = card.getColorIdentity();
return filterMana.toString(); return filterMana.toString();
} }

View file

@ -86,7 +86,7 @@ public class AbilityPickerTest extends CardTestPlayerBase {
private Abilities<Ability> getAbilitiesFromCard(String cardName) { private Abilities<Ability> getAbilitiesFromCard(String cardName) {
CardInfo info = CardRepository.instance.findCard(cardName); CardInfo info = CardRepository.instance.findCard(cardName);
PermanentImpl permanent = new PermanentCard(info.getCard(), playerA.getId(), currentGame); PermanentImpl permanent = new PermanentCard(info.createCard(), playerA.getId(), currentGame);
return permanent.getAbilities(currentGame); return permanent.getAbilities(currentGame);
} }
} }

View file

@ -21,7 +21,6 @@ import mage.game.command.CommandObject;
import mage.game.command.Emblem; import mage.game.command.Emblem;
import mage.game.match.MatchOptions; import mage.game.match.MatchOptions;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.game.permanent.PermanentCard;
import mage.game.permanent.PermanentToken; import mage.game.permanent.PermanentToken;
import mage.player.ai.ComputerPlayer7; import mage.player.ai.ComputerPlayer7;
import mage.player.ai.ComputerPlayerMCTS; import mage.player.ai.ComputerPlayerMCTS;
@ -683,7 +682,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
if (gameZone == Zone.BATTLEFIELD) { if (gameZone == Zone.BATTLEFIELD) {
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
Card newCard = cardInfo.getCard(); Card newCard = cardInfo.createCard();
getBattlefieldCards(player).add(new PutToBattlefieldInfo( getBattlefieldCards(player).add(new PutToBattlefieldInfo(
newCard, newCard,
tapped tapped
@ -699,7 +698,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
} }
List<Card> cards = getCardList(gameZone, player); List<Card> cards = getCardList(gameZone, player);
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
Card newCard = cardInfo.getCard(); Card newCard = cardInfo.createCard();
cards.add(newCard); cards.add(newCard);
if (!aliasName.isEmpty()) { if (!aliasName.isEmpty()) {
player.addAlias(player.generateAliasName(aliasName, useAliasMultiNames, i + 1), newCard.getId()); player.addAlias(player.generateAliasName(aliasName, useAliasMultiNames, i + 1), newCard.getId());

View file

@ -69,7 +69,7 @@ public class DeckValidationUtil {
} }
for (int i = 0; i < cardNameAmount.getNumber(); i++) { for (int i = 0; i < cardNameAmount.getNumber(); i++) {
assert cardinfo != null; assert cardinfo != null;
deckToTest.getCards().add(cardinfo.getCard()); deckToTest.getCards().add(cardinfo.createCard());
} }
} }
} }
@ -83,7 +83,7 @@ public class DeckValidationUtil {
} }
for (int i = 0; i < cardNameAmount.getNumber(); i++) { for (int i = 0; i < cardNameAmount.getNumber(); i++) {
assert cardinfo != null; assert cardinfo != null;
deckToTest.getSideboard().add(cardinfo.getCard()); deckToTest.getSideboard().add(cardinfo.createCard());
} }
} }
} }

View file

@ -41,7 +41,7 @@ public class SerializationTest extends CardTestPlayerBase {
@Test @Test
public void test_PermanentImpl_Simple() { public void test_PermanentImpl_Simple() {
CardInfo cardInfo = CardRepository.instance.findCard("Balduvian Bears"); CardInfo cardInfo = CardRepository.instance.findCard("Balduvian Bears");
Card newCard = cardInfo.getCard(); Card newCard = cardInfo.createCard();
Card permCard = CardUtil.getDefaultCardSideForBattlefield(currentGame, newCard); Card permCard = CardUtil.getDefaultCardSideForBattlefield(currentGame, newCard);
PermanentImpl permanent = new PermanentCard(permCard, playerA.getId(), currentGame); PermanentImpl permanent = new PermanentCard(permCard, playerA.getId(), currentGame);
currentGame.addPermanent(permanent, 0); currentGame.addPermanent(permanent, 0);
@ -55,7 +55,7 @@ public class SerializationTest extends CardTestPlayerBase {
@Test @Test
public void test_PermanentImpl_MarkedDamageInfo() { public void test_PermanentImpl_MarkedDamageInfo() {
CardInfo cardInfo = CardRepository.instance.findCard("Balduvian Bears"); CardInfo cardInfo = CardRepository.instance.findCard("Balduvian Bears");
Card newCard = cardInfo.getCard(); Card newCard = cardInfo.createCard();
Card permCard = CardUtil.getDefaultCardSideForBattlefield(currentGame, newCard); Card permCard = CardUtil.getDefaultCardSideForBattlefield(currentGame, newCard);
PermanentImpl permanent = new PermanentCard(permCard, playerA.getId(), currentGame); PermanentImpl permanent = new PermanentCard(permCard, playerA.getId(), currentGame);
currentGame.addPermanent(permanent, 0); currentGame.addPermanent(permanent, 0);
@ -77,7 +77,7 @@ public class SerializationTest extends CardTestPlayerBase {
private void processSingleCard(CardInfo cardInfo) { private void processSingleCard(CardInfo cardInfo) {
// compress each card's part // compress each card's part
Card newCard = cardInfo.getCard(); Card newCard = cardInfo.createCard();
CardUtil.getObjectPartsAsObjects(newCard).stream() CardUtil.getObjectPartsAsObjects(newCard).stream()
.map(Card.class::cast) .map(Card.class::cast)
.forEach(card -> { .forEach(card -> {

View file

@ -49,8 +49,8 @@ public class AliasesApiTest extends CardTestPlayerBase {
Assert.assertFalse(CardUtil.haveSameNames("Name1", "Name2", true)); Assert.assertFalse(CardUtil.haveSameNames("Name1", "Name2", true));
// name with split card // name with split card
Card splitCard1 = CardRepository.instance.findCard("Armed // Dangerous").getCard(); Card splitCard1 = CardRepository.instance.findCard("Armed // Dangerous").createCard();
Card splitCard2 = CardRepository.instance.findCard("Alive // Well").getCard(); Card splitCard2 = CardRepository.instance.findCard("Alive // Well").createCard();
Assert.assertTrue(CardUtil.haveSameNames(splitCard1, "Armed", currentGame)); Assert.assertTrue(CardUtil.haveSameNames(splitCard1, "Armed", currentGame));
Assert.assertTrue(CardUtil.haveSameNames(splitCard1, "Dangerous", currentGame)); Assert.assertTrue(CardUtil.haveSameNames(splitCard1, "Dangerous", currentGame));
Assert.assertTrue(CardUtil.haveSameNames(splitCard1, "Armed // Dangerous", currentGame)); Assert.assertTrue(CardUtil.haveSameNames(splitCard1, "Armed // Dangerous", currentGame));
@ -61,7 +61,7 @@ public class AliasesApiTest extends CardTestPlayerBase {
Assert.assertFalse(CardUtil.haveSameNames(splitCard1, splitCard2)); Assert.assertFalse(CardUtil.haveSameNames(splitCard1, splitCard2));
// name with face down spells: face down spells don't have names, see https://github.com/magefree/mage/issues/6569 // name with face down spells: face down spells don't have names, see https://github.com/magefree/mage/issues/6569
Card bearCard = CardRepository.instance.findCard("Balduvian Bears").getCard(); Card bearCard = CardRepository.instance.findCard("Balduvian Bears").createCard();
Spell normalSpell = new Spell(bearCard, bearCard.getSpellAbility(), playerA.getId(), Zone.HAND, currentGame); Spell normalSpell = new Spell(bearCard, bearCard.getSpellAbility(), playerA.getId(), Zone.HAND, currentGame);
Spell faceDownSpell = new Spell(bearCard, bearCard.getSpellAbility(), playerA.getId(), Zone.HAND, currentGame); Spell faceDownSpell = new Spell(bearCard, bearCard.getSpellAbility(), playerA.getId(), Zone.HAND, currentGame);
faceDownSpell.setFaceDown(true, currentGame); faceDownSpell.setFaceDown(true, currentGame);

View file

@ -106,7 +106,7 @@ public class ManaUtilTest extends CardTestPlayerBase {
*/ */
private void testManaToPayVsLand(String manaToPay, String landName, int expected1, int expected2) { private void testManaToPayVsLand(String manaToPay, String landName, int expected1, int expected2) {
ManaCost unpaid = new ManaCostsImpl<>(manaToPay); ManaCost unpaid = new ManaCostsImpl<>(manaToPay);
Card card = CardRepository.instance.findCard(landName).getCard(); Card card = CardRepository.instance.findCard(landName).createCard();
Assert.assertNotNull(card); Assert.assertNotNull(card);
Map<UUID, ActivatedManaAbilityImpl> useableAbilities = getManaAbilities(card); Map<UUID, ActivatedManaAbilityImpl> useableAbilities = getManaAbilities(card);
@ -134,7 +134,7 @@ public class ManaUtilTest extends CardTestPlayerBase {
*/ */
private void testManaToPayVsLand(String manaToPay, String landName, int expected1, Class<? extends BasicManaAbility> expectedChosen) { private void testManaToPayVsLand(String manaToPay, String landName, int expected1, Class<? extends BasicManaAbility> expectedChosen) {
ManaCost unpaid = new ManaCostsImpl<>(manaToPay); ManaCost unpaid = new ManaCostsImpl<>(manaToPay);
Card card = CardRepository.instance.findCard(landName).getCard(); Card card = CardRepository.instance.findCard(landName).createCard();
Assert.assertNotNull(card); Assert.assertNotNull(card);
Map<UUID, ActivatedManaAbilityImpl> useableAbilities = getManaAbilities(card); Map<UUID, ActivatedManaAbilityImpl> useableAbilities = getManaAbilities(card);

View file

@ -620,7 +620,7 @@ public class VerifyCardDataTest {
CardInfo cardInfo = CardRepository.instance.findCardsByClass(info.getCardClass().getCanonicalName()).stream().findFirst().orElse(null); CardInfo cardInfo = CardRepository.instance.findCardsByClass(info.getCardClass().getCanonicalName()).stream().findFirst().orElse(null);
Assert.assertNotNull(cardInfo); Assert.assertNotNull(cardInfo);
Card card = cardInfo.getCard(); Card card = cardInfo.createCard();
Card secondCard = card.getSecondCardFace(); Card secondCard = card.getSecondCardFace();
if (secondCard != null) { if (secondCard != null) {
if (set.findCardInfoByClass(secondCard.getClass()).isEmpty()) { if (set.findCardInfoByClass(secondCard.getClass()).isEmpty()) {

View file

@ -65,7 +65,7 @@ public class ConjureCardEffect extends OneShotEffect {
} }
Set<Card> cards = new HashSet<>(); Set<Card> cards = new HashSet<>();
for (int i = 0; i < amount; i++) { for (int i = 0; i < amount; i++) {
Card card = cardInfo.getCard(); Card card = cardInfo.createCard();
cards.add(card); cards.add(card);
} }
game.loadCards(cards, source.getControllerId()); game.loadCards(cards, source.getControllerId());

View file

@ -70,7 +70,7 @@ public class DraftFromSpellbookEffect extends OneShotEffect {
return false; return false;
} }
Set<Card> cards = new HashSet<>(); Set<Card> cards = new HashSet<>();
cards.add(cardInfo.getCard()); cards.add(cardInfo.createCard());
game.loadCards(cards, player.getId()); game.loadCards(cards, player.getId());
player.moveCards(cards, Zone.HAND, source, game); player.moveCards(cards, Zone.HAND, source, game);
return true; return true;

View file

@ -105,7 +105,7 @@ public class MeldEffect extends OneShotEffect {
if (cardInfoList.isEmpty()) { if (cardInfoList.isEmpty()) {
return false; return false;
} }
MeldCard meldCard = (MeldCard) cardInfoList.get(0).getCard().copy(); MeldCard meldCard = (MeldCard) cardInfoList.get(0).createCard().copy();
meldCard.setOwnerId(controller.getId()); meldCard.setOwnerId(controller.getId());
meldCard.setTopHalfCard(meldWithCard, game); meldCard.setTopHalfCard(meldWithCard, game);
meldCard.setBottomHalfCard(sourceCard, game); meldCard.setBottomHalfCard(sourceCard, game);

View file

@ -232,7 +232,7 @@ public abstract class ExpansionSet implements Serializable {
} }
CardInfo cardInfo = cards.remove(RandomUtil.nextInt(cards.size())); CardInfo cardInfo = cards.remove(RandomUtil.nextInt(cards.size()));
Card card = cardInfo.getCard(); Card card = cardInfo.createCard();
if (card == null) { if (card == null) {
// card with error // card with error
return; return;
@ -273,7 +273,7 @@ public abstract class ExpansionSet implements Serializable {
.makeBooster() .makeBooster()
.stream() .stream()
.map(inBoosterMap::get) .map(inBoosterMap::get)
.map(CardInfo::getCard) .map(CardInfo::createCard)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@ -569,7 +569,7 @@ public abstract class ExpansionSet implements Serializable {
booster.forEach(card -> { booster.forEach(card -> {
List<CardInfo> reprints = this.savedReprints.getOrDefault(card.getName(), null); List<CardInfo> reprints = this.savedReprints.getOrDefault(card.getName(), null);
if (reprints != null && reprints.size() > 1) { if (reprints != null && reprints.size() > 1) {
Card newCard = reprints.get(RandomUtil.nextInt(reprints.size())).getCard(); Card newCard = reprints.get(RandomUtil.nextInt(reprints.size())).createCard();
if (newCard != null) { if (newCard != null) {
finalBooster.add(newCard); finalBooster.add(newCard);
return; return;

View file

@ -127,7 +127,7 @@ public class Sets extends HashMap<String, ExpansionSet> {
List<Card> cardPool = new ArrayList<>(); List<Card> cardPool = new ArrayList<>();
while (count < cardsCount) { while (count < cardsCount) {
CardInfo cardInfo = cards.get(RandomUtil.nextInt(cards.size())); CardInfo cardInfo = cards.get(RandomUtil.nextInt(cards.size()));
Card card = cardInfo != null ? cardInfo.getCard() : null; Card card = cardInfo != null ? cardInfo.createCard() : null;
if (card != null) { if (card != null) {
FilterMana manaCard = card.getColorIdentity(); FilterMana manaCard = card.getColorIdentity();

View file

@ -184,9 +184,9 @@ public class Deck implements Serializable, Copyable<Deck> {
} }
if (mockCards) { if (mockCards) {
return cardInfo.getMockCard(); return cardInfo.createMockCard();
} else { } else {
return cardInfo.getCard(); return cardInfo.createCard();
} }
} }

View file

@ -75,7 +75,7 @@ public class MockCard extends CardImpl {
} }
if (card.isModalDoubleFacedCard()) { if (card.isModalDoubleFacedCard()) {
ModalDoubleFacedCard mdfCard = (ModalDoubleFacedCard) card.getCard(); ModalDoubleFacedCard mdfCard = (ModalDoubleFacedCard) card.createCard();
CardInfo mdfSecondSide = new CardInfo(mdfCard.getRightHalfCard()); CardInfo mdfSecondSide = new CardInfo(mdfCard.getRightHalfCard());
this.secondSideCard = new MockCard(mdfSecondSide); this.secondSideCard = new MockCard(mdfSecondSide);
this.isModalDoubleFacedCard = true; this.isModalDoubleFacedCard = true;

View file

@ -238,11 +238,17 @@ public class CardInfo {
this.isExtraDeckCard = card.isExtraDeckCard(); this.isExtraDeckCard = card.isExtraDeckCard();
} }
public Card getCard() { /**
* Create normal card (with full abilities)
*/
public Card createCard() {
return CardImpl.createCard(className, new CardSetInfo(name, setCode, cardNumber, rarity, new CardGraphicInfo(FrameStyle.valueOf(frameStyle), variousArt))); return CardImpl.createCard(className, new CardSetInfo(name, setCode, cardNumber, rarity, new CardGraphicInfo(FrameStyle.valueOf(frameStyle), variousArt)));
} }
public Card getMockCard() { /**
* Create deck editor's mock card (with text only instead real abilities)
*/
public Card createMockCard() {
if (this.splitCard) { if (this.splitCard) {
return new MockSplitCard(this); return new MockSplitCard(this);
} else { } else {

View file

@ -121,7 +121,7 @@ public abstract class GameTinyLeadersImpl extends GameImpl {
default: default:
CardInfo cardInfo = CardRepository.instance.findCard(commanderName); CardInfo cardInfo = CardRepository.instance.findCard(commanderName);
if (cardInfo != null) { if (cardInfo != null) {
commander = cardInfo.getCard(); commander = cardInfo.createCard();
} }
} }
} }

View file

@ -44,7 +44,7 @@ public final class EmblemOfCard extends Emblem {
.orElseGet(() -> found.stream() .orElseGet(() -> found.stream()
.findFirst() .findFirst()
.orElseThrow(() -> new IllegalArgumentException("No real card for " + infoTypeForError + " " + cardName))) .orElseThrow(() -> new IllegalArgumentException("No real card for " + infoTypeForError + " " + cardName)))
.getCard(); .createCard();
} }
public static Card cardFromDeckInfo(DeckCardInfo info) { public static Card cardFromDeckInfo(DeckCardInfo info) {

View file

@ -93,7 +93,7 @@ class MomirEffect extends OneShotEffect {
if (expansionSet == null || !expansionSet.getSetType().isEternalLegal()) { if (expansionSet == null || !expansionSet.getSetType().isEternalLegal()) {
options.remove(index); options.remove(index);
} else { } else {
Card card = options.get(index).getCard(); Card card = options.get(index).createCard();
if (card != null) { if (card != null) {
token = CopyTokenFunction.createTokenCopy(card, game); token = CopyTokenFunction.createTokenCopy(card, game);
break; break;

View file

@ -96,7 +96,7 @@ public abstract class DraftCube {
} }
if (cardInfo != null) { if (cardInfo != null) {
booster.add(cardInfo.getCard()); booster.add(cardInfo.createCard());
done = true; done = true;
} else { } else {
logger.warn(new StringBuilder(this.getName()).append(" - Card not found: ").append(cardId.getName()).append(':').append(cardId.extension)); logger.warn(new StringBuilder(this.getName()).append(" - Card not found: ").append(cardId.getName()).append(':').append(cardId.extension));

View file

@ -81,7 +81,7 @@ public class RemixedSet implements Serializable {
return; return;
} }
CardInfo cardInfo = cards.remove(RandomUtil.nextInt(cards.size())); // so no duplicates in a booster CardInfo cardInfo = cards.remove(RandomUtil.nextInt(cards.size())); // so no duplicates in a booster
Card card = cardInfo.getCard(); Card card = cardInfo.createCard();
if (card == null) { if (card == null) {
return; return;
} }

View file

@ -73,7 +73,7 @@ public final class TournamentUtil {
List<Card> cards = new ArrayList<>(); List<Card> cards = new ArrayList<>();
if (!lands.isEmpty()) { if (!lands.isEmpty()) {
for (int i = 0; i < number; i++) { for (int i = 0; i < number; i++) {
Card land = lands.get(RandomUtil.nextInt(lands.size())).getCard(); Card land = lands.get(RandomUtil.nextInt(lands.size())).createCard();
cards.add(land); cards.add(land);
} }
} }