From 4a7bf89d8f9999af4270f1738d34f208c39833c0 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Wed, 16 Oct 2019 12:38:30 -0400 Subject: [PATCH] added support for banned partners in commander variants --- .../src/mage/deck/Commander.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 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 431aa35cbf4..89309735351 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 @@ -21,7 +21,8 @@ import java.util.*; */ public class Commander extends Constructed { - protected List bannedCommander = new ArrayList<>(); + protected final List bannedCommander = new ArrayList<>(); + protected final List bannedPartner = new ArrayList<>(); protected boolean partnerAllowed = true; public Commander() { @@ -129,18 +130,23 @@ public class Commander extends Constructed { invalid.put("Commander", "Commander invalid (" + commander.getName() + ')'); valid = false; } - if (deck.getSideboard().size() == 2 && !commander.getAbilities().contains(PartnerAbility.getInstance())) { - boolean partnersWith = false; - for (Ability ability : commander.getAbilities()) { - if (ability instanceof PartnerWithAbility - && commanderNames.contains(((PartnerWithAbility) ability).getPartnerName())) { - partnersWith = true; - break; + if (deck.getSideboard().size() == 2) { + if (commander.getAbilities().contains(PartnerAbility.getInstance())) { + if (bannedPartner.contains(commander.getName())) { + invalid.put("Commander", "Partner banned (" + commander.getName() + ')'); + valid = false; + } + } else { + boolean partnersWith = commander.getAbilities() + .stream() + .filter(PartnerWithAbility.class::isInstance) + .map(PartnerWithAbility.class::cast) + .map(PartnerWithAbility::getPartnerName) + .anyMatch(commanderNames::contains); + if (!partnersWith) { + invalid.put("Commander", "Commander without Partner (" + commander.getName() + ')'); + valid = false; } - } - if (!partnersWith) { - invalid.put("Commander", "Commander without Partner (" + commander.getName() + ')'); - valid = false; } } ManaUtil.collectColorIdentity(colorIdentity, commander.getColorIdentity());