From 01cf9614d607c8b8dc4ceeed152b8014f3acb31c Mon Sep 17 00:00:00 2001 From: Chatziargyriou Eleftheria <36453738+Sedictious@users.noreply.github.com> Date: Fri, 22 Jun 2018 18:53:45 +0300 Subject: [PATCH 01/11] Update Battlebond.java --- Mage.Sets/src/mage/sets/Battlebond.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Mage.Sets/src/mage/sets/Battlebond.java b/Mage.Sets/src/mage/sets/Battlebond.java index 94263d01b07..473a3f65186 100644 --- a/Mage.Sets/src/mage/sets/Battlebond.java +++ b/Mage.Sets/src/mage/sets/Battlebond.java @@ -9,23 +9,27 @@ import mage.constants.SetType; * @author TheElk801 */ public final class Battlebond extends ExpansionSet { - + private static final Battlebond instance = new Battlebond(); - + public int i; + public static Battlebond getInstance() { return instance; } - - private Battlebond() { + + + public Battlebond() { super("Battlebond", "BBD", ExpansionSet.buildDate(2018, 6, 8), SetType.SUPPLEMENTAL); this.blockName = "Battlebond"; this.hasBasicLands = false; this.hasBoosters = true; + this.PartnerMechanic = true; this.numBoosterLands = 0; this.numBoosterCommon = 11; this.numBoosterUncommon = 3; this.numBoosterRare = 1; this.ratioBoosterMythic = 8; + cards.add(new SetCardInfo("Aim High", 189, Rarity.UNCOMMON, mage.cards.a.AimHigh.class)); cards.add(new SetCardInfo("Angel of Retribution", 86, Rarity.UNCOMMON, mage.cards.a.AngelOfRetribution.class)); cards.add(new SetCardInfo("Angelic Chorus", 87, Rarity.RARE, mage.cards.a.AngelicChorus.class)); @@ -283,4 +287,5 @@ public final class Battlebond extends ExpansionSet { cards.add(new SetCardInfo("Zndrsplt's Judgment", 43, Rarity.RARE, mage.cards.z.ZndrspltsJudgment.class)); cards.add(new SetCardInfo("Zndrsplt, Eye of Wisdom", 5, Rarity.RARE, mage.cards.z.ZndrspltEyeOfWisdom.class)); } + } From d75441093419d41e851f624ff4e6e29e27f2b65f Mon Sep 17 00:00:00 2001 From: Chatziargyriou Eleftheria <36453738+Sedictious@users.noreply.github.com> Date: Fri, 22 Jun 2018 18:57:13 +0300 Subject: [PATCH 02/11] Add booster generator for Battlebond packs --- .../main/java/mage/cards/ExpansionSet.java | 97 ++++++++++++++++++- 1 file changed, 95 insertions(+), 2 deletions(-) diff --git a/Mage/src/main/java/mage/cards/ExpansionSet.java b/Mage/src/main/java/mage/cards/ExpansionSet.java index 290ca6f63c9..d03b37049a2 100644 --- a/Mage/src/main/java/mage/cards/ExpansionSet.java +++ b/Mage/src/main/java/mage/cards/ExpansionSet.java @@ -4,6 +4,7 @@ package mage.cards; import mage.cards.repository.CardCriteria; import mage.cards.repository.CardInfo; import mage.cards.repository.CardRepository; +import mage.abilities.Ability; import mage.constants.Rarity; import mage.constants.SetType; import mage.util.CardUtil; @@ -12,6 +13,7 @@ import mage.util.RandomUtil; import java.io.Serializable; import java.util.*; import java.util.stream.Collectors; +import mage.abilities.keyword.PartnerWithAbility; /** * @author BetaSteward_at_googlemail.com @@ -20,7 +22,8 @@ public abstract class ExpansionSet implements Serializable { public final static CardGraphicInfo NON_FULL_USE_VARIOUS = new CardGraphicInfo(null, true); public final static CardGraphicInfo FULL_ART_BFZ_VARIOUS = new CardGraphicInfo(FrameStyle.BFZ_FULL_ART_BASIC, true); - + + public class SetCardInfo implements Serializable { private final String name; @@ -96,7 +99,8 @@ public abstract class ExpansionSet implements Serializable { protected int numBoosterDoubleFaced; // -1 = include normally 0 = exclude 1-n = include explicit protected int ratioBoosterMythic; protected boolean needsLegends = false; - + protected boolean PartnerMechanic = false; + protected int maxCardNumberInBooster; // used to omit cards with collector numbers beyond the regular cards in a set for boosters protected final EnumMap> savedCards; @@ -171,7 +175,36 @@ public abstract class ExpansionSet implements Serializable { return theBooster; } + + protected int PartnerCheck(List booster, boolean partnerAllowed, int max, int i){ + for (Ability ability:booster.get(booster.size() - 1).getAbilities()){ + //Check if fetched card has the PartnerWithAbility + if (ability instanceof PartnerWithAbility) { + //Check if the pack already contains a partner pair + if (partnerAllowed){ + //Added card always replaces a common card + Card card = CardRepository.instance.findCard(((PartnerWithAbility) ability).getPartnerName()).getCard(); + if (i booster, List cards) { if (!cards.isEmpty()) { CardInfo cardInfo = cards.remove(RandomUtil.nextInt(cards.size())); @@ -185,19 +218,79 @@ public abstract class ExpansionSet implements Serializable { } public List createBooster() { + if (needsLegends) { for (int i = 0; i < 100000; i++) {//don't want to somehow loop forever List booster = tryBooster(); for (Card card : booster) { if (card.isLegendary() && card.isCreature()) {// Dominaria packs must contain at least one legendary creature. return booster; + } } } } + //Battlebond packs alway contain both partners + if (PartnerMechanic){ + List booster = createPartnerBooster(); + return booster; + } return tryBooster(); } + + public List createPartnerBooster(){ + + List booster = new ArrayList<>(); + + boolean partnerAllowed = true; + + List uncommons = getCardsByRarity(Rarity.UNCOMMON); + for (int i = 0; i < numBoosterUncommon; i++) { + while (true){ + addToBooster(booster, uncommons); + int check = PartnerCheck(booster, partnerAllowed, numBoosterUncommon - 1, i); + if (check == 1){break;} + if (check == 2){ + partnerAllowed = false; + //Be sure to account for the added card + if (i != numBoosterUncommon - 1){i+=1;} + break;} + } + } + + int numSpecialCommons = getNumberOfSpecialCommons(); + int numCommonsToGenerate = numBoosterCommon - numSpecialCommons; + + List commons = getCardsByRarity(Rarity.COMMON); + for (int i = 0; i < numCommonsToGenerate; i++) { + addToBooster(booster, commons); + } + + List rares = getCardsByRarity(Rarity.RARE); + List mythics = getCardsByRarity(Rarity.MYTHIC); + for (int i = 0; i < numBoosterRare; i++) { + if (ratioBoosterMythic > 0 && RandomUtil.nextInt(ratioBoosterMythic) == 0) { + while (true){ + addToBooster(booster, mythics); + int check = PartnerCheck(booster, partnerAllowed, -1, 1); + if (check == 1){break;} + if (check == 2){partnerAllowed = false; break;} + } + } + + else { + while (true){ + addToBooster(booster, rares); + int check = PartnerCheck(booster, partnerAllowed, -1, 1); + if (check == 1){break;} + if (check == 2){partnerAllowed = false; break;} + } + } + } + return booster; + } + public List tryBooster() { List booster = new ArrayList<>(); if (!hasBoosters) { From a1a7b1c59b5fd832ebe887d124c4c3fdb1caaabf Mon Sep 17 00:00:00 2001 From: Chatziargyriou Eleftheria <36453738+Sedictious@users.noreply.github.com> Date: Fri, 22 Jun 2018 18:57:44 +0300 Subject: [PATCH 03/11] Add test for Battlebond Test Battlebond's partner mechanic --- .../mage/test/sets/BoosterGenerationTest.java | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/Mage.Tests/src/test/java/org/mage/test/sets/BoosterGenerationTest.java b/Mage.Tests/src/test/java/org/mage/test/sets/BoosterGenerationTest.java index 9511ab69d23..30533c64dbd 100644 --- a/Mage.Tests/src/test/java/org/mage/test/sets/BoosterGenerationTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/sets/BoosterGenerationTest.java @@ -4,10 +4,13 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; +import mage.abilities.Ability; import mage.cards.Card; import mage.cards.repository.CardInfo; import mage.cards.repository.CardScanner; import mage.sets.FateReforged; +import mage.sets.Battlebond; +import mage.abilities.keyword.PartnerWithAbility; import mage.sets.MastersEditionII; import mage.sets.MastersEditionIV; import static org.junit.Assert.assertFalse; @@ -28,11 +31,33 @@ public class BoosterGenerationTest extends MageTestBase { public void setUp() { CardScanner.scan(); } - + private static final List basics = Arrays.asList("Plains", "Island", "Swamp", "Mountain", "Forest"); + + @Test + public void testBattlebond(){ + List booster = Battlebond.getInstance().createBooster(); + boolean foundPartner = false; + String Partner = ""; + + for (Card card : booster){ + for (Ability ability : card.getAbilities()){ + if (ability instanceof PartnerWithAbility) { + if (foundPartner){ + Assert.assertEquals(Partner, card.getName()); + } + else{ + foundPartner = true; + Partner = ((PartnerWithAbility) ability).getPartnerName(); + } + } + } + } + } @Test public void testFateReforged() { + List tapland = Arrays.asList( "Bloodfell Caves", "Blossoming Sands", "Dismal Backwater", "Jungle Hollow", "Rugged Highlands", "Scoured Barrens", "Swiftwater Cliffs", "Thornwood Falls", "Tranquil Cove", "Wind-Scarred Crag"); @@ -44,7 +69,6 @@ public class BoosterGenerationTest extends MageTestBase { || contains(booster, basics, null)); // assertFalse(str(booster), contains(booster, basics, null)); } - @Test public void testMastersEditionII() { List snowCoveredLand = Arrays.asList( From f980224239a22797d7f93b8627ccdf341c51341b Mon Sep 17 00:00:00 2001 From: Chatziargyriou Eleftheria <36453738+Sedictious@users.noreply.github.com> Date: Fri, 22 Jun 2018 19:22:57 +0300 Subject: [PATCH 04/11] Update ExpansionSet.java --- Mage/src/main/java/mage/cards/ExpansionSet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage/src/main/java/mage/cards/ExpansionSet.java b/Mage/src/main/java/mage/cards/ExpansionSet.java index d03b37049a2..b47bb6b25dc 100644 --- a/Mage/src/main/java/mage/cards/ExpansionSet.java +++ b/Mage/src/main/java/mage/cards/ExpansionSet.java @@ -183,7 +183,7 @@ public abstract class ExpansionSet implements Serializable { if (ability instanceof PartnerWithAbility) { //Check if the pack already contains a partner pair if (partnerAllowed){ - //Added card always replaces a common card + //Added card always replaces an uncommon card Card card = CardRepository.instance.findCard(((PartnerWithAbility) ability).getPartnerName()).getCard(); if (i Date: Fri, 22 Jun 2018 20:08:51 +0300 Subject: [PATCH 05/11] Update Battlebond.java --- Mage.Sets/src/mage/sets/Battlebond.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/sets/Battlebond.java b/Mage.Sets/src/mage/sets/Battlebond.java index 473a3f65186..d362a9d5dcc 100644 --- a/Mage.Sets/src/mage/sets/Battlebond.java +++ b/Mage.Sets/src/mage/sets/Battlebond.java @@ -23,7 +23,7 @@ public final class Battlebond extends ExpansionSet { this.blockName = "Battlebond"; this.hasBasicLands = false; this.hasBoosters = true; - this.PartnerMechanic = true; + this.hasPartnerMechanic = true; this.numBoosterLands = 0; this.numBoosterCommon = 11; this.numBoosterUncommon = 3; From 25d7f9c83ba40f6e200245cc77742843299d48cf Mon Sep 17 00:00:00 2001 From: Chatziargyriou Eleftheria <36453738+Sedictious@users.noreply.github.com> Date: Fri, 22 Jun 2018 20:09:36 +0300 Subject: [PATCH 06/11] Update ExpansionSet.java --- Mage/src/main/java/mage/cards/ExpansionSet.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Mage/src/main/java/mage/cards/ExpansionSet.java b/Mage/src/main/java/mage/cards/ExpansionSet.java index b47bb6b25dc..c7eb2d07a22 100644 --- a/Mage/src/main/java/mage/cards/ExpansionSet.java +++ b/Mage/src/main/java/mage/cards/ExpansionSet.java @@ -99,7 +99,7 @@ public abstract class ExpansionSet implements Serializable { protected int numBoosterDoubleFaced; // -1 = include normally 0 = exclude 1-n = include explicit protected int ratioBoosterMythic; protected boolean needsLegends = false; - protected boolean PartnerMechanic = false; + protected boolean hasPartnerMechanic = false; protected int maxCardNumberInBooster; // used to omit cards with collector numbers beyond the regular cards in a set for boosters @@ -231,7 +231,7 @@ public abstract class ExpansionSet implements Serializable { } } //Battlebond packs alway contain both partners - if (PartnerMechanic){ + if (hasPartnerMechanic){ List booster = createPartnerBooster(); return booster; } From 34347805f52463c568f7223366d039c208d4b032 Mon Sep 17 00:00:00 2001 From: Chatziargyriou Eleftheria <36453738+Sedictious@users.noreply.github.com> Date: Sat, 23 Jun 2018 21:51:10 +0300 Subject: [PATCH 07/11] Update Battlebond.java --- Mage.Sets/src/mage/sets/Battlebond.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Mage.Sets/src/mage/sets/Battlebond.java b/Mage.Sets/src/mage/sets/Battlebond.java index d362a9d5dcc..6ffde9c6a28 100644 --- a/Mage.Sets/src/mage/sets/Battlebond.java +++ b/Mage.Sets/src/mage/sets/Battlebond.java @@ -11,7 +11,6 @@ import mage.constants.SetType; public final class Battlebond extends ExpansionSet { private static final Battlebond instance = new Battlebond(); - public int i; public static Battlebond getInstance() { return instance; From cf096ee8a831255c83388eafbe2e3c0c2ccd077f Mon Sep 17 00:00:00 2001 From: Chatziargyriou Eleftheria <36453738+Sedictious@users.noreply.github.com> Date: Sat, 23 Jun 2018 21:51:51 +0300 Subject: [PATCH 08/11] Update Battlebond.java --- Mage.Sets/src/mage/sets/Battlebond.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/sets/Battlebond.java b/Mage.Sets/src/mage/sets/Battlebond.java index 6ffde9c6a28..3c13280af43 100644 --- a/Mage.Sets/src/mage/sets/Battlebond.java +++ b/Mage.Sets/src/mage/sets/Battlebond.java @@ -17,7 +17,7 @@ public final class Battlebond extends ExpansionSet { } - public Battlebond() { + private Battlebond() { super("Battlebond", "BBD", ExpansionSet.buildDate(2018, 6, 8), SetType.SUPPLEMENTAL); this.blockName = "Battlebond"; this.hasBasicLands = false; From 17cd5792d4a99b289490c60c5210bd3a629fd7ec Mon Sep 17 00:00:00 2001 From: Chatziargyriou Eleftheria <36453738+Sedictious@users.noreply.github.com> Date: Tue, 31 Jul 2018 17:09:56 +0300 Subject: [PATCH 09/11] Update ExpansionSet.java --- Mage/src/main/java/mage/cards/ExpansionSet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage/src/main/java/mage/cards/ExpansionSet.java b/Mage/src/main/java/mage/cards/ExpansionSet.java index 79ea25f9023..78129607430 100644 --- a/Mage/src/main/java/mage/cards/ExpansionSet.java +++ b/Mage/src/main/java/mage/cards/ExpansionSet.java @@ -286,7 +286,7 @@ public abstract class ExpansionSet implements Serializable { } //Battlebond packs alway contain both partners if (hasPartnerMechanic){ - List booster = createPartnerBooster(); + booster = createPartnerBooster(); return booster; } return tryBooster(); From da383dbecc7a9b648edcaf4b5f4f7e354b0dd65d Mon Sep 17 00:00:00 2001 From: Chatziargyriou Eleftheria <36453738+Sedictious@users.noreply.github.com> Date: Tue, 31 Jul 2018 17:17:58 +0300 Subject: [PATCH 10/11] Update ExpansionSet.java --- Mage/src/main/java/mage/cards/ExpansionSet.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Mage/src/main/java/mage/cards/ExpansionSet.java b/Mage/src/main/java/mage/cards/ExpansionSet.java index 78129607430..42ef02c8f2e 100644 --- a/Mage/src/main/java/mage/cards/ExpansionSet.java +++ b/Mage/src/main/java/mage/cards/ExpansionSet.java @@ -231,7 +231,14 @@ public abstract class ExpansionSet implements Serializable { return booster; } } + + //Battlebond packs alway contain both partners + if (hasPartnerMechanic){ + booster = createPartnerBooster(); + return booster; + } return tryBooster(); + } protected boolean boosterIsValid(List booster) { @@ -284,12 +291,6 @@ public abstract class ExpansionSet implements Serializable { } } } - //Battlebond packs alway contain both partners - if (hasPartnerMechanic){ - booster = createPartnerBooster(); - return booster; - } - return tryBooster(); // check that all colors are present if (magicColors.stream().anyMatch(color -> colorWeight.get(color) < 60)) { From 2731897add6d9192b04c96db765192e1a1dbfc2e Mon Sep 17 00:00:00 2001 From: Chatziargyriou Eleftheria <36453738+Sedictious@users.noreply.github.com> Date: Tue, 31 Jul 2018 17:24:20 +0300 Subject: [PATCH 11/11] Update ExpansionSet.java --- Mage/src/main/java/mage/cards/ExpansionSet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage/src/main/java/mage/cards/ExpansionSet.java b/Mage/src/main/java/mage/cards/ExpansionSet.java index 42ef02c8f2e..0333c47f689 100644 --- a/Mage/src/main/java/mage/cards/ExpansionSet.java +++ b/Mage/src/main/java/mage/cards/ExpansionSet.java @@ -234,7 +234,7 @@ public abstract class ExpansionSet implements Serializable { //Battlebond packs alway contain both partners if (hasPartnerMechanic){ - booster = createPartnerBooster(); + List booster = createPartnerBooster(); return booster; } return tryBooster();