Revert "Merge branch 'fix-bad-art-deck-art-corruption' into 'master'"

This reverts merge request !1440
This commit is contained in:
Sol
2019-03-04 15:58:06 +00:00
parent 6807257630
commit 8a9c27f9ae
3 changed files with 37 additions and 58 deletions

View File

@@ -2,10 +2,10 @@ package forge;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import forge.card.CardDb; import forge.card.CardDb;
import forge.card.CardDb.CardRequest;
import forge.card.CardEdition; import forge.card.CardEdition;
import forge.card.CardRules; import forge.card.CardRules;
import forge.card.PrintSheet; import forge.card.PrintSheet;
import forge.card.CardDb.CardRequest;
import forge.item.BoosterBox; import forge.item.BoosterBox;
import forge.item.FatPack; import forge.item.FatPack;
import forge.item.PaperCard; import forge.item.PaperCard;
@@ -131,7 +131,7 @@ public class StaticData {
return foil ? commonCards.getFoiled(card) : card; return foil ? commonCards.getFoiled(card) : card;
} }
public CardRules attemptToLoadCard(String encodedCardName, String setCode) { public void attemptToLoadCard(String encodedCardName, String setCode) {
CardDb.CardRequest r = CardRequest.fromString(encodedCardName); CardDb.CardRequest r = CardRequest.fromString(encodedCardName);
String cardName = r.cardName; String cardName = r.cardName;
CardRules rules = cardReader.attemptToLoadCard(cardName, setCode); CardRules rules = cardReader.attemptToLoadCard(cardName, setCode);
@@ -142,7 +142,6 @@ public class StaticData {
commonCards.loadCard(cardName, rules); commonCards.loadCard(cardName, rules);
} }
} }
return rules;
} }
/** @return {@link forge.util.storage.IStorage}<{@link forge.item.SealedProduct.Template}> */ /** @return {@link forge.util.storage.IStorage}<{@link forge.item.SealedProduct.Template}> */

View File

@@ -18,15 +18,18 @@
package forge.card; package forge.card;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.collect.*; import com.google.common.collect.Iterables;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimaps;
import forge.card.CardEdition.CardInSet; import forge.card.CardEdition.CardInSet;
import forge.card.CardEdition.Type; import forge.card.CardEdition.Type;
import forge.deck.generation.IDeckGenPool; import forge.deck.generation.IDeckGenPool;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.util.CollectionSuppliers; import forge.util.*;
import forge.util.Lang;
import forge.util.MyRandom;
import forge.util.TextUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
@@ -337,7 +340,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
} }
if (request.artIndex <= 0) { // this stands for 'random art' if (request.artIndex <= 0) { // this stands for 'random art'
List<PaperCard> candidates; Collection<PaperCard> candidates;
if (reqEdition == null) { if (reqEdition == null) {
candidates = new ArrayList<PaperCard>(cards); candidates = new ArrayList<PaperCard>(cards);
} }
@@ -352,15 +355,12 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
if (candidates.isEmpty()) { if (candidates.isEmpty()) {
return null; return null;
} }
result = Aggregates.random(candidates);
Collections.shuffle(candidates);
//if card image doesn't exist for chosen candidate, try another one if possible //if card image doesn't exist for chosen candidate, try another one if possible
for(PaperCard candidate : candidates) { while (candidates.size() > 1 && !result.hasImage()) {
result = candidate; candidates.remove(result);
if (result.hasImage()) { result = Aggregates.random(candidates);
break;
}
} }
} }
else { else {

View File

@@ -21,7 +21,6 @@ import com.google.common.base.Predicate;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import forge.StaticData; import forge.StaticData;
import forge.card.CardDb; import forge.card.CardDb;
import forge.card.CardRules;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.util.ItemPool; import forge.util.ItemPool;
import forge.util.ItemPoolSorter; import forge.util.ItemPoolSorter;
@@ -74,12 +73,29 @@ public class CardPool extends ItemPool<PaperCard> {
// NOTE: ART indices are "1" -based // NOTE: ART indices are "1" -based
public void add(String cardName, String setCode, final int artIndex, final int amount) { public void add(String cardName, String setCode, final int artIndex, final int amount) {
PaperCard paperCard = determineRequestedPaperCard(cardName, setCode, artIndex);
int artCount = Math.max(StaticData.instance().getCommonCards().getArtCount(cardName, setCode), 1); PaperCard paperCard = StaticData.instance().getCommonCards().getCard(cardName, setCode, artIndex);
boolean artIndexExplicitlySet = artIndex > 0 || final boolean isCommonCard = paperCard != null;
Character.isDigit(cardName.charAt(cardName.length() - 1)) &&
cardName.charAt(cardName.length() - 2) == CardDb.NameSetSeparator; if (!isCommonCard) {
paperCard = StaticData.instance().getVariantCards().getCard(cardName, setCode);
if (paperCard == null) {
StaticData.instance().attemptToLoadCard(cardName, setCode);
paperCard = StaticData.instance().getVariantCards().getCard(cardName, setCode);
}
}
int artCount = 1;
if (paperCard != null) {
setCode = paperCard.getEdition();
cardName = paperCard.getName();
artCount = isCommonCard ? StaticData.instance().getCommonCards().getArtCount(cardName, setCode) : 1;
} else {
System.err.print("An unsupported card was requested: \"" + cardName + "\" from \"" + setCode + "\". ");
paperCard = StaticData.instance().getCommonCards().createUnsupportedCard(cardName);
}
boolean artIndexExplicitlySet = artIndex > 0 || Character.isDigit(cardName.charAt(cardName.length() - 1)) && cardName.charAt(cardName.length() - 2) == CardDb.NameSetSeparator;
if (artIndexExplicitlySet || artCount <= 1) { if (artIndexExplicitlySet || artCount <= 1) {
// either a specific art index is specified, or there is only one art, so just add the card // either a specific art index is specified, or there is only one art, so just add the card
@@ -98,43 +114,7 @@ public class CardPool extends ItemPool<PaperCard> {
} }
} }
private PaperCard determineRequestedPaperCard(String cardName, String setCode, final int artIndex) {
// Does Forge even know this card exists?
PaperCard uniqueCard = StaticData.instance().getCommonCards().getUniqueByName(cardName);
if (uniqueCard == null) {
uniqueCard = StaticData.instance().getVariantCards().getUniqueByName(cardName);
}
CardDb db = null;
boolean isCommonCard = true;
if (uniqueCard == null) {
// Both database lookups failed, made up card OR lazy loading?
CardRules rules = StaticData.instance().attemptToLoadCard(cardName, setCode);
if (rules == null) {
// Failed to find a common/variant/or unloaded version of that card
System.err.print("An unsupported card was requested: \"" + cardName + "\" from \"" + setCode + "\". ");
return StaticData.instance().getCommonCards().createUnsupportedCard(cardName);
}
isCommonCard = !rules.isVariant();
db = isCommonCard ? StaticData.instance().getCommonCards() : StaticData.instance().getVariantCards();
uniqueCard = db.getUniqueByName(cardName);
} else {
isCommonCard = !uniqueCard.getRules().isVariant();
db = isCommonCard ? StaticData.instance().getCommonCards() : StaticData.instance().getVariantCards();
}
PaperCard paperCard = db.getCard(cardName, setCode, artIndex);
if (paperCard == null) {
paperCard = db.getCard(cardName, setCode);
}
if (paperCard == null) {
paperCard = uniqueCard;
}
return paperCard;
}
/** /**
* Add all from a List of CardPrinted. * Add all from a List of CardPrinted.