diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java index d67690e8371..4a8744f0e76 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java @@ -239,7 +239,10 @@ public class ComputerUtilCost { for (final CostPart part : cost.getCostParts()) { if (part instanceof CostSacrifice) { CardCollection list = new CardCollection(); - final CardCollection exclude = new CardCollection(AiCardMemory.getMemorySet(ai, MemorySet.PAYS_SAC_COST)); + final CardCollection exclude = new CardCollection(); + if (AiCardMemory.getMemorySet(ai, MemorySet.PAYS_SAC_COST) != null) { + exclude.addAll(AiCardMemory.getMemorySet(ai, MemorySet.PAYS_SAC_COST)); + } if (part.payCostFromSource()) { list.add(source); } else if (part.getType().equals("OriginalHost")) { @@ -448,7 +451,10 @@ public class ComputerUtilCost { if (c == null) { c = AbilityUtils.calculateAmount(source, part.getAmount(), sa); } - CardCollection exclude = new CardCollection(AiCardMemory.getMemorySet(ai, MemorySet.PAYS_TAP_COST)); + CardCollection exclude = new CardCollection(); + if (AiCardMemory.getMemorySet(ai, MemorySet.PAYS_TAP_COST) != null) { + exclude.addAll(AiCardMemory.getMemorySet(ai, MemorySet.PAYS_TAP_COST)); + } // trying to produce mana that includes tapping source that will already be tapped if (exclude.contains(source) && cost.hasTapCost()) { return false; diff --git a/forge-ai/src/main/java/forge/ai/ability/AnimateAi.java b/forge-ai/src/main/java/forge/ai/ability/AnimateAi.java index 06afcd1a106..75e8d3ef598 100644 --- a/forge-ai/src/main/java/forge/ai/ability/AnimateAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/AnimateAi.java @@ -146,6 +146,14 @@ public class AnimateAi extends SpellAbilityAi { if (!ComputerUtilCost.checkTapTypeCost(aiPlayer, sa.getPayCosts(), source, sa)) { return false; // prevent crewing with equal or better creatures } + + if (sa.costHasManaX() && sa.getSVar("X").equals("Count$xPaid")) { + // Set PayX here to maximum value. + final int xPay = ComputerUtilCost.getMaxXValue(sa, aiPlayer); + + sa.setXManaCostPaid(xPay); + } + if (!sa.usesTargeting()) { final List defined = AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), sa); boolean bFlag = false; diff --git a/forge-core/src/main/java/forge/ImageKeys.java b/forge-core/src/main/java/forge/ImageKeys.java index 9881668aac8..78cae46a4b5 100644 --- a/forge-core/src/main/java/forge/ImageKeys.java +++ b/forge-core/src/main/java/forge/ImageKeys.java @@ -129,6 +129,23 @@ public final class ImageKeys { // if there's a 1st art variant try with it for .full images file = findFile(dir, filename.replaceAll("[0-9]*.full", "1.full")); if (file != null) { return file; } + //setlookup + if (!StaticData.instance().getSetLookup().isEmpty()) { + for (String setKey : StaticData.instance().getSetLookup().keySet()) { + for (String setLookup : StaticData.instance().getSetLookup().get(setKey)) { + //.fullborder lookup + file = findFile(dir, TextUtil.fastReplace(fullborderFile, setKey, getSetFolder(setLookup))); + if (file != null) { return file; } + file = findFile(dir, TextUtil.fastReplace(fullborderFile, setKey, getSetFolder(setLookup)).replaceAll("[0-9]*.fullborder", "1.fullborder")); + if (file != null) { return file; } + //.full lookup + file = findFile(dir, TextUtil.fastReplace(filename, setKey, getSetFolder(setLookup))); + if (file != null) { return file; } + file = findFile(dir, TextUtil.fastReplace(filename, setKey, getSetFolder(setLookup)).replaceAll("[0-9]*.full", "1.full")); + if (file != null) { return file; } + } + } + } } //if an image, like phenomenon or planes is missing .full in their filenames but you have an existing images that have .full/.fullborder if (!filename.contains(".full")) { @@ -137,12 +154,6 @@ public final class ImageKeys { file = findFile(dir, TextUtil.addSuffix(filename,".fullborder")); if (file != null) { return file; } } - // some S00 cards are really part of 6ED - String s2kAlias = getSetFolder("S00"); - if (filename.startsWith(s2kAlias)) { - file = findFile(dir, TextUtil.fastReplace(filename, s2kAlias, getSetFolder("6ED"))); - if (file != null) { return file; } - } if (dir.equals(CACHE_TOKEN_PICS_DIR)) { int index = filename.lastIndexOf('_'); diff --git a/forge-core/src/main/java/forge/StaticData.java b/forge-core/src/main/java/forge/StaticData.java index 2131906c00d..22473eeb56e 100644 --- a/forge-core/src/main/java/forge/StaticData.java +++ b/forge-core/src/main/java/forge/StaticData.java @@ -10,6 +10,7 @@ import forge.item.FatPack; import forge.item.PaperCard; import forge.item.SealedProduct; import forge.token.TokenDb; +import forge.util.FileUtil; import forge.util.TextUtil; import forge.util.storage.IStorage; import forge.util.storage.StorageBase; @@ -57,18 +58,19 @@ public class StaticData { private IStorage fatPacks; private IStorage boosterBoxes; private IStorage printSheets; + private final Map> setLookup = new HashMap<>(); private static StaticData lastInstance = null; public StaticData(CardStorageReader cardReader, CardStorageReader customCardReader, String editionFolder, String customEditionsFolder, String blockDataFolder, String cardArtPreference, boolean enableUnknownCards, boolean loadNonLegalCards) { - this(cardReader, null, customCardReader, editionFolder, customEditionsFolder, blockDataFolder, cardArtPreference, enableUnknownCards, loadNonLegalCards, false, false); + this(cardReader, null, customCardReader, editionFolder, customEditionsFolder, blockDataFolder, "", cardArtPreference, enableUnknownCards, loadNonLegalCards, false, false); } - public StaticData(CardStorageReader cardReader, CardStorageReader tokenReader, CardStorageReader customCardReader, String editionFolder, String customEditionsFolder, String blockDataFolder, String cardArtPreference, boolean enableUnknownCards, boolean loadNonLegalCards, boolean allowCustomCardsInDecksConformance){ - this(cardReader, tokenReader, customCardReader, editionFolder, customEditionsFolder, blockDataFolder, cardArtPreference, enableUnknownCards, loadNonLegalCards, allowCustomCardsInDecksConformance, false); + public StaticData(CardStorageReader cardReader, CardStorageReader tokenReader, CardStorageReader customCardReader, String editionFolder, String customEditionsFolder, String blockDataFolder, String setLookupFolder, String cardArtPreference, boolean enableUnknownCards, boolean loadNonLegalCards, boolean allowCustomCardsInDecksConformance){ + this(cardReader, tokenReader, customCardReader, editionFolder, customEditionsFolder, blockDataFolder, setLookupFolder, cardArtPreference, enableUnknownCards, loadNonLegalCards, allowCustomCardsInDecksConformance, false); } - public StaticData(CardStorageReader cardReader, CardStorageReader tokenReader, CardStorageReader customCardReader, String editionFolder, String customEditionsFolder, String blockDataFolder, String cardArtPreference, boolean enableUnknownCards, boolean loadNonLegalCards, boolean allowCustomCardsInDecksConformance, boolean enableSmartCardArtSelection) { + public StaticData(CardStorageReader cardReader, CardStorageReader tokenReader, CardStorageReader customCardReader, String editionFolder, String customEditionsFolder, String blockDataFolder, String setLookupFolder, String cardArtPreference, boolean enableUnknownCards, boolean loadNonLegalCards, boolean allowCustomCardsInDecksConformance, boolean enableSmartCardArtSelection) { this.cardReader = cardReader; this.tokenReader = tokenReader; this.editions = new CardEdition.Collection(new CardEdition.Reader(new File(editionFolder))); @@ -143,12 +145,24 @@ public class StaticData { } else { allTokens = null; } + //initialize setLookup + if (FileUtil.isDirectoryWithFiles(setLookupFolder)){ + for (File f : Objects.requireNonNull(new File(setLookupFolder).listFiles())){ + if (f.isFile()) { + setLookup.put(f.getName().replace(".txt",""), FileUtil.readFile(f)); + } + } + } } public static StaticData instance() { return lastInstance; } + public Map> getSetLookup() { + return setLookup; + } + public final CardEdition.Collection getEditions() { return this.editions; } diff --git a/forge-gui/res/cardsfolder/c/creative_outburst.txt b/forge-gui/res/cardsfolder/c/creative_outburst.txt index c95a088b2c0..d9752118e67 100644 --- a/forge-gui/res/cardsfolder/c/creative_outburst.txt +++ b/forge-gui/res/cardsfolder/c/creative_outburst.txt @@ -3,6 +3,6 @@ ManaCost:3 U U R R Types:Instant A:SP$ DealDamage | Cost$ 3 U U R R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 5 | SubAbility$ DBDig | SpellDescription$ CARDNAME deals 5 damage to any target. Look at the top five cards of your library. Put one of them into your hand and the rest on the bottom of your library in a random order. SVar:DBDig:DB$Dig | DigNum$ 5 | RestRandomOrder$ True -A:AB$ Token | Cost$ UR UR Discard<1/CARDNAME> | ActivationZone$ Hand | TokenScript$ c_a_treasure_sac | SpellDescription$ Create a Treasure token. +A:AB$ Token | Cost$ UR UR Discard<1/CARDNAME> | ActivationZone$ Hand | TokenScript$ c_a_treasure_sac | AILogic$ AlwaysOnDiscard | SpellDescription$ Create a Treasure token. DeckHas:Ability$Token Oracle:Creative Outburst deals 5 damage to any target. Look at the top five cards of your library. Put one of them into your hand and the rest on the bottom of your library in a random order.\n{U/R}{U/R}, Discard Creative Outburst: Create a Treasure token. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/e/elemental_masterpiece.txt b/forge-gui/res/cardsfolder/e/elemental_masterpiece.txt index 7e923e8fb48..67a171f5738 100644 --- a/forge-gui/res/cardsfolder/e/elemental_masterpiece.txt +++ b/forge-gui/res/cardsfolder/e/elemental_masterpiece.txt @@ -2,6 +2,6 @@ Name:Elemental Masterpiece ManaCost:5 U R Types:Sorcery A:SP$ Token | Cost$ 5 U R | TokenAmount$ 2 | TokenScript$ ur_4_4_elemental | TokenOwner$ You | SpellDescription$ Create two 4/4 blue and red Elemental creature tokens. -A:AB$ Token | Cost$ UR UR Discard<1/CARDNAME> | ActivationZone$ Hand | TokenScript$ c_a_treasure_sac | SpellDescription$ Create a Treasure token. +A:AB$ Token | Cost$ UR UR Discard<1/CARDNAME> | ActivationZone$ Hand | TokenScript$ c_a_treasure_sac | AILogic$ AlwaysOnDiscard | SpellDescription$ Create a Treasure token. DeckHas:Ability$Token Oracle:Create two 4/4 blue and red Elemental creature tokens.\n{U/R}{U/R}, Discard Elemental Masterpiece: Create a Treasure token. (It's an artifact with "{T}, Sacrifice this artifact: Add one mana of any color.") diff --git a/forge-gui/res/cardsfolder/t/tempt_with_discovery.txt b/forge-gui/res/cardsfolder/t/tempt_with_discovery.txt index 774cdf167f5..cb5423c2b5d 100644 --- a/forge-gui/res/cardsfolder/t/tempt_with_discovery.txt +++ b/forge-gui/res/cardsfolder/t/tempt_with_discovery.txt @@ -2,7 +2,7 @@ Name:Tempt with Discovery ManaCost:3 G Types:Sorcery A:SP$ ChangeZone | Cost$ 3 G | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.YouCtrl | ChangeNum$ 1 | Hidden$ True | NoShuffle$ True | SubAbility$ DBRepeat | StackDescription$ SpellDescription | SpellDescription$ Tempting offer — Search your library for a land card and put it onto the battlefield. Each opponent may search their library for a land card and put it onto the battlefield. For each opponent who searches a library this way, search your library for a land card and put it onto the battlefield. Then each player who searched a library this way shuffles. -SVar:DBRepeat:DB$ RepeatEach | RepeatSubAbility$ DBChangeZone | RepeatPlayers$ Player.Opponent | SubAbility$ DBSearchAgain | RepeatOptionalForEachPlayer$ True | RepeatOptionalMessage$ Do you want to search their library for a land card and put it onto the battlefield? +SVar:DBRepeat:DB$ RepeatEach | RepeatSubAbility$ DBChangeZone | RepeatPlayers$ Player.Opponent | SubAbility$ DBSearchAgain | RepeatOptionalForEachPlayer$ True | RepeatOptionalMessage$ Do you want to search your library for a land card and put it onto the battlefield? SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.RememberedPlayerCtrl | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | ChangeNum$ 1 | Hidden$ True | SubAbility$ DBCount SVar:DBCount:DB$ StoreSVar | SVar$ X | Type$ CountSVar | Expression$ X/Plus.1 SVar:DBSearchAgain:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Land.YouCtrl | ChangeNum$ X | Hidden$ True | Shuffle$ True | StackDescription$ None | SubAbility$ DBReset diff --git a/forge-gui/res/editions/Ikoria Lair of Behemoths.txt b/forge-gui/res/editions/Ikoria Lair of Behemoths.txt index 73c7aa47200..50c747ab1f9 100644 --- a/forge-gui/res/editions/Ikoria Lair of Behemoths.txt +++ b/forge-gui/res/editions/Ikoria Lair of Behemoths.txt @@ -8,7 +8,8 @@ Type=Expansion BoosterCovers=3 Booster=10 Common:fromSheet("IKO cards"):!fromSheet("IKO Lands"), 3 Uncommon:fromSheet("IKO cards"), 1 RareMythic:fromSheet("IKO cards"), 1 fromSheet("IKO Lands") Prerelease=6 Boosters, 1 RareMythic+ -FatPackExtraSlots=20 BasicLands, 20 BasicLands+, 1 Colossification+|IKO|3 +FatPackExtraSlots=20 BasicLands, 20 BasicLands+ +#, 1 Colossification+|IKO|3 ScryfallCode=IKO [cards] diff --git a/forge-gui/res/editions/Magic 2021.txt b/forge-gui/res/editions/Magic 2021.txt index f31c0edb6ca..d9a6df0da01 100644 --- a/forge-gui/res/editions/Magic 2021.txt +++ b/forge-gui/res/editions/Magic 2021.txt @@ -6,7 +6,8 @@ Type=Core BoosterCovers=3 Booster=10 Common:fromSheet("M21 cards"):!fromSheet("M21 Lands"), 3 Uncommon:fromSheet("M21 cards"), 1 RareMythic:fromSheet("M21 cards"), 1 fromSheet("M21 Lands") Prerelease=6 Boosters, 1 RareMythic+ -FatPackExtraSlots=20 BasicLands, 20 BasicLands+, 1 Pack Leader+|M21|3 +FatPackExtraSlots=20 BasicLands, 20 BasicLands+ +#, 1 Pack Leader+|M21|3 ChaosDraftThemes=CORE_SET ScryfallCode=M21 diff --git a/forge-gui/res/editions/Theros Beyond Death.txt b/forge-gui/res/editions/Theros Beyond Death.txt index 39a4c89c839..8686f7d3574 100644 --- a/forge-gui/res/editions/Theros Beyond Death.txt +++ b/forge-gui/res/editions/Theros Beyond Death.txt @@ -7,7 +7,8 @@ Type=Expansion BoosterCovers=3 Booster=10 Common:fromSheet("THB Commons"), 3 Uncommon:fromSheet("THB Uncommons"), 1 RareMythic:fromSheet("THB RareMythics"), 1 BasicLand Prerelease=6 Boosters, 1 RareMythic+ -FatPackExtraSlots=20 BasicLands, 20 BasicLands+, 1 Arasta of the Endless Web+|THB|3 +FatPackExtraSlots=20 BasicLands, 20 BasicLands+ +#, 1 Arasta of the Endless Web+|THB|3 ChaosDraftThemes=GRAVEYARD_MATTERS ScryfallCode=THB diff --git a/forge-gui/res/editions/Throne of Eldraine.txt b/forge-gui/res/editions/Throne of Eldraine.txt index 4c8980c7c8c..3d57d58d323 100644 --- a/forge-gui/res/editions/Throne of Eldraine.txt +++ b/forge-gui/res/editions/Throne of Eldraine.txt @@ -9,7 +9,8 @@ BoosterCovers=3 Booster=10 Common:fromSheet("ELD cards"), 3 Uncommon:fromSheet("ELD cards"), 1 RareMythic:fromSheet("ELD cards"), 1 BasicLand Prerelease=6 Boosters, 1 RareMythic+ FatPack=10 -FatPackExtraSlots=20 BasicLands, 20 BasicLands+, 1 Piper of the Swarm+|ELD|3 +FatPackExtraSlots=20 BasicLands, 20 BasicLands+ +#, 1 Piper of the Swarm+|ELD|3 ScryfallCode=ELD [cards] diff --git a/forge-gui/res/editions/Zendikar Rising.txt b/forge-gui/res/editions/Zendikar Rising.txt index d29eae1178b..f8f1361fdd8 100644 --- a/forge-gui/res/editions/Zendikar Rising.txt +++ b/forge-gui/res/editions/Zendikar Rising.txt @@ -10,7 +10,8 @@ Booster=10 Common:!dfc:fromSheet("ZNR cards"), 3 Uncommon:!dfc:fromSheet("ZNR ca BoosterReplaceSlotFromPrintSheet=ZNR ModalDoubleFaceCards Prerelease=6 Boosters, 1 RareMythic+ #BoosterBox=36 Boosters, 1 fromSheet('ZNR buy a box')+ -FatPackExtraSlots=20 BasicLands, 20 BasicLands+, 1 Charix; the Raging Isle+|ZNR|3 +FatPackExtraSlots=20 BasicLands, 20 BasicLands+ +#, 1 Charix; the Raging Isle+|ZNR|3 ScryfallCode=ZNR [cards] diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index 73dce0bb298..dd82e89346a 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -121,15 +121,15 @@ lblAltLifeDisplay=Alternatives Spieler-Layout (Landscape-Modus) nlAltLifeDisplay=Alternative Anzeige von Lebens-, Gift-, Energie- und Erfahrungspunkten. lblAltZoneTabs=Alternatives Spielerbereich-Layout (Landscape-Modus) nlAltZoneTabs=Alternative Anzeige von Kartenhand, Friedhof, Bibliothek und Exilzone. -lblPreferredArt=Kartenkunst-Präferenz +lblPreferredArt=Kartenbild-Präferenz nlPreferredArt=Gibt an, welche Grafik für Karten ausgewählt werden soll, wenn keine Edition angegeben ist. -lblPrefArtExpansionOnly=Kartenkunst aus Kern-, Erweiterungs- und Nachdrucksets bevorzugen -nlPrefArtExpansionOnly=Bevorzugen Sie, wann immer möglich, Kartenkunst aus Basis-, Erweiterungs- und Reprint-Sets (z. B. keine Promo, keine Online-Editionen). -lblSmartCardArtOpt=Aktivieren Sie die intelligente Auswahl für Kartengrafiken in Decks -nlSmartCardArtOpt=Wenn diese Option aktiviert ist, wird Kartenkunst in Decks automatisch optimiert, um mit Kartenrahmen, Editionen und mehreren Kunstillustrationen zusammenzupassen. -nlSmartCardArtOptNote=HINWEIS: Diese Option wirkt sich nur auf Karten aus, die keine angegebene Edition haben. Andere Karten bleiben unverändert. (Warnung: Experimentell) -latestArtOpt=Neueste Kunst -originalArtOpt=Originalkunst +lblPrefArtExpansionOnly=Kartenbilder aus Haupt-, Erweiterungs- und Reprint-Sets bevorzugen +nlPrefArtExpansionOnly=Bevorzugt, wann immer möglich, Kartenbilder aus Haupt-, Erweiterungs- und Reprint-Sets (z. B. keine Promo, keine Online-Editionen). +lblSmartCardArtOpt=Aktiviert die intelligente Auswahl für Kartenbilder in Decks +nlSmartCardArtOpt=Wenn diese Option aktiviert ist, werden Kartenbilder in Decks automatisch optimiert, um mit Kartenrahmen, Editionen und mehrfachen Bildvarianten zusammenzupassen. +nlSmartCardArtOptNote=HINWEIS: Diese Option wirkt sich nur auf Karten aus, die keine angegebene Edition haben. Andere Karten bleiben unverändert. Warnung: Experimentell!!! +latestArtOpt=Neueste Version +originalArtOpt=Originalbild Troubleshooting=Fehlerbehebung GeneralConfiguration=Allgemeine Einstellungen lblPlayerName=Spielername diff --git a/forge-gui/res/setlookup/J21.txt b/forge-gui/res/setlookup/J21.txt new file mode 100644 index 00000000000..f6250e13705 --- /dev/null +++ b/forge-gui/res/setlookup/J21.txt @@ -0,0 +1,74 @@ +AFR +MH2 +STX +TSR +KHM +CMR +KLR +ZNC +ZNR +AKR +ANB +2XM +JMP +M21 +IKO +C20 +THB +SLD +GN2 +ELD +C19 +M20 +MH1 +WAR +GK2 +RNA +UMA +GK1 +GRN +C18 +M19 +BBD +CM2 +DOM +A25 +RIX +IMA +DDT +XLN +HOU +AKH +MM3 +AER +PCA +DDR +CN2 +SOI +W16 +DDQ +OGW +BFZ +ORI +MM2 +DTK +FRF +KTK +EMN +M15 +VMA +THS +M14 +DGM +GTC +ISD +MBS +ALA +MOR +LRW +10E +LGN +ONS +PCY +P02 +WTH diff --git a/forge-gui/res/setlookup/S00.txt b/forge-gui/res/setlookup/S00.txt new file mode 100644 index 00000000000..adb7d0ed7e2 --- /dev/null +++ b/forge-gui/res/setlookup/S00.txt @@ -0,0 +1 @@ +6ED \ No newline at end of file diff --git a/forge-gui/res/setlookup/S2K.txt b/forge-gui/res/setlookup/S2K.txt new file mode 100644 index 00000000000..adb7d0ed7e2 --- /dev/null +++ b/forge-gui/res/setlookup/S2K.txt @@ -0,0 +1 @@ +6ED \ No newline at end of file diff --git a/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java b/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java index 1d132e63076..522ae934dda 100644 --- a/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java +++ b/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java @@ -32,6 +32,7 @@ public final class ForgeConstants { public static final String RES_DIR = ASSETS_DIR + "res" + PATH_SEPARATOR; public static final String LISTS_DIR = RES_DIR + "lists" + PATH_SEPARATOR; + public static final String SETLOOKUP_DIR = RES_DIR + "setlookup" + PATH_SEPARATOR; public static final String KEYWORD_LIST_FILE = LISTS_DIR + "NonStackingKWList.txt"; public static final String TYPE_LIST_FILE = LISTS_DIR + "TypeLists.txt"; public static final String PLANESWALKER_ACHIEVEMENT_LIST_FILE = LISTS_DIR + "planeswalker-achievements.txt"; diff --git a/forge-gui/src/main/java/forge/model/FModel.java b/forge-gui/src/main/java/forge/model/FModel.java index ca12ddbb99b..ca2731ff7b9 100644 --- a/forge-gui/src/main/java/forge/model/FModel.java +++ b/forge-gui/src/main/java/forge/model/FModel.java @@ -179,7 +179,7 @@ public final class FModel { customReader = null; } magicDb = new StaticData(reader, tokenReader, customReader, ForgeConstants.EDITIONS_DIR, - ForgeConstants.USER_CUSTOM_EDITIONS_DIR, ForgeConstants.BLOCK_DATA_DIR, + ForgeConstants.USER_CUSTOM_EDITIONS_DIR, ForgeConstants.BLOCK_DATA_DIR, ForgeConstants.SETLOOKUP_DIR, FModel.getPreferences().getPref(FPref.UI_PREFERRED_ART), FModel.getPreferences().getPrefBoolean(FPref.UI_LOAD_UNKNOWN_CARDS), FModel.getPreferences().getPrefBoolean(FPref.UI_LOAD_NONLEGAL_CARDS),