diff --git a/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java b/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java index 2982c97a126..d38eaa1b0b7 100644 --- a/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java +++ b/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java @@ -41,6 +41,7 @@ import mage.client.util.sets.ConstructedFormats; import mage.constants.CardType; import mage.constants.ColoredManaSymbol; import mage.constants.Rarity; +import mage.util.TournamentUtil; /** @@ -285,42 +286,7 @@ public class DeckGenerator { */ private static Map> generateBasicLands(List setsToUse) { - List landSets = new LinkedList<>(); - - // decide from which sets basic lands are taken from - for (String setCode :setsToUse) { - ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode); - if (expansionInfo.hasBasicLands()) { - landSets.add(expansionInfo.getCode()); - } - } - - // if sets have no basic land, take land from block - if (landSets.isEmpty()) { - for (String setCode :setsToUse) { - ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode); - List blockSets = ExpansionRepository.instance.getSetsFromBlock(expansionInfo.getBlockName()); - for (ExpansionInfo blockSet: blockSets) { - if (blockSet.hasBasicLands()) { - landSets.add(blockSet.getCode()); - } - } - } - } - // if still no set with lands found, take one by random - if (landSets.isEmpty()) { - // if sets have no basic lands and also it has no parent or parent has no lands get last set with lands - // select a set with basic lands by random - Random generator = new Random(); - List basicLandSets = ExpansionRepository.instance.getSetsWithBasicLandsByReleaseDate(); - if (basicLandSets.size() > 0) { - landSets.add(basicLandSets.get(generator.nextInt(basicLandSets.size())).getCode()); - } - } - - if (landSets.isEmpty()) { - throw new IllegalArgumentException("No set with basic land was found"); - } + Set landSets = TournamentUtil.getLandSetCodeForDeckSets(setsToUse); CardCriteria criteria = new CardCriteria(); if (!landSets.isEmpty()) { diff --git a/Mage.Client/src/main/java/mage/client/dialog/AddLandDialog.java b/Mage.Client/src/main/java/mage/client/dialog/AddLandDialog.java index f198e866d29..9b25eea3712 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/AddLandDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/AddLandDialog.java @@ -57,7 +57,7 @@ public class AddLandDialog extends MageDialog { private static final Logger logger = Logger.getLogger(MageDialog.class); private Deck deck; - private final Set setCodesland = new HashSet<>(); + private final Set landSetCodes = new HashSet<>(); private static final int DEFAULT_SEALED_DECK_CARD_NUMBER = 40; @@ -71,27 +71,27 @@ public class AddLandDialog extends MageDialog { public void showDialog(Deck deck, DeckEditorMode mode) { this.deck = deck; - SortedSet landSets = new TreeSet<>(); + SortedSet landSetNames = new TreeSet<>(); if (!mode.equals(DeckEditorMode.FREE_BUILDING)) { // decide from which sets basic lands are taken from for (String setCode : deck.getExpansionSetCodes()) { ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode); if (expansionInfo != null && expansionInfo.hasBasicLands()) { - this.setCodesland.add(expansionInfo.getCode()); - landSets.add(expansionInfo.getName()); + this.landSetCodes.add(expansionInfo.getCode()); + landSetNames.add(expansionInfo.getName()); } } // if sets have no basic land, take land from block - if (this.setCodesland.isEmpty()) { + if (this.landSetCodes.isEmpty()) { for (String setCode : deck.getExpansionSetCodes()) { ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode); if (expansionInfo != null) { List blockSets = ExpansionRepository.instance.getSetsFromBlock(expansionInfo.getBlockName()); for (ExpansionInfo blockSet : blockSets) { if (blockSet.hasBasicLands()) { - this.setCodesland.add(blockSet.getCode()); - landSets.add(blockSet.getName()); + this.landSetCodes.add(blockSet.getCode()); + landSetNames.add(blockSet.getName()); } } } @@ -99,19 +99,19 @@ public class AddLandDialog extends MageDialog { } } // if still no set with lands found, add list of all available - if (this.setCodesland.isEmpty()) { + if (this.landSetCodes.isEmpty()) { List basicLandSets = ExpansionRepository.instance.getSetsWithBasicLandsByReleaseDate(); for (ExpansionInfo expansionInfo : basicLandSets) { - landSets.add(expansionInfo.getName()); + landSetNames.add(expansionInfo.getName()); } } - if (landSets.isEmpty()) { + if (landSetNames.isEmpty()) { throw new IllegalArgumentException("No set with basic land was found"); } - if (landSets.size() > 1) { - landSets.add(""); + if (landSetNames.size() > 1) { + landSetNames.add(""); } - cbLandSet.setModel(new DefaultComboBoxModel(landSets.toArray())); + cbLandSet.setModel(new DefaultComboBoxModel(landSetNames.toArray())); MageFrame.getDesktop().add(this, JLayeredPane.PALETTE_LAYER); this.setVisible(true); @@ -123,7 +123,7 @@ public class AddLandDialog extends MageDialog { CardCriteria criteria = new CardCriteria(); if (landSetName.equals("")) { - criteria.setCodes(setCodesland.toArray(new String[setCodesland.size()])); + criteria.setCodes(landSetCodes.toArray(new String[landSetCodes.size()])); } else { ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByName(landSetName); if (expansionInfo == null) { diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java index 4fff0604db1..f46dcf9ee32 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java @@ -149,6 +149,7 @@ import mage.target.common.TargetPermanentOrPlayer; import mage.target.common.TargetSpellOrPermanent; import mage.util.Copier; import mage.util.MessageToClient; +import mage.util.TournamentUtil; import mage.util.TreeNode; import org.apache.log4j.Logger; @@ -1637,42 +1638,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { private static void addBasicLands(Deck deck, String landName, int number) { Random random = new Random(); - Set landSets = new HashSet<>(); - - // decide from which sets basic lands are taken from - for (String setCode : deck.getExpansionSetCodes()) { - ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode); - if (expansionInfo.hasBasicLands()) { - landSets.add(expansionInfo.getCode()); - } - } - - // if sets have no basic land, take land from block - if (landSets.isEmpty()) { - for (String setCode : deck.getExpansionSetCodes()) { - ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode); - List blockSets = ExpansionRepository.instance.getSetsFromBlock(expansionInfo.getBlockName()); - for (ExpansionInfo blockSet : blockSets) { - if (blockSet.hasBasicLands()) { - landSets.add(blockSet.getCode()); - } - } - } - } - // if still no set with lands found, take one by random - if (landSets.isEmpty()) { - // if sets have no basic lands and also it has no parent or parent has no lands get last set with lands - // select a set with basic lands by random - Random generator = new Random(); - List basicLandSets = ExpansionRepository.instance.getSetsWithBasicLandsByReleaseDate(); - if (basicLandSets.size() > 0) { - landSets.add(basicLandSets.get(generator.nextInt(basicLandSets.size())).getCode()); - } - } - - if (landSets.isEmpty()) { - throw new IllegalArgumentException("No set with basic land was found"); - } + Set landSets = TournamentUtil.getLandSetCodeForDeckSets(deck.getExpansionSetCodes()); CardCriteria criteria = new CardCriteria(); if (!landSets.isEmpty()) { diff --git a/Mage/src/mage/cards/decks/Deck.java b/Mage/src/mage/cards/decks/Deck.java index 7d2dff0e14a..dd965a4a692 100644 --- a/Mage/src/mage/cards/decks/Deck.java +++ b/Mage/src/mage/cards/decks/Deck.java @@ -130,14 +130,10 @@ public class Deck implements Serializable { public Set getExpansionSetCodes() { Set sets = new LinkedHashSet<>(); for (Card card : getCards()) { - if (!sets.contains(card.getExpansionSetCode())) { - sets.add(card.getExpansionSetCode()); - } + sets.add(card.getExpansionSetCode()); } for (Card card : getSideboard()) { - if (!sets.contains(card.getExpansionSetCode())) { - sets.add(card.getExpansionSetCode()); - } + sets.add(card.getExpansionSetCode()); } return sets; } diff --git a/Mage/src/mage/util/TournamentUtil.java b/Mage/src/mage/util/TournamentUtil.java index 8d3ae3aaca9..09497b410ff 100644 --- a/Mage/src/mage/util/TournamentUtil.java +++ b/Mage/src/mage/util/TournamentUtil.java @@ -7,10 +7,12 @@ package mage.util; import java.util.ArrayList; +import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Random; import java.util.Set; + import mage.cards.Card; import mage.cards.repository.CardCriteria; import mage.cards.repository.CardInfo; @@ -32,44 +34,44 @@ public class TournamentUtil { * @return setCode for lands */ - public static Set getLandSetCodeForDeckSets(Set setCodesDeck) { + public static Set getLandSetCodeForDeckSets(Collection setCodesDeck) { - Set setCodesland = new HashSet<>(); + Set landSetCodes = new HashSet<>(); // decide from which sets basic lands are taken from for (String setCode :setCodesDeck) { ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode); if (expansionInfo.hasBasicLands()) { - setCodesland.add(expansionInfo.getCode()); + landSetCodes.add(expansionInfo.getCode()); } } // if sets have no basic land, take land from block - if (setCodesland.isEmpty()) { + if (landSetCodes.isEmpty()) { for (String setCode :setCodesDeck) { ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode); List blockSets = ExpansionRepository.instance.getSetsFromBlock(expansionInfo.getBlockName()); for (ExpansionInfo blockSet: blockSets) { if (blockSet.hasBasicLands()) { - setCodesland.add(blockSet.getCode()); + landSetCodes.add(blockSet.getCode()); } } } } // if still no set with lands found, take one by random - if (setCodesland.isEmpty()) { + if (landSetCodes.isEmpty()) { // if sets have no basic lands and also it has no parent or parent has no lands get last set with lands // select a set with basic lands by random Random generator = new Random(); List basicLandSets = ExpansionRepository.instance.getSetsWithBasicLandsByReleaseDate(); if (basicLandSets.size() > 0) { - setCodesland.add(basicLandSets.get(generator.nextInt(basicLandSets.size())).getCode()); + landSetCodes.add(basicLandSets.get(generator.nextInt(basicLandSets.size())).getCode()); } } - if (setCodesland.isEmpty()) { + if (landSetCodes.isEmpty()) { throw new IllegalArgumentException("No set with basic land was found"); } - return setCodesland; + return landSetCodes; } public static List getLands(String landName, int number, Set landSets) {