* GUI: fixed wrong deck validation in Deck Editor for partners and planeswalker's commanders;

This commit is contained in:
Oleg Agafonov 2021-07-25 10:31:22 +04:00
parent 4b0381e074
commit 5dcdbcfd4f
3 changed files with 31 additions and 3 deletions

View file

@ -1,9 +1,13 @@
package mage.client.deckeditor; package mage.client.deckeditor;
import mage.cards.Card;
import mage.cards.decks.Deck; import mage.cards.decks.Deck;
import mage.cards.decks.DeckValidator; import mage.cards.decks.DeckValidator;
import mage.cards.mock.MockCard;
import mage.cards.mock.MockSplitCard;
import mage.client.components.LegalityLabel; import mage.client.components.LegalityLabel;
import mage.deck.*; import mage.deck.*;
import org.apache.log4j.Logger;
import javax.swing.*; import javax.swing.*;
import java.util.Arrays; import java.util.Arrays;
@ -14,6 +18,9 @@ import java.util.stream.Stream;
* @author Elandril * @author Elandril
*/ */
public class DeckLegalityPanel extends javax.swing.JPanel { public class DeckLegalityPanel extends javax.swing.JPanel {
private static final Logger logger = Logger.getLogger(DeckLegalityPanel.class);
/** /**
* Creates new form DeckLegalityPanel * Creates new form DeckLegalityPanel
*/ */
@ -112,11 +119,33 @@ public class DeckLegalityPanel extends javax.swing.JPanel {
add(button); add(button);
} }
private boolean isMockCard(Card card) {
return card instanceof MockCard || card instanceof MockSplitCard;
}
public void validateDeck(Deck deck) { public void validateDeck(Deck deck) {
// Non game GUI like Deck Editor works with Mock cards (fake cards with texts only), but validate must use
// real cards all the time. So convert it here before check.
final Deck deckToValidate;
if (deck.getCards().stream().noneMatch(this::isMockCard)
&& deck.getSideboard().stream().noneMatch(this::isMockCard)) {
// contains real cards, e.g. it's a game
deckToValidate = deck;
} else {
// contains mock cards, e.g. it's a Deck Editor
try {
deckToValidate = Deck.load(deck.getDeckCardLists(), true, false);
} catch (Exception ex) {
logger.error("Can't load real deck cards for validate: " + ex.getMessage(), ex);
return;
}
}
Arrays.stream(getComponents()) Arrays.stream(getComponents())
.filter(LegalityLabel.class::isInstance) .filter(LegalityLabel.class::isInstance)
.map(LegalityLabel.class::cast) .map(LegalityLabel.class::cast)
.forEach(label -> label.validateDeck(deck)); .forEach(label -> label.validateDeck(deckToValidate));
} }
} }

View file

@ -145,7 +145,6 @@ public class Deck implements Serializable {
deckCardLists.setName(name); deckCardLists.setName(name);
for (Card card : cards) { for (Card card : cards) {
deckCardLists.getCards().add(new DeckCardInfo(card.getName(), card.getCardNumber(), card.getExpansionSetCode())); deckCardLists.getCards().add(new DeckCardInfo(card.getName(), card.getCardNumber(), card.getExpansionSetCode()));
} }
for (Card card : sideboard) { for (Card card : sideboard) {

View file

@ -14,7 +14,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* Mock card for GUI (deck editor and panels) * Mock card for GUI (deck editor and panels, contains only texts)
* *
* @author North * @author North
*/ */