from list to set

This commit is contained in:
Anthony Calosa
2024-11-14 06:00:02 +08:00
parent 85913a3d6c
commit 71ecf91bb5
12 changed files with 45 additions and 34 deletions

View File

@@ -28,6 +28,7 @@ import forge.deck.generation.IDeckGenPool;
import forge.item.IPaperCard;
import forge.item.PaperCard;
import forge.util.CollectionSuppliers;
import forge.util.CollectionUtil;
import forge.util.Lang;
import forge.util.TextUtil;
import forge.util.lang.LangEnglish;
@@ -91,13 +92,13 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
public int artIndex;
public boolean isFoil;
public String collectorNumber;
public List<String> colorID;
public Set<String> colorID;
private CardRequest(String name, String edition, int artIndex, boolean isFoil, String collectorNumber) {
this(name, edition, artIndex, isFoil, collectorNumber, null);
}
private CardRequest(String name, String edition, int artIndex, boolean isFoil, String collectorNumber, List<String> colorID) {
private CardRequest(String name, String edition, int artIndex, boolean isFoil, String collectorNumber, Set<String> colorID) {
cardName = name;
this.edition = edition;
this.artIndex = artIndex;
@@ -132,7 +133,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
return requestInfo + NameSetSeparator + artIndex;
}
public static String compose(String cardName, String setCode, int artIndex, List<String> colorID) {
public static String compose(String cardName, String setCode, int artIndex, Set<String> colorID) {
String requestInfo = compose(cardName, setCode);
artIndex = Math.max(artIndex, IPaperCard.DEFAULT_ART_INDEX);
String cid = colorID == null ? "" : NameSetSeparator +
@@ -235,7 +236,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
int artIndex = artPos > 0 ? Integer.parseInt(info[artPos]) : IPaperCard.NO_ART_INDEX; // default: no art index
String collectorNumber = cNrPos > 0 ? info[cNrPos].substring(1, info[cNrPos].length() - 1) : IPaperCard.NO_COLLECTOR_NUMBER;
String setCode = setPos > 0 ? info[setPos] : null;
List<String> colorID = clrPos > 0 ? Arrays.stream(info[clrPos].substring(1).split(colorIDPrefix)).collect(Collectors.toList()) : null;
Set<String> colorID = clrPos > 0 ? Arrays.stream(info[clrPos].substring(1).split(colorIDPrefix)).collect(Collectors.toSet()) : null;
if (setCode != null && setCode.equals(CardEdition.UNKNOWN.getCode())) { // ???
setCode = null;
}
@@ -597,7 +598,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
}
@Override
public PaperCard getCard(final String cardName, String setCode, int artIndex, List<String> colorID) {
public PaperCard getCard(final String cardName, String setCode, int artIndex, Set<String> colorID) {
String reqInfo = CardRequest.compose(cardName, setCode, artIndex, colorID);
CardRequest request = CardRequest.fromString(reqInfo);
return tryGetCard(request);
@@ -663,7 +664,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
}
@Override
public PaperCard getCardFromSet(String cardName, CardEdition edition, int artIndex, String collectorNumber, boolean isFoil, List<String> colorID) {
public PaperCard getCardFromSet(String cardName, CardEdition edition, int artIndex, String collectorNumber, boolean isFoil, Set<String> colorID) {
if (edition == null || cardName == null) // preview cards
return null; // No cards will be returned
@@ -741,7 +742,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
}
@Override
public PaperCard getCardFromEditions(final String cardInfo, final CardArtPreference artPreference, int artIndex, List<String> colorID) {
public PaperCard getCardFromEditions(final String cardInfo, final CardArtPreference artPreference, int artIndex, Set<String> colorID) {
return this.tryToGetCardFromEditions(cardInfo, artPreference, artIndex, null, false, null, colorID);
}
@@ -823,7 +824,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
}
private PaperCard tryToGetCardFromEditions(String cardInfo, CardArtPreference artPreference, int artIndex,
Date releaseDate, boolean releasedBeforeFlag, Predicate<PaperCard> filter, List<String> colorID){
Date releaseDate, boolean releasedBeforeFlag, Predicate<PaperCard> filter, Set<String> colorID){
if (cardInfo == null)
return null;
final CardRequest cr = CardRequest.fromString(cardInfo);
@@ -891,7 +892,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
if (acceptedEditions.size() > 1) {
Collections.sort(acceptedEditions); // CardEdition correctly sort by (release) date
if (artPref.latestFirst)
Collections.reverse(acceptedEditions); // newest editions first
CollectionUtil.reverse(acceptedEditions); // newest editions first
}
final Iterator<CardEdition> editionIterator = acceptedEditions.iterator();

View File

@@ -7,6 +7,7 @@ import forge.item.PaperCard;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Set;
public interface ICardDatabase extends Iterable<PaperCard> {
/**
@@ -50,21 +51,21 @@ public interface ICardDatabase extends Iterable<PaperCard> {
// [NEW Methods] Including the card CollectorNumber as criterion for DB lookup
PaperCard getCard(String cardName, String edition, String collectorNumber);
PaperCard getCard(String cardName, String edition, int artIndex, String collectorNumber);
PaperCard getCard(String cardName, String edition, int artIndex, List<String> colorID);
PaperCard getCard(String cardName, String edition, int artIndex, Set<String> colorID);
// 2. Card Lookup from a single Expansion Set
PaperCard getCardFromSet(String cardName, CardEdition edition, boolean isFoil); // NOT yet used, included for API symmetry
PaperCard getCardFromSet(String cardName, CardEdition edition, String collectorNumber, boolean isFoil);
PaperCard getCardFromSet(String cardName, CardEdition edition, int artIndex, boolean isFoil);
PaperCard getCardFromSet(String cardName, CardEdition edition, int artIndex, String collectorNumber, boolean isFoil);
PaperCard getCardFromSet(String cardName, CardEdition edition, int artIndex, String collectorNumber, boolean isFoil, List<String> colorID);
PaperCard getCardFromSet(String cardName, CardEdition edition, int artIndex, String collectorNumber, boolean isFoil, Set<String> colorID);
// 3. Card lookup based on CardArtPreference Selection Policy
PaperCard getCardFromEditions(String cardName, CardArtPreference artPreference);
PaperCard getCardFromEditions(String cardName, CardArtPreference artPreference, Predicate<PaperCard> filter);
PaperCard getCardFromEditions(String cardName, CardArtPreference artPreference, int artIndex);
PaperCard getCardFromEditions(String cardName, CardArtPreference artPreference, int artIndex, Predicate<PaperCard> filter);
PaperCard getCardFromEditions(String cardName, CardArtPreference artPreference, int artIndex, List<String> colorID);
PaperCard getCardFromEditions(String cardName, CardArtPreference artPreference, int artIndex, Set<String> colorID);
// 4. Specialised Card Lookup on CardArtPreference Selection and Release Date
PaperCard getCardFromEditionsReleasedBefore(String cardName, CardArtPreference artPreference, Date releaseDate);

View File

@@ -72,7 +72,7 @@ public class CardPool extends ItemPool<PaperCard> {
public void add(String cardName, String setCode, int artIndex, final int amount) {
this.add(cardName, setCode, artIndex, amount, false, null);
}
public void add(String cardName, String setCode, int artIndex, final int amount, boolean addAny, List<String> colorID) {
public void add(String cardName, String setCode, int artIndex, final int amount, boolean addAny, Set<String> colorID) {
Map<String, CardDb> dbs = StaticData.instance().getAvailableDatabases();
PaperCard paperCard = null;
String selectedDbName = "";

View File

@@ -234,7 +234,7 @@ public interface IPaperCard extends InventoryItem, Serializable {
String getEdition();
String getCollectorNumber();
String getFunctionalVariant();
List<String> getColorID();
Set<String> getColorID();
int getArtIndex();
boolean isFoil();
boolean isToken();

View File

@@ -29,6 +29,8 @@ import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.List;
import java.util.Optional;
import java.util.Set;
/**
* A lightweight version of a card that matches real-world cards, to use outside of games (eg. inventory, decks, trade).
@@ -56,7 +58,7 @@ public class PaperCard implements Comparable<IPaperCard>, InventoryItemFromSet,
private final boolean foil;
private Boolean hasImage;
private final boolean noSell;
private List<String> colorID;
private Set<String> colorID;
private String sortableName;
private final String functionalVariant;
@@ -88,7 +90,7 @@ public class PaperCard implements Comparable<IPaperCard>, InventoryItemFromSet,
}
@Override
public List<String> getColorID() {
public Set<String> getColorID() {
return colorID;
}
@@ -163,7 +165,7 @@ public class PaperCard implements Comparable<IPaperCard>, InventoryItemFromSet,
this.artIndex, this.foil, String.valueOf(collectorNumber), this.artist, this.functionalVariant, false);
return sellable;
}
public PaperCard getSpireVersion(List<String> colors) {
public PaperCard getSpireVersion(Set<String> colors) {
return new PaperCard(this.rules, this.edition, this.rarity,
this.artIndex, this.foil, String.valueOf(collectorNumber), this.artist, this.functionalVariant, false, colors);
}
@@ -205,7 +207,7 @@ public class PaperCard implements Comparable<IPaperCard>, InventoryItemFromSet,
public PaperCard(final CardRules rules0, final String edition0, final CardRarity rarity0,
final int artIndex0, final boolean foil0, final String collectorNumber0,
final String artist0, final String functionalVariant, final boolean noSell0, final List<String> spires) {
final String artist0, final String functionalVariant, final boolean noSell0, final Set<String> colorID0) {
if (rules0 == null || edition0 == null || rarity0 == null) {
throw new IllegalArgumentException("Cannot create card without rules, edition or rarity");
}
@@ -222,7 +224,7 @@ public class PaperCard implements Comparable<IPaperCard>, InventoryItemFromSet,
sortableName = TextUtil.toSortableName(CardTranslation.getTranslatedName(rules0.getName()));
this.functionalVariant = functionalVariant != null ? functionalVariant : IPaperCard.NO_FUNCTIONAL_VARIANT;
noSell = noSell0;
colorID = spires;
colorID = colorID0;
}
public static PaperCard FAKE_CARD = new PaperCard(CardRules.getUnsupportedCardNamed("Fake Card"), "Fake Edition", CardRarity.Common);
@@ -249,6 +251,9 @@ public class PaperCard implements Comparable<IPaperCard>, InventoryItemFromSet,
}
if (!getCollectorNumber().equals(other.getCollectorNumber()))
return false;
// colorID can be NULL
if (getColorID() != other.getColorID())
return false;
return (other.foil == foil) && (other.artIndex == artIndex);
}
@@ -261,7 +266,7 @@ public class PaperCard implements Comparable<IPaperCard>, InventoryItemFromSet,
public int hashCode() {
final int code = (name.hashCode() * 11) + (edition.hashCode() * 59) +
(artIndex * 2) + (getCollectorNumber().hashCode() * 383);
final int id = colorID == null ? 0 : colorID.hashCode();
final int id = Optional.ofNullable(colorID).map(Set::hashCode).orElse(0);
if (foil) {
return code + id + 1;
}

View File

@@ -3,6 +3,7 @@ package forge.item;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import forge.card.*;
import org.apache.commons.lang3.StringUtils;
@@ -154,7 +155,7 @@ public class PaperToken implements InventoryItemFromSet, IPaperCard {
}
@Override
public List<String> getColorID() {
public Set<String> getColorID() {
return null;
}