From 5a8a7b19def644b4a591333436e8ab868a07df7f Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 7 Jul 2013 18:23:31 +0200 Subject: [PATCH] Client add land set search uses now ExpansionRepository. --- .../mage/client/dialog/AddLandDialog.java | 42 +++++++++++- .../java/mage/player/ai/ComputerPlayer.java | 42 +++++++++++- Mage/src/mage/cards/Sets.java | 67 ------------------- 3 files changed, 79 insertions(+), 72 deletions(-) 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 d14d04c24fe..ca72d5af340 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/AddLandDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/AddLandDialog.java @@ -27,17 +27,19 @@ */ package mage.client.dialog; +import java.util.HashSet; import java.util.List; import java.util.Random; import java.util.Set; import javax.swing.JLayeredPane; import mage.Mana; import mage.cards.Card; -import mage.cards.Sets; import mage.cards.decks.Deck; import mage.cards.repository.CardCriteria; import mage.cards.repository.CardInfo; import mage.cards.repository.CardRepository; +import mage.cards.repository.ExpansionInfo; +import mage.cards.repository.ExpansionRepository; import mage.client.MageFrame; import mage.constants.Rarity; @@ -48,7 +50,7 @@ import mage.constants.Rarity; public class AddLandDialog extends MageDialog { private Deck deck; - private Set setCodesland; + private Set setCodesland = new HashSet(); private static int DEFAULT_SEALED_DECK_CARD_NUMBER = 40; @@ -60,8 +62,42 @@ public class AddLandDialog extends MageDialog { public void showDialog(Deck deck) { this.deck = deck; - this.setCodesland = Sets.getSetsWithBasicLandsAsCodes(deck.getExpansionSetCodes()); + // decide from which sets basic lands are taken from + for (String setCode :deck.getExpansionSetCodes()) { + ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode); + if (expansionInfo.hasBasicLands()) { + this.setCodesland.add(expansionInfo.getCode()); + } + } + + // if sets have no basic land, take land from block + if (this.setCodesland.isEmpty()) { + for (String setCode :deck.getExpansionSetCodes()) { + ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode); + ExpansionInfo [] blockSets = ExpansionRepository.instance.getSetsFromBlock(expansionInfo.getBlockName()); + for (ExpansionInfo blockSet: blockSets) { + if (blockSet.hasBasicLands()) { + this.setCodesland.add(blockSet.getCode()); + } + } + } + } + // if still no set with lands found, take one by random + if (this.setCodesland.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(); + ExpansionInfo [] landSets = ExpansionRepository.instance.getSetsWithBasicLandsByReleaseDate(); + if (landSets.length > 0) { + this.setCodesland.add(landSets[generator.nextInt(landSets.length)-1].getCode()); + } + } + + if (this.setCodesland.isEmpty()) { + throw new IllegalArgumentException("No set with basic land was found"); + } + MageFrame.getDesktop().add(this, JLayeredPane.PALETTE_LAYER); this.setVisible(true); } 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 8f5f5d36f49..2da8554f591 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 @@ -43,7 +43,6 @@ import mage.abilities.mana.ManaAbility; import mage.abilities.mana.ManaOptions; import mage.cards.Card; import mage.cards.Cards; -import mage.cards.Sets; import mage.cards.decks.Deck; import mage.cards.repository.CardCriteria; import mage.cards.repository.CardInfo; @@ -78,8 +77,12 @@ import org.apache.log4j.Logger; import java.io.IOException; import java.io.Serializable; +import java.lang.String; import java.util.*; +import java.util.HashSet; import java.util.Map.Entry; +import mage.cards.repository.ExpansionInfo; +import mage.cards.repository.ExpansionRepository; /** @@ -1302,7 +1305,42 @@ public class ComputerPlayer> extends PlayerImpl i private static void addBasicLands(Deck deck, String landName, int number) { Random random = new Random(); - Set landSets = Sets.getSetsWithBasicLandsAsCodes(deck.getExpansionSetCodes()); + 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); + ExpansionInfo [] 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(); + ExpansionInfo [] basicLandSets = ExpansionRepository.instance.getSetsWithBasicLandsByReleaseDate(); + if (basicLandSets.length > 0) { + landSets.add(basicLandSets[generator.nextInt(basicLandSets.length)-1].getCode()); + } + } + + if (landSets.isEmpty()) { + throw new IllegalArgumentException("No set with basic land was found"); + } CardCriteria criteria = new CardCriteria(); if (!landSets.isEmpty()) { diff --git a/Mage/src/mage/cards/Sets.java b/Mage/src/mage/cards/Sets.java index 31d48c7e563..cf547560cf8 100644 --- a/Mage/src/mage/cards/Sets.java +++ b/Mage/src/mage/cards/Sets.java @@ -169,71 +169,4 @@ public class Sets extends HashMap { } } - public ExpansionSet[] getSortedByReleaseDate() { - ExpansionSet[] sets = Sets.getInstance().values().toArray(new ExpansionSet[0]); - Arrays.sort(sets, new Comparator() { - @Override - public int compare(ExpansionSet o1, ExpansionSet o2) { - return o2.getReleaseDate().compareTo(o1.getReleaseDate()); - } - }); - return sets; - } - - public ExpansionSet[] getWithBoosterSortedByReleaseDate() { - ExpansionSet[] allSets = getSortedByReleaseDate(); - ArrayList boosterSets = new ArrayList(); - for (ExpansionSet set: allSets) { - if (set.hasBoosters) { - boosterSets.add(set); - } - } - return boosterSets.toArray(new ExpansionSet[0]); - } - - /** - * Gives back the set codes from the sets that include basic lands. - * If the input set itself does not incluse basic lands, but it has a parent set, - * only this parent set code is added to the return sets. - * - * @param setCodes - * @return - setCodes that have basic lands - */ - public static Set getSetsWithBasicLandsAsCodes(Set setCodes) { - Set landSets = new LinkedHashSet(); - if (setCodes != null && !setCodes.isEmpty()) { - // Add parent sets with the basic lands if the setlist don't include them - for (String setCode: setCodes) { - ExpansionSet expansionSet = Sets.findSet(setCode); - if (expansionSet.hasBasicLands()) { - landSets.add(setCode); - } else if (expansionSet.getParentSet() != null && !landSets.contains(expansionSet.getParentSet().getCode())) { - landSets.add(expansionSet.getParentSet().getCode()); - } - } - } - if (landSets.isEmpty()) { - // if set has no 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(); - int maxRndValue = 0; - String selectedSetCode = null; - for (ExpansionSet set :Sets.getInstance().getSortedByReleaseDate()) { - if (set.hasBasicLands) { - int rndValue = generator.nextInt(100); - if (rndValue >= maxRndValue) { - maxRndValue = rndValue; - selectedSetCode = set.getCode(); - } - } - } - if (selectedSetCode != null) { - landSets.add(selectedSetCode); - } else { - throw new IllegalArgumentException("No set with basic land was found"); - } - } - return landSets; - } - }