From ca189af388e2775da7002bea805bbb0b0bc597bf Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Thu, 14 Oct 2021 19:34:54 -0400 Subject: [PATCH] added Friends forever support to regular commander --- .../src/mage/deck/Commander.java | 44 +++++++++++-------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java index 9dccf0fde5f..fe178700b39 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Commander.java @@ -1,9 +1,11 @@ package mage.deck; +import mage.MageObject; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.CanBeYourCommanderAbility; import mage.abilities.keyword.CompanionAbility; +import mage.abilities.keyword.FriendsForeverAbility; import mage.abilities.keyword.PartnerAbility; import mage.abilities.keyword.PartnerWithAbility; import mage.cards.Card; @@ -14,6 +16,7 @@ import mage.cards.decks.Deck; import mage.cards.decks.DeckValidatorErrorType; import mage.constants.CardType; import mage.filter.FilterMana; +import mage.util.CardUtil; import mage.util.ManaUtil; import java.util.*; @@ -183,6 +186,26 @@ public class Commander extends Constructed { for (Card commander : commanders) { commanderNames.add(commander.getName()); } + if (commanders.size() == 2 + && commanders + .stream() + .map(MageObject::getAbilities) + .filter(abilities -> abilities.contains(PartnerAbility.getInstance())) + .count() != 2 + && commanders + .stream() + .map(MageObject::getAbilities) + .filter(abilities -> abilities.contains(FriendsForeverAbility.getInstance())) + .count() != 2 + && CardUtil + .castStream(commanders.stream().map(MageObject::getAbilities), PartnerWithAbility.class) + .map(PartnerWithAbility::getPartnerName) + .allMatch(commanderNames::contains)) { + for (Card commander : commanders) { + addError(DeckValidatorErrorType.PRIMARY, commander.getName(), "Commander with invalid Partner (" + commander.getName() + ')', true); + valid = false; + } + } for (Card commander : commanders) { if (bannedCommander.contains(commander.getName())) { addError(DeckValidatorErrorType.PRIMARY, commander.getName(), "Commander banned (" + commander.getName() + ')', true); @@ -193,24 +216,9 @@ public class Commander extends Constructed { addError(DeckValidatorErrorType.PRIMARY, commander.getName(), "Commander invalid (" + commander.getName() + ')', true); valid = false; } - if (commanders.size() == 2) { - if (commander.getAbilities().contains(PartnerAbility.getInstance())) { - if (bannedPartner.contains(commander.getName())) { - addError(DeckValidatorErrorType.PRIMARY, commander.getName(), "Commander Partner banned (" + commander.getName() + ')', true); - valid = false; - } - } else { - boolean partnersWith = commander.getAbilities() - .stream() - .filter(PartnerWithAbility.class::isInstance) - .map(PartnerWithAbility.class::cast) - .map(PartnerWithAbility::getPartnerName) - .anyMatch(commanderNames::contains); - if (!partnersWith) { - addError(DeckValidatorErrorType.PRIMARY, commander.getName(), "Commander without Partner (" + commander.getName() + ')', true); - valid = false; - } - } + if (commanders.size() == 2 && bannedPartner.contains(commander.getName())) { + addError(DeckValidatorErrorType.PRIMARY, commander.getName(), "Commander Partner banned (" + commander.getName() + ')', true); + valid = false; } ManaUtil.collectColorIdentity(colorIdentity, commander.getColorIdentity()); }