From 36c004122ab525f53afec266018a09377de40fd8 Mon Sep 17 00:00:00 2001 From: Quercitron Date: Sun, 8 Jul 2018 01:19:49 +0300 Subject: [PATCH] Fix dual lands generation in the Core Set 2019 boosters --- Mage.Sets/src/mage/sets/CoreSet2019.java | 35 +++++-------------- .../mage/test/sets/BoosterGenerationTest.java | 16 +++++++++ .../main/java/mage/cards/ExpansionSet.java | 5 +-- 3 files changed, 27 insertions(+), 29 deletions(-) diff --git a/Mage.Sets/src/mage/sets/CoreSet2019.java b/Mage.Sets/src/mage/sets/CoreSet2019.java index 64bdfbc7507..525de25c51d 100644 --- a/Mage.Sets/src/mage/sets/CoreSet2019.java +++ b/Mage.Sets/src/mage/sets/CoreSet2019.java @@ -30,8 +30,8 @@ public final class CoreSet2019 extends ExpansionSet { super("Core Set 2019", "M19", ExpansionSet.buildDate(2018, 7, 13), SetType.CORE); this.hasBoosters = true; this.hasBasicLands = true; - this.numBoosterSpecial = 1; - this.numBoosterLands = 0; + this.numBoosterSpecial = 0; + this.numBoosterLands = 1; this.numBoosterCommon = 10; this.numBoosterUncommon = 3; this.numBoosterRare = 1; @@ -41,7 +41,8 @@ public final class CoreSet2019 extends ExpansionSet { // Core 2019 boosters have a 5/12 chance of basic land being replaced // with the common taplands, which DO NOT appear in the common slot. - this.ratioBoosterSpecialLand = 5/12; + this.ratioBoosterSpecialLand = 12; + this.ratioBoosterSpecialLandNumerator = 5; cards.add(new SetCardInfo("Abnormal Endurance", 85, Rarity.COMMON, mage.cards.a.AbnormalEndurance.class)); cards.add(new SetCardInfo("Act of Treason", 127, Rarity.COMMON, mage.cards.a.ActOfTreason.class)); @@ -362,7 +363,7 @@ public final class CoreSet2019 extends ExpansionSet { @Override public List getCardsByRarity(Rarity rarity) { - // Common cards retrievement of Fate Reforged boosters - prevent the retrievement of the common lands (e.g. Blossoming Sands) + // Common cards retrievement of Core Set 2019 boosters - prevent the retrievement of the common lands (e.g. Meandering River) if (rarity == Rarity.COMMON) { List savedCardsInfos = savedCards.get(rarity); if (savedCardsInfos == null) { @@ -381,20 +382,6 @@ public final class CoreSet2019 extends ExpansionSet { return super.getCardsByRarity(rarity); } } - - @Override - public List getSpecialCommon() { - List specialCommons = new ArrayList<>(); - if (savedSpecialCommon.isEmpty()) { - CardCriteria criteria = new CardCriteria(); - criteria.rarities(Rarity.COMMON).setCodes(this.code).types(CardType.LAND); - savedSpecialCommon = CardRepository.instance.findCards(criteria); - criteria.rarities(Rarity.LAND).setCodes(this.code); - savedSpecialCommon.addAll(CardRepository.instance.findCards(criteria)); - } - specialCommons.addAll(savedSpecialCommon); - return specialCommons; - } @Override // the common taplands replacing the basic land @@ -402,16 +389,10 @@ public final class CoreSet2019 extends ExpansionSet { { if (savedSpecialLand.isEmpty()) { - List TaplandNames = Arrays.asList( - "Cinder Barrens", "Forsaken Sanctuary", "Foul Orchard", - "Highland Lake", "Meandering River", "Stone Quarry", - "Submerged Boneyard", "Timber Gorge", "Tranquil Expanse", - "Woodland Stream" - ); - CardCriteria criteria = new CardCriteria(); - criteria.setCodes("M19"); - for (String name: TaplandNames) { criteria.nameExact(name); } + criteria.setCodes(this.code); + criteria.rarities(Rarity.COMMON); + criteria.types(CardType.LAND); savedSpecialLand.addAll(CardRepository.instance.findCards(criteria)); } 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..b6da9a2d9e5 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 @@ -7,6 +7,9 @@ import java.util.List; import mage.cards.Card; import mage.cards.repository.CardInfo; import mage.cards.repository.CardScanner; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.sets.CoreSet2019; import mage.sets.FateReforged; import mage.sets.MastersEditionII; import mage.sets.MastersEditionIV; @@ -99,6 +102,19 @@ public class BoosterGenerationTest extends MageTestBase { } } + @Test + public void testCoreSet2019_DualLandsAreGenerated() { + List allCards = new ArrayList<>(); + for (int i = 0; i < 50; i++) { + List booster = CoreSet2019.getInstance().createBooster(); + // check that booster contains a land card + assertTrue(booster.stream().anyMatch(card -> card.getCardType().contains(CardType.LAND))); + allCards.addAll(booster); + } + // check that some dual lands were generated + assertTrue(allCards.stream().anyMatch(card -> card.getCardType().contains(CardType.LAND) && card.getRarity().equals(Rarity.COMMON))); + } + private static String str(List cards) { StringBuilder sb = new StringBuilder("["); Iterator iterator = cards.iterator(); diff --git a/Mage/src/main/java/mage/cards/ExpansionSet.java b/Mage/src/main/java/mage/cards/ExpansionSet.java index 290ca6f63c9..2e0750d00e1 100644 --- a/Mage/src/main/java/mage/cards/ExpansionSet.java +++ b/Mage/src/main/java/mage/cards/ExpansionSet.java @@ -88,7 +88,8 @@ public abstract class ExpansionSet implements Serializable { protected int numBoosterSpecial; protected int numBoosterLands; - protected int ratioBoosterSpecialLand = 0; // if > 0 basic lands are replaced with special land in the ratio every X land is replaced by special land + protected int ratioBoosterSpecialLand = 0; // if > 0 basic lands are replaced with special land with probability ratioBoosterSpecialLandNumerator / ratioBoosterSpecialLand + protected int ratioBoosterSpecialLandNumerator = 1; protected int numBoosterCommon; protected int numBoosterUncommon; @@ -208,7 +209,7 @@ public abstract class ExpansionSet implements Serializable { List specialLands = getSpecialLand(); List basicLands = getCardsByRarity(Rarity.LAND); for (int i = 0; i < numBoosterLands; i++) { - if (ratioBoosterSpecialLand > 0 && RandomUtil.nextInt(ratioBoosterSpecialLand) == 0 && specialLands != null) { + if (ratioBoosterSpecialLand > 0 && RandomUtil.nextInt(ratioBoosterSpecialLand) < ratioBoosterSpecialLandNumerator && specialLands != null) { addToBooster(booster, specialLands); } else { addToBooster(booster, basicLands);