mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Merge branch 'master' of git.cardforge.org:core-developers/forge into agetian-master
This commit is contained in:
@@ -2,10 +2,10 @@ package forge;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import forge.card.CardDb;
|
||||
import forge.card.CardDb.CardRequest;
|
||||
import forge.card.CardEdition;
|
||||
import forge.card.CardRules;
|
||||
import forge.card.PrintSheet;
|
||||
import forge.card.CardDb.CardRequest;
|
||||
import forge.item.BoosterBox;
|
||||
import forge.item.FatPack;
|
||||
import forge.item.PaperCard;
|
||||
@@ -131,7 +131,7 @@ public class StaticData {
|
||||
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);
|
||||
String cardName = r.cardName;
|
||||
CardRules rules = cardReader.attemptToLoadCard(cardName, setCode);
|
||||
@@ -142,7 +142,6 @@ public class StaticData {
|
||||
commonCards.loadCard(cardName, rules);
|
||||
}
|
||||
}
|
||||
return rules;
|
||||
}
|
||||
|
||||
/** @return {@link forge.util.storage.IStorage}<{@link forge.item.SealedProduct.Template}> */
|
||||
|
||||
@@ -18,15 +18,18 @@
|
||||
package forge.card;
|
||||
|
||||
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.Type;
|
||||
import forge.deck.generation.IDeckGenPool;
|
||||
import forge.item.PaperCard;
|
||||
import forge.util.CollectionSuppliers;
|
||||
import forge.util.Lang;
|
||||
import forge.util.MyRandom;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.*;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
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'
|
||||
List<PaperCard> candidates;
|
||||
Collection<PaperCard> candidates;
|
||||
if (reqEdition == null) {
|
||||
candidates = new ArrayList<PaperCard>(cards);
|
||||
}
|
||||
@@ -352,15 +355,12 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
|
||||
if (candidates.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Collections.shuffle(candidates);
|
||||
result = Aggregates.random(candidates);
|
||||
|
||||
//if card image doesn't exist for chosen candidate, try another one if possible
|
||||
for(PaperCard candidate : candidates) {
|
||||
result = candidate;
|
||||
if (result.hasImage()) {
|
||||
break;
|
||||
}
|
||||
while (candidates.size() > 1 && !result.hasImage()) {
|
||||
candidates.remove(result);
|
||||
result = Aggregates.random(candidates);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -21,7 +21,6 @@ import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Lists;
|
||||
import forge.StaticData;
|
||||
import forge.card.CardDb;
|
||||
import forge.card.CardRules;
|
||||
import forge.item.PaperCard;
|
||||
import forge.util.ItemPool;
|
||||
import forge.util.ItemPoolSorter;
|
||||
@@ -74,12 +73,29 @@ public class CardPool extends ItemPool<PaperCard> {
|
||||
|
||||
// NOTE: ART indices are "1" -based
|
||||
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);
|
||||
boolean artIndexExplicitlySet = artIndex > 0 ||
|
||||
Character.isDigit(cardName.charAt(cardName.length() - 1)) &&
|
||||
cardName.charAt(cardName.length() - 2) == CardDb.NameSetSeparator;
|
||||
PaperCard paperCard = StaticData.instance().getCommonCards().getCard(cardName, setCode, artIndex);
|
||||
final boolean isCommonCard = paperCard != null;
|
||||
|
||||
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) {
|
||||
// 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.
|
||||
|
||||
Reference in New Issue
Block a user