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);
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())) {
CardView pimpedCard = new CardView(acard);
@ -1751,7 +1751,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
for (CardView card : stack) {
CardInfo oldestCardInfo = CardRepository.instance.findOldestNonPromoVersionCard(card.getName());
if (oldestCardInfo != null) {
CardView oldestCardView = new CardView(oldestCardInfo.getMockCard());
CardView oldestCardView = new CardView(oldestCardInfo.createMockCard());
this.removeCardView(card);
eventSource.fireEvent(card, ClientEventType.DECK_REMOVE_SPECIFIC_CARD);
this.addCardView(oldestCardView, false);

View file

@ -64,7 +64,7 @@ public class VirtualCardInfo {
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) {

View file

@ -126,7 +126,7 @@ public class MageEditorPane extends JEditorPane {
if (cardView == null) {
CardInfo card = CardRepository.instance.findCards(cardName).stream().findFirst().orElse(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.repository.CardCriteria;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.cards.repository.ExpansionRepository;
import mage.client.dialog.PreferencesDialog;
import mage.client.util.sets.ConstructedFormats;
import mage.constants.CardType;
import mage.constants.ColoredManaSymbol;
import mage.constants.Rarity;
import mage.constants.SuperType;
import mage.util.RandomUtil;
import mage.util.TournamentUtil;
import java.util.*;
@ -230,6 +227,6 @@ public final class DeckGenerator {
private static Card getBasicLand(ColoredManaSymbol color, Map<String, List<CardInfo>> basicLands) {
String landName = DeckGeneratorPool.getBasicLandName(color.toString());
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) {
List<Card> matchingLandList = new ArrayList<>();
for(CardInfo landCardInfo: landCardsInfo) {
Card landCard = landCardInfo.getMockCard();
Card landCard = landCardInfo.createMockCard();
if(landProducesChosenColors(landCard)) {
matchingLandList.add(landCard);
}
@ -556,7 +556,7 @@ public class DeckGeneratorPool
if (retrievedCount > 0 && retrievedCount >= spellCount) {
int tries = 0;
while (count < spellCount) {
Card card = cardPool.get(RandomUtil.nextInt(retrievedCount)).getMockCard();
Card card = cardPool.get(RandomUtil.nextInt(retrievedCount)).createMockCard();
if (genPool.isValidSpellCard(card)) {
int cardCMC = card.getManaValue();
for (DeckGeneratorCMC.CMC deckCMC : deckCMCs) {

View file

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

View file

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

View file

@ -443,7 +443,7 @@ public class MageBook extends JComponent {
List<CardInfo> cards = CardRepository.instance.findCards(criteria);
cards.sort(new NaturalOrderCardNumberComparator());
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;
}

View file

@ -173,7 +173,7 @@ public class AddLandDialog extends MageDialog {
int foundLands = 0;
int foundNoneAfter = 0;
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;
if (useFullArt && (land.getFrameStyle() == FrameStyle.BFZ_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()) {
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) {
cards.put(simple.getId(), new CardView(card, simple));
}
@ -35,7 +35,7 @@ public final class CardsViewUtil {
Card card = loadedCards.get(key);
if (card == null) {
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);
}
if (card != null) {

View file

@ -27,7 +27,7 @@ public final class DeckUtil {
deck.setName(view.getName());
for (SimpleCardView cardView : view.getCards().values()) {
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) {
deck.getCards().add(card);
} else {
@ -36,7 +36,7 @@ public final class DeckUtil {
}
for (SimpleCardView cardView : view.getSideboard().values()) {
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) {
deck.getSideboard().add(card);
} else {

View file

@ -715,7 +715,7 @@ public final class SystemUtil {
Set<Card> cardsToLoad = new HashSet<>();
for (int i = 0; i < command.Amount; i++) {
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) {
cardsToLoad.add(card);
}
@ -783,7 +783,7 @@ public final class SystemUtil {
Set<Card> cardsToLoad = new LinkedHashSet<>();
for (int i = 0; i < amount; i++) {
cardsToLoad.add(cardInfo.getCard());
cardsToLoad.add(cardInfo.createCard());
}
game.loadCards(cardsToLoad, owner.getId());

View file

@ -49,7 +49,7 @@ public class MomirDuel extends GameImpl {
Player player = getPlayer(playerId);
if (player != null) {
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);

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)
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);

View file

@ -2283,7 +2283,7 @@ public class ComputerPlayer extends PlayerImpl {
}
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);
}
}

View file

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

View file

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

View file

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

View file

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

View file

@ -358,7 +358,7 @@ public final class Battlebond extends ExpansionSet {
//Check if the pack already contains a partner pair
if (partnerAllowed) {
//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) {
booster.add(card);
} else {

View file

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

View file

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

View file

@ -18,7 +18,7 @@ public class EmblemOfCardTest extends CardTestPlayerBase {
// Flying, lifelink
// Pay 7 life: Draw seven cards.
addEmblem(playerA, new EmblemOfCard(
CardRepository.instance.findCard("Griselbrand", true).getMockCard()
CardRepository.instance.findCard("Griselbrand", true).createMockCard()
));
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.
// {1}, {T}: Each player adds {B}{R}{G}.
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);
@ -66,7 +66,7 @@ public class EmblemOfCardTest extends CardTestPlayerBase {
public void testEmblemOfOmniscience() {
// You may cast spells from your hand without paying their mana costs.
addEmblem(playerA, new EmblemOfCard(
CardRepository.instance.findCard("Omniscience", true).getMockCard()
CardRepository.instance.findCard("Omniscience", true).createMockCard()
));
// Colossal Dreadmaw {4}{G}{G}
@ -85,7 +85,7 @@ public class EmblemOfCardTest extends CardTestPlayerBase {
public void testEmblemOfParadoxEngine() {
// Whenever you cast a spell, untap all nonland permanents you control.
addEmblem(playerA, new EmblemOfCard(
CardRepository.instance.findCard("Paradox Engine", true).getMockCard()
CardRepository.instance.findCard("Paradox Engine", true).createMockCard()
));
// {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
// control, it puts twice that many of those counters on that permanent instead.
addEmblem(playerA, new EmblemOfCard(
CardRepository.instance.findCard("Doubling Season", true).getMockCard()
CardRepository.instance.findCard("Doubling Season", true).createMockCard()
));
// {T}: Add {W}.
@ -191,7 +191,7 @@ public class EmblemOfCardTest extends CardTestPlayerBase {
// The first spell you cast each turn has cascade.
addEmblem(playerA, new EmblemOfCard(
CardRepository.instance.findCard("Maelstrom Nexus", true).getMockCard()
CardRepository.instance.findCard("Maelstrom Nexus", true).createMockCard()
));
// Grizzly Bears {1}{G}

View file

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

View file

@ -9,7 +9,7 @@ public class WrennAndSixTest {
@Test
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);
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) {
throw new IllegalArgumentException("Couldn't find the card " + cardName + " in the DB.");
}
Card card = cardInfo.getCard();
Card card = cardInfo.createCard();
FilterMana filterMana = card.getColorIdentity();
return filterMana.toString();
}

View file

@ -86,7 +86,7 @@ public class AbilityPickerTest extends CardTestPlayerBase {
private Abilities<Ability> getAbilitiesFromCard(String 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);
}
}

View file

@ -21,7 +21,6 @@ import mage.game.command.CommandObject;
import mage.game.command.Emblem;
import mage.game.match.MatchOptions;
import mage.game.permanent.Permanent;
import mage.game.permanent.PermanentCard;
import mage.game.permanent.PermanentToken;
import mage.player.ai.ComputerPlayer7;
import mage.player.ai.ComputerPlayerMCTS;
@ -683,7 +682,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
if (gameZone == Zone.BATTLEFIELD) {
for (int i = 0; i < count; i++) {
Card newCard = cardInfo.getCard();
Card newCard = cardInfo.createCard();
getBattlefieldCards(player).add(new PutToBattlefieldInfo(
newCard,
tapped
@ -699,7 +698,7 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
}
List<Card> cards = getCardList(gameZone, player);
for (int i = 0; i < count; i++) {
Card newCard = cardInfo.getCard();
Card newCard = cardInfo.createCard();
cards.add(newCard);
if (!aliasName.isEmpty()) {
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++) {
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++) {
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
public void test_PermanentImpl_Simple() {
CardInfo cardInfo = CardRepository.instance.findCard("Balduvian Bears");
Card newCard = cardInfo.getCard();
Card newCard = cardInfo.createCard();
Card permCard = CardUtil.getDefaultCardSideForBattlefield(currentGame, newCard);
PermanentImpl permanent = new PermanentCard(permCard, playerA.getId(), currentGame);
currentGame.addPermanent(permanent, 0);
@ -55,7 +55,7 @@ public class SerializationTest extends CardTestPlayerBase {
@Test
public void test_PermanentImpl_MarkedDamageInfo() {
CardInfo cardInfo = CardRepository.instance.findCard("Balduvian Bears");
Card newCard = cardInfo.getCard();
Card newCard = cardInfo.createCard();
Card permCard = CardUtil.getDefaultCardSideForBattlefield(currentGame, newCard);
PermanentImpl permanent = new PermanentCard(permCard, playerA.getId(), currentGame);
currentGame.addPermanent(permanent, 0);
@ -77,7 +77,7 @@ public class SerializationTest extends CardTestPlayerBase {
private void processSingleCard(CardInfo cardInfo) {
// compress each card's part
Card newCard = cardInfo.getCard();
Card newCard = cardInfo.createCard();
CardUtil.getObjectPartsAsObjects(newCard).stream()
.map(Card.class::cast)
.forEach(card -> {

View file

@ -49,8 +49,8 @@ public class AliasesApiTest extends CardTestPlayerBase {
Assert.assertFalse(CardUtil.haveSameNames("Name1", "Name2", true));
// name with split card
Card splitCard1 = CardRepository.instance.findCard("Armed // Dangerous").getCard();
Card splitCard2 = CardRepository.instance.findCard("Alive // Well").getCard();
Card splitCard1 = CardRepository.instance.findCard("Armed // Dangerous").createCard();
Card splitCard2 = CardRepository.instance.findCard("Alive // Well").createCard();
Assert.assertTrue(CardUtil.haveSameNames(splitCard1, "Armed", currentGame));
Assert.assertTrue(CardUtil.haveSameNames(splitCard1, "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));
// 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 faceDownSpell = new Spell(bearCard, bearCard.getSpellAbility(), playerA.getId(), Zone.HAND, 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) {
ManaCost unpaid = new ManaCostsImpl<>(manaToPay);
Card card = CardRepository.instance.findCard(landName).getCard();
Card card = CardRepository.instance.findCard(landName).createCard();
Assert.assertNotNull(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) {
ManaCost unpaid = new ManaCostsImpl<>(manaToPay);
Card card = CardRepository.instance.findCard(landName).getCard();
Card card = CardRepository.instance.findCard(landName).createCard();
Assert.assertNotNull(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);
Assert.assertNotNull(cardInfo);
Card card = cardInfo.getCard();
Card card = cardInfo.createCard();
Card secondCard = card.getSecondCardFace();
if (secondCard != null) {
if (set.findCardInfoByClass(secondCard.getClass()).isEmpty()) {

View file

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

View file

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

View file

@ -105,7 +105,7 @@ public class MeldEffect extends OneShotEffect {
if (cardInfoList.isEmpty()) {
return false;
}
MeldCard meldCard = (MeldCard) cardInfoList.get(0).getCard().copy();
MeldCard meldCard = (MeldCard) cardInfoList.get(0).createCard().copy();
meldCard.setOwnerId(controller.getId());
meldCard.setTopHalfCard(meldWithCard, 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()));
Card card = cardInfo.getCard();
Card card = cardInfo.createCard();
if (card == null) {
// card with error
return;
@ -273,7 +273,7 @@ public abstract class ExpansionSet implements Serializable {
.makeBooster()
.stream()
.map(inBoosterMap::get)
.map(CardInfo::getCard)
.map(CardInfo::createCard)
.collect(Collectors.toList());
}
@ -569,7 +569,7 @@ public abstract class ExpansionSet implements Serializable {
booster.forEach(card -> {
List<CardInfo> reprints = this.savedReprints.getOrDefault(card.getName(), null);
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) {
finalBooster.add(newCard);
return;

View file

@ -127,7 +127,7 @@ public class Sets extends HashMap<String, ExpansionSet> {
List<Card> cardPool = new ArrayList<>();
while (count < cardsCount) {
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) {
FilterMana manaCard = card.getColorIdentity();

View file

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

View file

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

View file

@ -238,11 +238,17 @@ public class CardInfo {
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)));
}
public Card getMockCard() {
/**
* Create deck editor's mock card (with text only instead real abilities)
*/
public Card createMockCard() {
if (this.splitCard) {
return new MockSplitCard(this);
} else {

View file

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

View file

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

View file

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

View file

@ -96,7 +96,7 @@ public abstract class DraftCube {
}
if (cardInfo != null) {
booster.add(cardInfo.getCard());
booster.add(cardInfo.createCard());
done = true;
} else {
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;
}
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) {
return;
}

View file

@ -73,7 +73,7 @@ public final class TournamentUtil {
List<Card> cards = new ArrayList<>();
if (!lands.isEmpty()) {
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);
}
}