diff --git a/Mage.Sets/src/mage/sets/BattleForZendikar.java b/Mage.Sets/src/mage/sets/BattleForZendikar.java index f21179f9746..1572cccc7cf 100644 --- a/Mage.Sets/src/mage/sets/BattleForZendikar.java +++ b/Mage.Sets/src/mage/sets/BattleForZendikar.java @@ -48,7 +48,7 @@ public class BattleForZendikar extends ExpansionSet { return fINSTANCE; } - List savedSpecialLand = new ArrayList<>(); + protected final List savedSpecialLand = new ArrayList<>(); private BattleForZendikar() { super("Battle for Zendikar", "BFZ", "mage.sets.battleforzendikar", new GregorianCalendar(2015, 10, 2).getTime(), SetType.EXPANSION); @@ -56,25 +56,28 @@ public class BattleForZendikar extends ExpansionSet { this.hasBoosters = true; this.hasBasicLands = true; this.numBoosterLands = 1; - this.ratioBoosterSpecialLand = 20; // Approximately as rare as opening a foil mythic = 8 * 6 = ~every 48th booster includes one - // I set it to 20 to get it more often this.numBoosterCommon = 10; this.numBoosterUncommon = 3; this.numBoosterRare = 1; this.ratioBoosterMythic = 8; this.numBoosterSpecial = 0; + + // Zendikar Expeditions 1-25 + // Approximately as rare as opening a foil mythic = 8 * 6 = ~every 48th booster includes one. + // I set it to 20 to get it more often + this.ratioBoosterSpecialLand = 20; } @Override public List getSpecialLand() { - List specialLand = new ArrayList<>(); if (savedSpecialLand.isEmpty()) { CardCriteria criteria = new CardCriteria(); criteria.setCodes("EXP"); - specialLand.addAll(CardRepository.instance.findCards(criteria)); + criteria.minCardNumber(1); + criteria.maxCardNumber(25); + savedSpecialLand.addAll(CardRepository.instance.findCards(criteria)); } - specialLand.addAll(savedSpecialLand); - return specialLand; + return new ArrayList<>(savedSpecialLand); } } diff --git a/Mage.Sets/src/mage/sets/OathOfTheGatewatch.java b/Mage.Sets/src/mage/sets/OathOfTheGatewatch.java index 02a48c08575..c954424c02c 100644 --- a/Mage.Sets/src/mage/sets/OathOfTheGatewatch.java +++ b/Mage.Sets/src/mage/sets/OathOfTheGatewatch.java @@ -5,8 +5,14 @@ */ package mage.sets; +import java.util.ArrayList; import java.util.GregorianCalendar; +import java.util.List; + import mage.cards.ExpansionSet; +import mage.cards.repository.CardCriteria; +import mage.cards.repository.CardInfo; +import mage.cards.repository.CardRepository; import mage.constants.SetType; /** @@ -21,6 +27,8 @@ public class OathOfTheGatewatch extends ExpansionSet { return fINSTANCE; } + protected final List savedSpecialLand = new ArrayList<>(); + private OathOfTheGatewatch() { super("Oath of the Gatewatch", "OGW", "mage.sets.oathofthegatewatch", new GregorianCalendar(2016, 1, 22).getTime(), SetType.EXPANSION); this.blockName = "Battle for Zendikar"; @@ -32,5 +40,21 @@ public class OathOfTheGatewatch extends ExpansionSet { this.numBoosterUncommon = 3; this.numBoosterRare = 1; this.ratioBoosterMythic = 8; + + // Zendikar Expeditions 26-45 + this.ratioBoosterSpecialLand = 20; + } + + @Override + public List getSpecialLand() { + if (savedSpecialLand.isEmpty()) { + CardCriteria criteria = new CardCriteria(); + criteria.setCodes("EXP"); + criteria.minCardNumber(26); + criteria.maxCardNumber(45); + savedSpecialLand.addAll(CardRepository.instance.findCards(criteria)); + } + + return new ArrayList<>(savedSpecialLand); } } diff --git a/Mage/src/main/java/mage/cards/ExpansionSet.java b/Mage/src/main/java/mage/cards/ExpansionSet.java index 99ef9952849..3c7c8463b87 100644 --- a/Mage/src/main/java/mage/cards/ExpansionSet.java +++ b/Mage/src/main/java/mage/cards/ExpansionSet.java @@ -156,7 +156,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 && rnd.nextInt(ratioBoosterSpecialLand) == 1 && specialLands != null) { + if (ratioBoosterSpecialLand > 0 && rnd.nextInt(ratioBoosterSpecialLand) == 0 && specialLands != null) { addToBooster(booster, specialLands); } else { addToBooster(booster, basicLands); @@ -174,7 +174,7 @@ public abstract class ExpansionSet implements Serializable { List rares = getCardsByRarity(Rarity.RARE); List mythics = getCardsByRarity(Rarity.MYTHIC); for (int i = 0; i < numBoosterRare; i++) { - if (ratioBoosterMythic > 0 && rnd.nextInt(ratioBoosterMythic) == 1) { + if (ratioBoosterMythic > 0 && rnd.nextInt(ratioBoosterMythic) == 0) { addToBooster(booster, mythics); } else { addToBooster(booster, rares); diff --git a/Mage/src/main/java/mage/cards/repository/CardCriteria.java b/Mage/src/main/java/mage/cards/repository/CardCriteria.java index 38e25425db6..98f58bd0b01 100644 --- a/Mage/src/main/java/mage/cards/repository/CardCriteria.java +++ b/Mage/src/main/java/mage/cards/repository/CardCriteria.java @@ -63,6 +63,7 @@ public class CardCriteria { private String sortBy; private Long start; private Long count; + private int minCardNumber; private int maxCardNumber; public CardCriteria() { @@ -81,6 +82,7 @@ public class CardCriteria { this.white = true; this.colorless = true; + this.minCardNumber = Integer.MIN_VALUE; this.maxCardNumber = Integer.MAX_VALUE; } @@ -179,6 +181,11 @@ public class CardCriteria { return this; } + public CardCriteria minCardNumber(int minCardNumber) { + this.minCardNumber = minCardNumber; + return this; + } + public CardCriteria maxCardNumber(int maxCardNumber) { this.maxCardNumber = maxCardNumber; return this; @@ -292,6 +299,11 @@ public class CardCriteria { } } + if (minCardNumber != Integer.MIN_VALUE) { + where.ge("cardNumber", minCardNumber); + clausesCount++; + } + if (maxCardNumber != Integer.MAX_VALUE) { where.le("cardNumber", maxCardNumber); clausesCount++;