From 6fd93bdf921dc3fc1e5802ec86525acf2ed261e5 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Sun, 19 Apr 2020 22:33:37 -0400 Subject: [PATCH] added support for special basic slot in IKO --- Mage.Sets/src/mage/sets/CoreSet2019.java | 21 +++----- .../src/mage/sets/IkoriaLairOfBehemoths.java | 51 +++++++++++++++++++ 2 files changed, 59 insertions(+), 13 deletions(-) diff --git a/Mage.Sets/src/mage/sets/CoreSet2019.java b/Mage.Sets/src/mage/sets/CoreSet2019.java index bb7cb7ef76d..ec4614f3672 100644 --- a/Mage.Sets/src/mage/sets/CoreSet2019.java +++ b/Mage.Sets/src/mage/sets/CoreSet2019.java @@ -1,7 +1,5 @@ package mage.sets; -import java.util.ArrayList; -import java.util.List; import mage.cards.ExpansionSet; import mage.cards.repository.CardCriteria; import mage.cards.repository.CardInfo; @@ -10,8 +8,10 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.constants.SetType; +import java.util.ArrayList; +import java.util.List; + /** - * * @author TheElk801 */ public final class CoreSet2019 extends ExpansionSet { @@ -36,7 +36,7 @@ public final class CoreSet2019 extends ExpansionSet { this.ratioBoosterMythic = 8; this.numBoosterDoubleFaced = -1; this.maxCardNumberInBooster = 280; - + // 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 = 12; @@ -380,23 +380,18 @@ public final class CoreSet2019 extends ExpansionSet { return super.getCardsByRarity(rarity); } } - + @Override // the common taplands replacing the basic land - public List getSpecialLand() - { - if (savedSpecialLand.isEmpty()) - { + public List getSpecialLand() { + if (savedSpecialLand.isEmpty()) { CardCriteria criteria = new CardCriteria(); criteria.setCodes(this.code); criteria.rarities(Rarity.COMMON); criteria.types(CardType.LAND); savedSpecialLand.addAll(CardRepository.instance.findCards(criteria)); } - + return new ArrayList<>(savedSpecialLand); } - - - } diff --git a/Mage.Sets/src/mage/sets/IkoriaLairOfBehemoths.java b/Mage.Sets/src/mage/sets/IkoriaLairOfBehemoths.java index 771653f1d49..63d08815e16 100644 --- a/Mage.Sets/src/mage/sets/IkoriaLairOfBehemoths.java +++ b/Mage.Sets/src/mage/sets/IkoriaLairOfBehemoths.java @@ -1,9 +1,14 @@ package mage.sets; import mage.cards.ExpansionSet; +import mage.cards.repository.CardCriteria; +import mage.cards.repository.CardInfo; +import mage.cards.repository.CardRepository; +import mage.constants.CardType; import mage.constants.Rarity; import mage.constants.SetType; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -51,6 +56,8 @@ public final class IkoriaLairOfBehemoths extends ExpansionSet { return instance; } + private final List savedSpecialLand = new ArrayList<>(); + private IkoriaLairOfBehemoths() { super("Ikoria: Lair of Behemoths", "IKO", ExpansionSet.buildDate(2020, 4, 24), SetType.EXPANSION); this.blockName = "Ikoria: Lair of Behemoths"; @@ -62,6 +69,11 @@ public final class IkoriaLairOfBehemoths extends ExpansionSet { this.ratioBoosterMythic = 8; this.maxCardNumberInBooster = 274; + // About half of boosters will have a gainland rather than a basic + // Source: https://twitter.com/GavinVerhey/status/1248731315412717568 + this.ratioBoosterSpecialLand = 2; + this.ratioBoosterSpecialLandNumerator = 1; + cards.add(new SetCardInfo("Adaptive Shimmerer", 1, Rarity.COMMON, mage.cards.a.AdaptiveShimmerer.class)); cards.add(new SetCardInfo("Adventurous Impulse", 142, Rarity.COMMON, mage.cards.a.AdventurousImpulse.class)); cards.add(new SetCardInfo("Aegis Turtle", 39, Rarity.COMMON, mage.cards.a.AegisTurtle.class)); @@ -336,4 +348,43 @@ public final class IkoriaLairOfBehemoths extends ExpansionSet { cards.removeIf(setCardInfo -> mutateNames.contains(setCardInfo.getName())); // remove when mutate is implemented } + + @Override + public List getCardsByRarity(Rarity rarity) { + if (rarity != Rarity.COMMON) { + return super.getCardsByRarity(rarity); + } + List savedCardsInfos = savedCards.get(rarity); + if (savedCardsInfos != null) { + return new ArrayList(savedCardsInfos); + } + CardCriteria criteria = new CardCriteria(); + criteria.setCodes(this.code).notTypes(CardType.LAND); + criteria.rarities(rarity).doubleFaced(false); + savedCardsInfos = CardRepository.instance.findCards(criteria); + if (maxCardNumberInBooster != Integer.MAX_VALUE) { + savedCardsInfos.removeIf(next -> next.getCardNumberAsInt() > maxCardNumberInBooster); + } + criteria = new CardCriteria(); + criteria.setCodes(this.code).nameExact("Evolving Wilds"); + savedCardsInfos.addAll(CardRepository.instance.findCards(criteria)); + savedCards.put(rarity, savedCardsInfos); + // Return a copy of the saved cards information, as not to modify the original. + return new ArrayList(savedCardsInfos); + } + + @Override + // the common taplands replacing the basic land + public List getSpecialLand() { + if (savedSpecialLand.isEmpty()) { + CardCriteria criteria = new CardCriteria(); + criteria.setCodes(this.code); + criteria.rarities(Rarity.COMMON); + criteria.types(CardType.LAND); + savedSpecialLand.addAll(CardRepository.instance.findCards(criteria)); + savedSpecialLand.removeIf(cardInfo -> "Evolving Wilds".equals(cardInfo.getName())); + } + + return new ArrayList(savedSpecialLand); + } }