diff --git a/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java b/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java index 97df4253361..d696d529e93 100644 --- a/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java +++ b/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java @@ -96,7 +96,7 @@ public class GameCopier { newPlayer.setLandsPlayedThisTurn(origPlayer.getLandsPlayedThisTurn()); newPlayer.setCounters(Maps.newHashMap(origPlayer.getCounters())); newPlayer.setSpeed(origPlayer.getSpeed()); - newPlayer.setBlessing(origPlayer.hasBlessing()); + newPlayer.setBlessing(origPlayer.hasBlessing(), null); newPlayer.setRevolt(origPlayer.hasRevolt()); newPlayer.setDescended(origPlayer.getDescended()); newPlayer.setLibrarySearched(origPlayer.getLibrarySearched()); diff --git a/forge-core/src/main/java/forge/ImageKeys.java b/forge-core/src/main/java/forge/ImageKeys.java index 803d437aa83..4a575dffe3a 100644 --- a/forge-core/src/main/java/forge/ImageKeys.java +++ b/forge-core/src/main/java/forge/ImageKeys.java @@ -23,10 +23,14 @@ public final class ImageKeys { public static final String HIDDEN_CARD = "hidden"; public static final String MORPH_IMAGE = "morph"; - public static final String DISGUISED_IMAGE = "disguised"; public static final String MANIFEST_IMAGE = "manifest"; public static final String CLOAKED_IMAGE = "cloaked"; public static final String FORETELL_IMAGE = "foretell"; + public static final String BLESSING_IMAGE = "blessing"; + public static final String INITIATIVE_IMAGE = "initiative"; + public static final String MONARCH_IMAGE = "monarch"; + public static final String THE_RING_IMAGE = "the_ring"; + public static final String RADIATION_IMAGE = "radiation"; public static final String BACKFACE_POSTFIX = "$alt"; public static final String SPECFACE_W = "$wspec"; diff --git a/forge-core/src/main/java/forge/StaticData.java b/forge-core/src/main/java/forge/StaticData.java index 10314cf33da..b758c4c7eaa 100644 --- a/forge-core/src/main/java/forge/StaticData.java +++ b/forge-core/src/main/java/forge/StaticData.java @@ -95,12 +95,12 @@ public class StaticData { if (!loadNonLegalCards) { for (CardEdition e : editions) { if (e.getType() == CardEdition.Type.FUNNY || e.getBorderColor() == CardEdition.BorderColor.SILVER) { - List eternalCards = e.getFunnyEternalCards(); + List eternalCards = e.getFunnyEternalCards(); - for (CardEdition.CardInSet cis : e.getAllCardsInSet()) { + for (CardEdition.EditionEntry cis : e.getAllCardsInSet()) { if (eternalCards.contains(cis)) continue; - funnyCards.add(cis.name); + funnyCards.add(cis.name()); } } } @@ -790,11 +790,11 @@ public class StaticData { Map> cardCount = new HashMap<>(); List> futures = new ArrayList<>(); - for (CardEdition.CardInSet c : e.getAllCardsInSet()) { - if (cardCount.containsKey(c.name)) { - cardCount.put(c.name, Pair.of(c.collectorNumber != null && c.collectorNumber.startsWith("F"), cardCount.get(c.name).getRight() + 1)); + for (CardEdition.EditionEntry c : e.getAllCardsInSet()) { + if (cardCount.containsKey(c.name())) { + cardCount.put(c.name(), Pair.of(c.collectorNumber() != null && c.collectorNumber().startsWith("F"), cardCount.get(c.name()).getRight() + 1)); } else { - cardCount.put(c.name, Pair.of(c.collectorNumber != null && c.collectorNumber.startsWith("F"), 1)); + cardCount.put(c.name(), Pair.of(c.collectorNumber() != null && c.collectorNumber().startsWith("F"), 1)); } } @@ -856,7 +856,7 @@ public class StaticData { futures.clear(); // TODO: Audit token images here... - for(Map.Entry> tokenEntry : e.getTokens().asMap().entrySet()) { + for(Map.Entry> tokenEntry : e.getTokens().asMap().entrySet()) { final String name = tokenEntry.getKey(); final int artIndex = tokenEntry.getValue().size(); try { @@ -995,4 +995,23 @@ public class StaticData { } return false; } + public String getOtherImageKey(String name, String set) { + if (this.editions.get(set) != null) { + String realSetCode = this.editions.get(set).getOtherSet(name); + if (realSetCode != null) { + CardEdition.EditionEntry ee = this.editions.get(realSetCode).findOther(name); + if (ee != null) { // TODO add collector Number and new ImageKey format + return ImageKeys.getTokenKey(name + "_" + realSetCode.toLowerCase()); + } + } + } + for (CardEdition e : this.editions) { + CardEdition.EditionEntry ee = e.findOther(name); + if (ee != null) { // TODO add collector Number and new ImageKey format + return ImageKeys.getTokenKey(name + "_" + e.getCode().toLowerCase()); + } + } + // final fallback + return ImageKeys.getTokenKey(name); + } } diff --git a/forge-core/src/main/java/forge/card/CardDb.java b/forge-core/src/main/java/forge/card/CardDb.java index 6292ecb37a9..cbc6498a1fd 100644 --- a/forge-core/src/main/java/forge/card/CardDb.java +++ b/forge-core/src/main/java/forge/card/CardDb.java @@ -22,7 +22,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimaps; import forge.StaticData; -import forge.card.CardEdition.CardInSet; +import forge.card.CardEdition.EditionEntry; import forge.card.CardEdition.Type; import forge.deck.generation.IDeckGenPool; import forge.item.IPaperCard; @@ -332,27 +332,27 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { } } - private void addSetCard(CardEdition e, CardInSet cis, CardRules cr) { + private void addSetCard(CardEdition e, EditionEntry cis, CardRules cr) { int artIdx = IPaperCard.DEFAULT_ART_INDEX; - String key = e.getCode() + "/" + cis.name; + String key = e.getCode() + "/" + cis.name(); if (artIds.containsKey(key)) { artIdx = artIds.get(key) + 1; } artIds.put(key, artIdx); - addCard(new PaperCard(cr, e.getCode(), cis.rarity, artIdx, false, cis.collectorNumber, cis.artistName, cis.functionalVariantName)); + addCard(new PaperCard(cr, e.getCode(), cis.rarity(), artIdx, false, cis.collectorNumber(), cis.artistName(), cis.functionalVariantName())); } private boolean addFromSetByName(String cardName, CardEdition ed, CardRules cr) { - List cardsInSet = ed.getCardInSet(cardName); // empty collection if not present + List cardsInSet = ed.getCardInSet(cardName); // empty collection if not present if (cr.hasFunctionalVariants()) { - cardsInSet = cardsInSet.stream().filter(c -> StringUtils.isEmpty(c.functionalVariantName) - || cr.getSupportedFunctionalVariants().contains(c.functionalVariantName) + cardsInSet = cardsInSet.stream().filter(c -> StringUtils.isEmpty(c.functionalVariantName()) + || cr.getSupportedFunctionalVariants().contains(c.functionalVariantName()) ).collect(Collectors.toList()); } if (cardsInSet.isEmpty()) return false; - for (CardInSet cis : cardsInSet) { + for (EditionEntry cis : cardsInSet) { addSetCard(ed, cis, cr); } return true; @@ -397,15 +397,15 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { upcomingSet = e; } - for (CardEdition.CardInSet cis : e.getAllCardsInSet()) { - CardRules cr = rulesByName.get(cis.name); + for (CardEdition.EditionEntry cis : e.getAllCardsInSet()) { + CardRules cr = rulesByName.get(cis.name()); if (cr == null) { - missingCards.add(cis.name); + missingCards.add(cis.name()); continue; } if (cr.hasFunctionalVariants()) { - if (StringUtils.isNotEmpty(cis.functionalVariantName) - && !cr.getSupportedFunctionalVariants().contains(cis.functionalVariantName)) { + if (StringUtils.isNotEmpty(cis.functionalVariantName()) + && !cr.getSupportedFunctionalVariants().contains(cis.functionalVariantName())) { //Supported card, unsupported variant. //Could note the card as missing but since these are often un-cards, //it's likely absent because it does something out of scope. @@ -463,8 +463,8 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { lang = new LangEnglish(); } // for now just check Universes Within - for (CardInSet cis : editions.get("SLX").getCards()) { - String orgName = alternateName.get(cis.name); + for (EditionEntry cis : editions.get("SLX").getCards()) { + String orgName = alternateName.get(cis.name()); if (orgName != null) { // found original (beyond) print CardRules org = getRules(orgName); @@ -494,7 +494,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { CardRules within = new CardRules(new ICardFace[] { renamedMain, renamedOther, null, null, null, null, null }, org.getSplitType(), org.getAiHints()); // so workshop can edit same script within.setNormalizedName(org.getNormalizedName()); - rulesByName.put(cis.name, within); + rulesByName.put(cis.name(), within); } } } @@ -1107,8 +1107,8 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { public Collection getAllCards(CardEdition edition) { List cards = Lists.newArrayList(); - for (CardInSet cis : edition.getAllCardsInSet()) { - PaperCard card = this.getCard(cis.name, edition.getCode()); + for (EditionEntry cis : edition.getAllCardsInSet()) { + PaperCard card = this.getCard(cis.name(), edition.getCode()); if (card == null) { // Just in case the card is listed in the edition file but Forge doesn't support it continue; @@ -1160,10 +1160,10 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { // May iterate over editions and find out if there is any card named 'cardRequest' but not implemented with Forge script. if (StringUtils.isBlank(request.edition)) { for (CardEdition edition : editions) { - for (CardInSet cardInSet : edition.getAllCardsInSet()) { - if (cardInSet.name.equals(request.cardName)) { + for (EditionEntry cardInSet : edition.getAllCardsInSet()) { + if (cardInSet.name().equals(request.cardName)) { cardEdition = edition; - cardRarity = cardInSet.rarity; + cardRarity = cardInSet.rarity(); break; } } @@ -1174,9 +1174,9 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { } else { cardEdition = editions.get(request.edition); if (cardEdition != null) { - for (CardInSet cardInSet : cardEdition.getAllCardsInSet()) { - if (cardInSet.name.equals(request.cardName)) { - cardRarity = cardInSet.rarity; + for (EditionEntry cardInSet : cardEdition.getAllCardsInSet()) { + if (cardInSet.name().equals(request.cardName)) { + cardRarity = cardInSet.rarity(); break; } } @@ -1227,9 +1227,9 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { // @leriomaggio: DONE! re-using here the same strategy implemented for lazy-loading! for (CardEdition e : editions.getOrderedEditions()) { int artIdx = IPaperCard.DEFAULT_ART_INDEX; - for (CardInSet cis : e.getCardInSet(cardName)) - paperCards.add(new PaperCard(rules, e.getCode(), cis.rarity, artIdx++, false, - cis.collectorNumber, cis.artistName, cis.functionalVariantName)); + for (EditionEntry cis : e.getCardInSet(cardName)) + paperCards.add(new PaperCard(rules, e.getCode(), cis.rarity(), artIdx++, false, + cis.collectorNumber(), cis.artistName(), cis.functionalVariantName())); } } else { String lastEdition = null; @@ -1243,13 +1243,13 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { if (ed == null) { continue; } - List cardsInSet = ed.getCardInSet(cardName); + List cardsInSet = ed.getCardInSet(cardName); if (cardsInSet.isEmpty()) continue; int cardInSetIndex = Math.max(artIdx-1, 0); // make sure doesn't go below zero - CardInSet cds = cardsInSet.get(cardInSetIndex); // use ArtIndex to get the right Coll. Number + EditionEntry cds = cardsInSet.get(cardInSetIndex); // use ArtIndex to get the right Coll. Number paperCards.add(new PaperCard(rules, lastEdition, tuple.getValue(), artIdx++, false, - cds.collectorNumber, cds.artistName, cds.functionalVariantName)); + cds.collectorNumber(), cds.artistName(), cds.functionalVariantName())); } } if (paperCards.isEmpty()) { diff --git a/forge-core/src/main/java/forge/card/CardEdition.java b/forge-core/src/main/java/forge/card/CardEdition.java index bf8aedce521..92edd12d6ba 100644 --- a/forge-core/src/main/java/forge/card/CardEdition.java +++ b/forge-core/src/main/java/forge/card/CardEdition.java @@ -18,6 +18,7 @@ package forge.card; import com.google.common.collect.*; + import forge.StaticData; import forge.card.CardDb.CardArtPreference; import forge.deck.CardPool; @@ -207,20 +208,7 @@ public final class CardEdition implements Comparable { return sortableCollNr; } - public static class CardInSet implements Comparable { - public final String collectorNumber; - public final String name; - public final String artistName; - public final CardRarity rarity; - public final String functionalVariantName; - - public CardInSet(final String name, final String collectorNumber, final CardRarity rarity, final String artistName, final String functionalVariantName) { - this.name = name; - this.collectorNumber = collectorNumber; - this.artistName = artistName; - this.rarity = rarity; - this.functionalVariantName = functionalVariantName; - } + public record EditionEntry(String name, String collectorNumber, CardRarity rarity, String artistName, String functionalVariantName) implements Comparable { public String toString() { StringBuilder sb = new StringBuilder(); @@ -228,7 +216,7 @@ public final class CardEdition implements Comparable { sb.append(collectorNumber); sb.append(' '); } - if (rarity != CardRarity.Unknown) { + if (rarity != CardRarity.Unknown && rarity != CardRarity.Token) { sb.append(rarity); sb.append(' '); } @@ -245,7 +233,7 @@ public final class CardEdition implements Comparable { } @Override - public int compareTo(CardInSet o) { + public int compareTo(EditionEntry o) { final int nameCmp = name.compareToIgnoreCase(o.name); if (0 != nameCmp) { return nameCmp; @@ -260,51 +248,13 @@ public final class CardEdition implements Comparable { } } - public static class TokenInSet implements Comparable { - public final String collectorNumber; - public final String name; - public final String artistName; - - public TokenInSet(final String name, final String collectorNumber, final String artistName) { - this.name = name; - this.collectorNumber = collectorNumber; - this.artistName = artistName; - } - - public String toString() { - StringBuilder sb = new StringBuilder(); - if (collectorNumber != null) { - sb.append(collectorNumber); - sb.append(' '); - } - sb.append(name); - if (artistName != null) { - sb.append(" @"); - sb.append(artistName); - } - return sb.toString(); - } - - @Override - public int compareTo(TokenInSet o) { - final int nameCmp = name.compareToIgnoreCase(o.name); - if (0 != nameCmp) { - return nameCmp; - } - String thisCollNr = getSortableCollectorNumber(collectorNumber); - String othrCollNr = getSortableCollectorNumber(o.collectorNumber); - return thisCollNr.compareTo(othrCollNr); - } - } - - private final static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); /** * Equivalent to the set code of CardEdition.UNKNOWN */ public static final String UNKNOWN_CODE = "???"; - public static final CardEdition UNKNOWN = new CardEdition("1990-01-01", UNKNOWN_CODE, "??", Type.UNKNOWN, "Undefined", FoilType.NOT_SUPPORTED, new CardInSet[]{}); + public static final CardEdition UNKNOWN = new CardEdition("1990-01-01", UNKNOWN_CODE, "??", Type.UNKNOWN, "Undefined", FoilType.NOT_SUPPORTED, new EditionEntry[]{}); private Date date; private String code; private String code2; @@ -340,17 +290,18 @@ public final class CardEdition implements Comparable { private String doublePickDuringDraft = ""; private String[] chaosDraftThemes = new String[0]; - private final ListMultimap cardMap; - private final List cardsInSet; - private final ListMultimap tokenMap; + private final ListMultimap cardMap; + private final List cardsInSet; + private final ListMultimap tokenMap; // custom print sheets that will be loaded lazily private final Map> customPrintSheetsToParse; + private ListMultimap otherMap = ArrayListMultimap.create(); private int boosterArts = 1; private SealedTemplate boosterTpl = null; private final Map boosterTemplates = new HashMap<>(); - private CardEdition(ListMultimap cardMap, ListMultimap tokens, Map> customPrintSheetsToParse) { + private CardEdition(ListMultimap cardMap, ListMultimap tokens, Map> customPrintSheetsToParse) { this.cardMap = cardMap; this.cardsInSet = new ArrayList<>(cardMap.values()); Collections.sort(cardsInSet); @@ -358,8 +309,8 @@ public final class CardEdition implements Comparable { this.customPrintSheetsToParse = customPrintSheetsToParse; } - private CardEdition(CardInSet[] cards, ListMultimap tokens) { - List cardsList = Arrays.asList(cards); + private CardEdition(EditionEntry[] cards, ListMultimap tokens) { + List cardsList = Arrays.asList(cards); this.cardMap = ArrayListMultimap.create(); this.cardMap.replaceValues("cards", cardsList); this.cardsInSet = new ArrayList<>(cardsList); @@ -381,7 +332,7 @@ public final class CardEdition implements Comparable { * @param name the name of the set * @param cards the cards in the set */ - private CardEdition(String date, String code, String code2, Type type, String name, FoilType foil, CardInSet[] cards) { + private CardEdition(String date, String code, String code2, Type type, String name, FoilType foil, EditionEntry[] cards) { this(cards, ArrayListMultimap.create()); this.code = code; this.code2 = code2; @@ -430,14 +381,14 @@ public final class CardEdition implements Comparable { public String getSheetReplaceCardFromSheet2() { return sheetReplaceCardFromSheet2; } public String[] getChaosDraftThemes() { return chaosDraftThemes; } - public List getCards() { return cardMap.get(EditionSectionWithCollectorNumbers.CARDS.getName()); } - public List getRebalancedCards() { return cardMap.get(EditionSectionWithCollectorNumbers.REBALANCED.getName()); } - public List getFunnyEternalCards() { return cardMap.get(EditionSectionWithCollectorNumbers.ETERNAL.getName()); } - public List getAllCardsInSet() { + public List getCards() { return cardMap.get(EditionSectionWithCollectorNumbers.CARDS.getName()); } + public List getRebalancedCards() { return cardMap.get(EditionSectionWithCollectorNumbers.REBALANCED.getName()); } + public List getFunnyEternalCards() { return cardMap.get(EditionSectionWithCollectorNumbers.ETERNAL.getName()); } + public List getAllCardsInSet() { return cardsInSet; } - private ListMultimap cardsInSetLookupMap = null; + private ListMultimap cardsInSetLookupMap = null; /** * Get all the CardInSet instances with the input card name. @@ -445,12 +396,12 @@ public final class CardEdition implements Comparable { * @return A List of all the CardInSet instances for a given name. * If not fount, an Empty sequence (view) will be returned instead! */ - public List getCardInSet(String cardName){ + public List getCardInSet(String cardName){ if (cardsInSetLookupMap == null) { // initialise cardsInSetLookupMap = Multimaps.newListMultimap(new TreeMap<>(String.CASE_INSENSITIVE_ORDER), Lists::newArrayList); - List cardsInSet = this.getAllCardsInSet(); - for (CardInSet cis : cardsInSet){ + List cardsInSet = this.getAllCardsInSet(); + for (EditionEntry cis : cardsInSet){ String key = cis.name; cardsInSetLookupMap.put(key, cis); } @@ -458,10 +409,10 @@ public final class CardEdition implements Comparable { return this.cardsInSetLookupMap.get(cardName); } - public CardInSet getCardFromCollectorNumber(String collectorNumber) { + public EditionEntry getCardFromCollectorNumber(String collectorNumber) { if(collectorNumber == null || collectorNumber.isEmpty()) return null; - for(CardInSet c : this.cardsInSet) { + for(EditionEntry c : this.cardsInSet) { //Could build a map for this one too if it's used for more than one-offs. if (c.collectorNumber.equalsIgnoreCase(collectorNumber)) return c; @@ -470,7 +421,7 @@ public final class CardEdition implements Comparable { } public boolean isRebalanced(String cardName) { - for (CardInSet cis : getRebalancedCards()) { + for (EditionEntry cis : getRebalancedCards()) { if (cis.name.equals(cardName)) { return true; } @@ -480,7 +431,7 @@ public final class CardEdition implements Comparable { public boolean isModern() { return getDate().after(parseDate("2003-07-27")); } //8ED and above are modern except some promo cards and others - public Multimap getTokens() { return tokenMap; } + public Multimap getTokens() { return tokenMap; } public String getTokenSet(String token) { if (tokenMap.containsKey(token)) { @@ -491,6 +442,22 @@ public final class CardEdition implements Comparable { } return null; } + public String getOtherSet(String token) { + if (otherMap.containsKey(token)) { + return this.getCode(); + } + if (this.tokenFallbackCode != null) { + return StaticData.instance().getCardEdition(this.tokenFallbackCode).getOtherSet(token); + } + return null; + } + + public EditionEntry findOther(String name) { + if (otherMap.containsKey(name)) { + return Aggregates.random(otherMap.get(name)); + } + return null; + } @Override public int compareTo(final CardEdition o) { @@ -574,8 +541,8 @@ public final class CardEdition implements Comparable { for (String sectionName : cardMap.keySet()) { PrintSheet sheet = new PrintSheet(String.format("%s %s", this.getCode(), sectionName)); - List cards = cardMap.get(sectionName); - for (CardInSet card : cards) { + List cards = cardMap.get(sectionName); + for (EditionEntry card : cards) { int index = 1; if (cardToIndex.containsKey(card.name)) { index = cardToIndex.get(card.name) + 1; @@ -654,7 +621,7 @@ public final class CardEdition implements Comparable { "(^(.?[0-9A-Z]+\\S?[A-Z]*)\\s)?([^@]*)( @(.*))?$" ); - ListMultimap cardMap = ArrayListMultimap.create(); + ListMultimap cardMap = ArrayListMultimap.create(); List boosterSlots = null; Map> customPrintSheetsToParse = new HashMap<>(); List editionSectionsWithCollectorNumbers = EditionSectionWithCollectorNumbers.getNames(); @@ -686,7 +653,7 @@ public final class CardEdition implements Comparable { String cardName = matcher.group(5); String artistName = matcher.group(7); String functionalVariantName = matcher.group(9); - CardInSet cis = new CardInSet(cardName, collectorNumber, r, artistName, functionalVariantName); + EditionEntry cis = new EditionEntry(cardName, collectorNumber, r, artistName, functionalVariantName); cardMap.put(sectionName, cis); } @@ -700,7 +667,8 @@ public final class CardEdition implements Comparable { } } - ListMultimap tokenMap = ArrayListMultimap.create(); + ListMultimap tokenMap = ArrayListMultimap.create(); + ListMultimap otherMap = ArrayListMultimap.create(); // parse tokens section if (contents.containsKey("tokens")) { for (String line : contents.get("tokens")) { @@ -715,10 +683,27 @@ public final class CardEdition implements Comparable { String collectorNumber = matcher.group(2); String cardName = matcher.group(3); String artistName = matcher.group(5); - TokenInSet tis = new TokenInSet(cardName, collectorNumber, artistName); + // rarity isn't used for this anyway + EditionEntry tis = new EditionEntry(cardName, collectorNumber, CardRarity.Token, artistName, null); tokenMap.put(cardName, tis); } } + if (contents.containsKey("other")) { + for (String line : contents.get("other")) { + if (StringUtils.isBlank(line)) + continue; + Matcher matcher = tokenPattern.matcher(line); + + if (!matcher.matches()) { + continue; + } + String collectorNumber = matcher.group(2); + String cardName = matcher.group(3); + String artistName = matcher.group(5); + EditionEntry tis = new EditionEntry(cardName, collectorNumber, CardRarity.Unknown, artistName, null); + otherMap.put(cardName, tis); + } + } CardEdition res = new CardEdition(cardMap, tokenMap, customPrintSheetsToParse); res.boosterSlots = boosterSlots; @@ -733,6 +718,8 @@ public final class CardEdition implements Comparable { res.cardsLanguage = metadata.get("CardLang", "en"); res.boosterArts = metadata.getInt("BoosterCovers", 1); + res.otherMap = otherMap; + String boosterDesc = metadata.get("Booster"); if (metadata.contains("Booster")) { @@ -851,7 +838,7 @@ public final class CardEdition implements Comparable { initAliases(E); //Made a method in case the system changes, so it's consistent. } CardEdition customBucket = new CardEdition("2990-01-01", "USER", "USER", - Type.CUSTOM_SET, "USER", FoilType.NOT_SUPPORTED, new CardInSet[]{}); + Type.CUSTOM_SET, "USER", FoilType.NOT_SUPPORTED, new EditionEntry[]{}); this.add(customBucket); initAliases(customBucket); this.lock = true; //Consider it initialized and prevent from writing any more data. diff --git a/forge-game/src/main/java/forge/game/Game.java b/forge-game/src/main/java/forge/game/Game.java index 80b308533b0..ff3d85e535b 100644 --- a/forge-game/src/main/java/forge/game/Game.java +++ b/forge-game/src/main/java/forge/game/Game.java @@ -958,9 +958,9 @@ public class Game { // if the player who lost was the Monarch, someone else will be the monarch // TODO need to check rules if it should try the next player if able if (p.equals(getPhaseHandler().getPlayerTurn())) { - getAction().becomeMonarch(getNextPlayerAfter(p), null); + getAction().becomeMonarch(getNextPlayerAfter(p), p.getMonarchSet()); } else { - getAction().becomeMonarch(getPhaseHandler().getPlayerTurn(), null); + getAction().becomeMonarch(getPhaseHandler().getPlayerTurn(), p.getMonarchSet()); } } @@ -970,9 +970,9 @@ public class Game { // If the player who has the initiative leaves the game on their own turn, // or the active player left the game at the same time, the next player in turn order takes the initiative. if (p.equals(getPhaseHandler().getPlayerTurn())) { - getAction().takeInitiative(getNextPlayerAfter(p), null); + getAction().takeInitiative(getNextPlayerAfter(p), p.getInitiativeSet()); } else { - getAction().takeInitiative(getPhaseHandler().getPlayerTurn(), null); + getAction().takeInitiative(getPhaseHandler().getPlayerTurn(), p.getInitiativeSet()); } } diff --git a/forge-game/src/main/java/forge/game/GameFormat.java b/forge-game/src/main/java/forge/game/GameFormat.java index eae9b415968..d9eaf2ea20d 100644 --- a/forge-game/src/main/java/forge/game/GameFormat.java +++ b/forge-game/src/main/java/forge/game/GameFormat.java @@ -21,7 +21,7 @@ import com.google.common.collect.Lists; import forge.StaticData; import forge.card.CardDb; import forge.card.CardEdition; -import forge.card.CardEdition.CardInSet; +import forge.card.CardEdition.EditionEntry; import forge.card.CardRarity; import forge.deck.CardPool; import forge.deck.Deck; @@ -226,9 +226,9 @@ public class GameFormat implements Comparable { for (String setCode : allowedSetCodes_ro) { CardEdition edition = StaticData.instance().getEditions().get(setCode); if (edition != null) { - for (CardInSet card : edition.getAllCardsInSet()) { - if (!bannedCardNames_ro.contains(card.name)) { - PaperCard pc = commonCards.getCard(card.name, setCode, card.collectorNumber); + for (EditionEntry card : edition.getAllCardsInSet()) { + if (!bannedCardNames_ro.contains(card.name())) { + PaperCard pc = commonCards.getCard(card.name(), setCode, card.collectorNumber()); if (pc != null) { cards.add(pc); } diff --git a/forge-game/src/main/java/forge/game/GameSnapshot.java b/forge-game/src/main/java/forge/game/GameSnapshot.java index 602917ee406..b27bf819a26 100644 --- a/forge-game/src/main/java/forge/game/GameSnapshot.java +++ b/forge-game/src/main/java/forge/game/GameSnapshot.java @@ -170,7 +170,7 @@ public class GameSnapshot { newPlayer.setDamageReceivedThisTurn(origPlayer.getDamageReceivedThisTurn()); newPlayer.setLandsPlayedThisTurn(origPlayer.getLandsPlayedThisTurn()); newPlayer.setCounters(Maps.newHashMap(origPlayer.getCounters())); - newPlayer.setBlessing(origPlayer.hasBlessing()); + newPlayer.setBlessing(origPlayer.hasBlessing(), null); newPlayer.setRevolt(origPlayer.hasRevolt()); newPlayer.setLibrarySearched(origPlayer.getLibrarySearched()); newPlayer.setSpellsCastLastTurn(origPlayer.getSpellsCastLastTurn()); diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 46da1e35f55..f31a71a1dbc 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -1366,7 +1366,7 @@ public class AbilityUtils { // do blessing there before condition checks if (source.hasKeyword(Keyword.ASCEND) && controller.getZone(ZoneType.Battlefield).size() >= 10) { - controller.setBlessing(true); + controller.setBlessing(true, source.getSetCode()); } if (source.hasKeyword(Keyword.GIFT) && sa.isGiftPromised()) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/AscendEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AscendEffect.java index c4df2493b05..3080e120e7e 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AscendEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AscendEffect.java @@ -39,7 +39,7 @@ public class AscendEffect extends SpellAbilityEffect { } // Player need 10+ permanents on the battlefield if (p.getZone(ZoneType.Battlefield).size() >= 10) { - p.setBlessing(true); + p.setBlessing(true, sa.getOriginalHost().getSetCode()); } } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/BecomeMonarchEffect.java b/forge-game/src/main/java/forge/game/ability/effects/BecomeMonarchEffect.java index 519b73f886b..1b0bd6b5ad0 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/BecomeMonarchEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/BecomeMonarchEffect.java @@ -24,7 +24,7 @@ public class BecomeMonarchEffect extends SpellAbilityEffect { @Override public void resolve(SpellAbility sa) { // TODO: improve ai and fix corner cases - final String set = sa.getHostCard().getSetCode(); + final String set = sa.getOriginalHost().getSetCode(); for (final Player p : getTargetPlayers(sa)) { if (!p.isInGame()) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java index f521b0b8aef..32bb7126c0e 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java @@ -71,7 +71,7 @@ public class RestartGameEffect extends SpellAbilityEffect { p.resetRingTemptedYou(); p.clearRingBearer(); p.clearTheRing(); - p.setBlessing(false); + p.setBlessing(false, null); p.clearController(); CardCollection newLibrary = new CardCollection(p.getCardsIn(restartZones, false)); diff --git a/forge-game/src/main/java/forge/game/ability/effects/RingTemptsYouEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RingTemptsYouEffect.java index 6de2bd98662..37edf405fd4 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RingTemptsYouEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RingTemptsYouEffect.java @@ -23,10 +23,9 @@ public class RingTemptsYouEffect extends EffectEffect { public void resolve(SpellAbility sa) { Player p = sa.getActivatingPlayer(); Game game = p.getGame(); - Card card = sa.getHostCard(); if (p.getTheRing() == null) - p.createTheRing(card); + p.createTheRing(sa.getOriginalHost().getSetCode()); //increment ring tempted you for property p.incrementRingTemptedYou(); diff --git a/forge-game/src/main/java/forge/game/ability/effects/TakeInitiativeEffect.java b/forge-game/src/main/java/forge/game/ability/effects/TakeInitiativeEffect.java index c8fcaa5dba2..92c33c3f657 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/TakeInitiativeEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/TakeInitiativeEffect.java @@ -24,7 +24,7 @@ public class TakeInitiativeEffect extends SpellAbilityEffect { @Override public void resolve(SpellAbility sa) { // TODO: improve ai and fix corner cases - final String set = sa.getHostCard().getSetCode(); + final String set = sa.getOriginalHost().getSetCode(); for (final Player p : getTargetPlayers(sa)) { if (!p.isInGame()) { diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index fe917410625..f5fe6f85928 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -6549,28 +6549,31 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr public final String getFacedownImageKey() { if (isInZone(ZoneType.Exile)) { - return isForetold() ? ImageKeys.FORETELL_IMAGE : ImageKeys.HIDDEN_CARD; + if (isForetold()) { + return StaticData.instance().getOtherImageKey(ImageKeys.FORETELL_IMAGE, null); + } + return ImageKeys.getTokenKey(ImageKeys.HIDDEN_CARD); } if (isManifested()) { String set = getManifestedSA().getCardState().getSetCode(); - return ImageKeys.MANIFEST_IMAGE + "_" + set; + return StaticData.instance().getOtherImageKey(ImageKeys.MANIFEST_IMAGE, set); } if (isCloaked()) { String set = getCloakedSA().getCardState().getSetCode(); - return ImageKeys.CLOAKED_IMAGE + "_" + set; + return StaticData.instance().getOtherImageKey(ImageKeys.CLOAKED_IMAGE, set); } if (getCastSA() != null) { String set = getCastSA().getCardState().getSetCode(); if (getCastSA().isKeyword(Keyword.DISGUISE)) { - return ImageKeys.CLOAKED_IMAGE + "_" + set; + return StaticData.instance().getOtherImageKey(ImageKeys.CLOAKED_IMAGE, set); } else if (getCastSA().isKeyword(Keyword.MORPH) || getCastSA().isKeyword(Keyword.MEGAMORPH)) { - return ImageKeys.MORPH_IMAGE + "_" + set; + return StaticData.instance().getOtherImageKey(ImageKeys.MORPH_IMAGE, set); } } // TODO add face-down SA to key - return ImageKeys.HIDDEN_CARD; + return ImageKeys.getTokenKey(ImageKeys.HIDDEN_CARD); } public final boolean isTributed() { return tributed; } diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index d9b4b27b4ef..3a0a5ff76e6 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -1313,7 +1313,7 @@ public class CardView extends GameEntityView { } public String getImageKey(Iterable viewers) { if (getState() == CardStateName.FaceDown) { - return ImageKeys.getTokenKey(getCard().getFacedownImageKey()); + return getCard().getFacedownImageKey(); } if (canBeShownToAny(viewers)) { if (isCloned() && StaticData.instance().useSourceImageForClone()) { diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 960711ec23c..4f8c2fd646c 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -20,6 +20,7 @@ package forge.game.player; import com.google.common.collect.*; import forge.ImageKeys; import forge.LobbyPlayer; +import forge.StaticData; import forge.card.*; import forge.card.mana.ManaCost; import forge.card.mana.ManaCostShard; @@ -3303,18 +3304,15 @@ public class Player extends GameEntity implements Comparable { this.updateZoneForView(com); } - public void createTheRing(Card host) { + public void createTheRing(String set) { final PlayerZone com = getZone(ZoneType.Command); if (theRing == null) { theRing = new Card(game.nextCardId(), null, game); theRing.setOwner(this); theRing.setGamePieceType(GamePieceType.EFFECT); - String image = ImageKeys.getTokenKey("the_ring"); - if (host != null) { - theRing.setImageKey("t:the_ring_" + host.getSetCode().toLowerCase()); - theRing.setSetCode(host.getSetCode()); - } else { - theRing.setImageKey(image); + theRing.setImageKey(StaticData.instance().getOtherImageKey(ImageKeys.THE_RING_IMAGE, set)); + if (set != null) { + theRing.setSetCode(set); } theRing.setName("The Ring"); theRing.updateStateForView(); @@ -3444,18 +3442,18 @@ public class Player extends GameEntity implements Comparable { return equals(game.getMonarch()); } + public String getMonarchSet() { + return monarchEffect == null ? monarchEffect.getSetCode() : null; + } + public void createMonarchEffect(final String set) { final PlayerZone com = getZone(ZoneType.Command); if (monarchEffect == null) { monarchEffect = new Card(game.nextCardId(), null, game); monarchEffect.setOwner(this); monarchEffect.setGamePieceType(GamePieceType.EFFECT); - if (set != null) { - monarchEffect.setImageKey("t:monarch_" + set.toLowerCase()); - monarchEffect.setSetCode(set); - } else { - monarchEffect.setImageKey("t:monarch"); - } + monarchEffect.setImageKey(StaticData.instance().getOtherImageKey(ImageKeys.MONARCH_IMAGE, set)); + monarchEffect.setSetCode(set); monarchEffect.setName("The Monarch"); { @@ -3496,18 +3494,18 @@ public class Player extends GameEntity implements Comparable { return !StaticAbilityCantBecomeMonarch.anyCantBecomeMonarch(this); } + public String getInitiativeSet() { + return initiativeEffect != null ? initiativeEffect.getSetCode() : null; + } + public void createInitiativeEffect(final String set) { final PlayerZone com = getZone(ZoneType.Command); if (initiativeEffect == null) { initiativeEffect = new Card(game.nextCardId(), null, game); initiativeEffect.setOwner(this); initiativeEffect.setGamePieceType(GamePieceType.EFFECT); - if (set != null) { - initiativeEffect.setImageKey("t:initiative_" + set.toLowerCase()); - initiativeEffect.setSetCode(set); - } else { - initiativeEffect.setImageKey("t:initiative"); - } + initiativeEffect.setImageKey(StaticData.instance().getOtherImageKey(ImageKeys.INITIATIVE_IMAGE, set)); + initiativeEffect.setSetCode(set); initiativeEffect.setName("The Initiative"); //Set up damage trigger @@ -3574,7 +3572,7 @@ public class Player extends GameEntity implements Comparable { radiationEffect = new Card(game.nextCardId(), null, game); radiationEffect.setOwner(this); radiationEffect.setGamePieceType(GamePieceType.EFFECT); - radiationEffect.setImageKey("t:radiation"); + radiationEffect.setImageKey(StaticData.instance().getOtherImageKey(ImageKeys.RADIATION_IMAGE, setCode)); radiationEffect.setName("Radiation"); if (setCode != null) { radiationEffect.setSetCode(setCode); @@ -3684,7 +3682,7 @@ public class Player extends GameEntity implements Comparable { public boolean hasBlessing() { return blessingEffect != null; } - public void setBlessing(boolean bless) { + public void setBlessing(boolean bless, String setCode) { // no need to to change if ((blessingEffect != null) == bless) { return; @@ -3695,9 +3693,12 @@ public class Player extends GameEntity implements Comparable { if (bless) { blessingEffect = new Card(game.nextCardId(), null, game); blessingEffect.setOwner(this); - blessingEffect.setImageKey("t:blessing"); + blessingEffect.setImageKey(StaticData.instance().getOtherImageKey(ImageKeys.BLESSING_IMAGE, setCode)); blessingEffect.setName("City's Blessing"); blessingEffect.setGamePieceType(GamePieceType.EFFECT); + if (setCode != null) { + blessingEffect.setSetCode(setCode); + } blessingEffect.updateStateForView(); diff --git a/forge-gui-mobile/src/forge/adventure/data/RewardData.java b/forge-gui-mobile/src/forge/adventure/data/RewardData.java index 57968c601e8..856ccb3a66f 100644 --- a/forge-gui-mobile/src/forge/adventure/data/RewardData.java +++ b/forge-gui-mobile/src/forge/adventure/data/RewardData.java @@ -241,7 +241,7 @@ public class RewardData implements Serializable { { allEditions.removeIf( cardEdition -> cardEdition.getAllCardsInSet().stream().anyMatch( - o -> o.name.equals(restrictedCard)) + o -> o.name().equals(restrictedCard)) ); } diff --git a/forge-gui-mobile/src/forge/adventure/scene/SpellSmithScene.java b/forge-gui-mobile/src/forge/adventure/scene/SpellSmithScene.java index 5e3aced46fe..fbebc21d73c 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/SpellSmithScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/SpellSmithScene.java @@ -16,7 +16,7 @@ import forge.adventure.data.RewardData; import forge.adventure.util.*; import forge.card.CardEdition; import forge.card.ColorSet; -import forge.card.CardEdition.CardInSet; +import forge.card.CardEdition.EditionEntry; import forge.card.CardRarity; import forge.item.PaperCard; import forge.model.FModel; @@ -356,9 +356,9 @@ public class SpellSmithScene extends UIScene { // Use the rarity of the card from the filtered set. CardRarity inputRarity = input.getRarity(); if (cardEdition != null) { - List cardsInSet = cardEdition.getCardInSet(input.getName()); + List cardsInSet = cardEdition.getCardInSet(input.getName()); if (cardsInSet.size() == 0) return false; - inputRarity = cardsInSet.get(0).rarity; + inputRarity = cardsInSet.get(0).rarity(); } if (!rarity.isEmpty()) if (!inputRarity.toString().equals(rarity)) return false; if (colorFilter.size() > 0) diff --git a/forge-gui-mobile/src/forge/adventure/stage/ConsoleCommandInterpreter.java b/forge-gui-mobile/src/forge/adventure/stage/ConsoleCommandInterpreter.java index 399076fd75c..2e3e8290a25 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/ConsoleCommandInterpreter.java +++ b/forge-gui-mobile/src/forge/adventure/stage/ConsoleCommandInterpreter.java @@ -244,12 +244,12 @@ public class ConsoleCommandInterpreter { if (s.length < 2) return "Command needs 2 parameters: Set code, collector number."; CardEdition edition = StaticData.instance().getCardEdition(s[0]); if (edition == null) return "Cannot find edition: " + s[0]; - CardEdition.CardInSet cis = edition.getCardFromCollectorNumber(s[1]); + CardEdition.EditionEntry cis = edition.getCardFromCollectorNumber(s[1]); if (cis == null) return String.format("Set '%s' does not have a card with collector number '%s'.", edition.getName(), s[1]); - PaperCard card = StaticData.instance().fetchCard(cis.name, edition.getCode(), cis.collectorNumber); + PaperCard card = StaticData.instance().fetchCard(cis.name(), edition.getCode(), cis.collectorNumber()); if(card == null) { //Found in the set, not supported. - return String.format("Failed to fetch (%s, %s, %s) - Not currently supported.", cis.name, edition.getCode(), cis.collectorNumber); + return String.format("Failed to fetch (%s, %s, %s) - Not currently supported.", cis.name(), edition.getCode(), cis.collectorNumber()); } if(s.length >= 3) { try { diff --git a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestPlane.java b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestPlane.java index c803669eb9b..dfad6fb459f 100644 --- a/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestPlane.java +++ b/forge-gui/src/main/java/forge/gamemodes/planarconquest/ConquestPlane.java @@ -25,7 +25,7 @@ import java.util.Set; import forge.card.CardDb; import forge.card.CardEdition; -import forge.card.CardEdition.CardInSet; +import forge.card.CardEdition.EditionEntry; import forge.deck.generation.DeckGenPool; import forge.game.GameType; import forge.item.PaperCard; @@ -192,9 +192,9 @@ public class ConquestPlane { for (String setCode : setCodes) { CardEdition edition = FModel.getMagicDb().getEditions().get(setCode); if (edition != null) { - for (CardInSet card : edition.getAllCardsInSet()) { - if (bannedCardSet == null || !bannedCardSet.contains(card.name)) { - addCard(commonCards.getCard(card.name, setCode)); + for (EditionEntry card : edition.getAllCardsInSet()) { + if (bannedCardSet == null || !bannedCardSet.contains(card.name())) { + addCard(commonCards.getCard(card.name(), setCode)); } } } diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java b/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java index 1a3a2137df2..aabf7067426 100644 --- a/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java +++ b/forge-gui/src/main/java/forge/gamemodes/quest/QuestEventDraft.java @@ -28,7 +28,7 @@ import java.util.Map; import java.util.Set; import forge.card.CardEdition; -import forge.card.CardEdition.CardInSet; +import forge.card.CardEdition.EditionEntry; import forge.card.CardRarity; import forge.deck.Deck; import forge.deck.DeckGroup; @@ -445,9 +445,9 @@ public class QuestEventDraft implements IQuestEvent { final List cardNames = new ArrayList<>(); for (final CardEdition edition : getAllEditions()) { - for (final CardInSet card : edition.getAllCardsInSet()) { - if (card.rarity == CardRarity.Rare || card.rarity == CardRarity.MythicRare) { - final PaperCard cardToAdd = FModel.getMagicDb().getCommonCards().getCard(card.name, edition.getCode()); + for (final EditionEntry card : edition.getAllCardsInSet()) { + if (card.rarity() == CardRarity.Rare || card.rarity() == CardRarity.MythicRare) { + final PaperCard cardToAdd = FModel.getMagicDb().getCommonCards().getCard(card.name(), edition.getCode()); if (cardToAdd != null && !cardNames.contains(cardToAdd.getName())) { possibleCards.add(cardToAdd); cardNames.add(cardToAdd.getName()); @@ -468,26 +468,26 @@ public class QuestEventDraft implements IQuestEvent { private PaperCard getPromoCard() { final CardEdition randomEdition = getRandomEdition(); - final List cardsInEdition = new ArrayList<>(); + final List cardsInEdition = new ArrayList<>(); final List cardNames = new ArrayList<>(); - for (final CardInSet card : randomEdition.getAllCardsInSet()) { - if (card.rarity == CardRarity.Rare || card.rarity == CardRarity.MythicRare) { - if (!cardNames.contains(card.name)) { + for (final EditionEntry card : randomEdition.getAllCardsInSet()) { + if (card.rarity() == CardRarity.Rare || card.rarity() == CardRarity.MythicRare) { + if (!cardNames.contains(card.name())) { cardsInEdition.add(card); - cardNames.add(card.name); + cardNames.add(card.name()); } } } - CardInSet randomCard; + EditionEntry randomCard; PaperCard promo = null; int attempts = 25; while (promo == null && attempts-- > 0) { randomCard = cardsInEdition.get((int) (MyRandom.getRandom().nextDouble() * cardsInEdition.size())); - promo = FModel.getMagicDb().getCommonCards().getCard(randomCard.name, randomEdition.getCode()); + promo = FModel.getMagicDb().getCommonCards().getCard(randomCard.name(), randomEdition.getCode()); } if (promo == null) { diff --git a/forge-gui/src/main/java/forge/util/ImageFetcher.java b/forge-gui/src/main/java/forge/util/ImageFetcher.java index 085c9972a0b..7af1e8bab97 100644 --- a/forge-gui/src/main/java/forge/util/ImageFetcher.java +++ b/forge-gui/src/main/java/forge/util/ImageFetcher.java @@ -249,7 +249,7 @@ public abstract class ImageFetcher { if (edition == null || edition.getType() == CardEdition.Type.CUSTOM_SET) return; //Custom set token, skip fetching. //PaperToken pt = StaticData.instance().getAllTokens().getToken(tokenName, setCode); - Collection allTokens = edition.getTokens().get(tokenName); + Collection allTokens = edition.getTokens().get(tokenName); if (!allTokens.isEmpty()) { // This loop is going to try to download all the arts until it finds one @@ -258,17 +258,17 @@ public abstract class ImageFetcher { // Ideally we would have some mapping for generating card to determine which art indexed/collector number to try to fetch // Token art we're downloading and which location we're storing it in. // Once we're pulling from PaperTokens this section will change a bit - Iterator it = allTokens.iterator(); - CardEdition.TokenInSet tis; + Iterator it = allTokens.iterator(); + CardEdition.EditionEntry tis; while(it.hasNext()) { tis = it.next(); String tokenCode = edition.getTokensCode(); String langCode = edition.getCardsLangCode(); - if (tis.collectorNumber == null || tis.collectorNumber.isEmpty()) { + if (tis.collectorNumber() == null || tis.collectorNumber().isEmpty()) { continue; } - downloadUrls.add(ForgeConstants.URL_PIC_SCRYFALL_DOWNLOAD + ImageUtil.getScryfallTokenDownloadUrl(tis.collectorNumber, tokenCode, langCode)); + downloadUrls.add(ForgeConstants.URL_PIC_SCRYFALL_DOWNLOAD + ImageUtil.getScryfallTokenDownloadUrl(tis.collectorNumber(), tokenCode, langCode)); } }