From 3cb7fac8f2be0de2c77fce8dd8e3ee3c4582f6c4 Mon Sep 17 00:00:00 2001 From: Jorilx Date: Tue, 2 Jan 2024 15:20:45 +0100 Subject: [PATCH] Adventure: add config setting 'allowedEditions' (#4431) --- .../adventure/data/AdventureEventData.java | 20 +++++++++++++++---- .../src/forge/adventure/data/ConfigData.java | 1 + .../src/forge/adventure/data/RewardData.java | 10 +++++++--- .../adventure/scene/SpellSmithScene.java | 6 +++++- .../src/forge/adventure/util/CardUtil.java | 9 +++++++-- 5 files changed, 36 insertions(+), 10 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java b/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java index 487b5afc4cb..23b9d2c5487 100644 --- a/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java +++ b/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java @@ -373,8 +373,14 @@ public class AdventureEventData implements Serializable { } } - for (String restricted : Config.instance().getConfigData().restrictedEditions) { - legalBlocks.removeIf(q -> q.getName().equals(restricted)); + ConfigData configData = Config.instance().getConfigData(); + if (configData.allowedEditions != null) { + List allowed = Arrays.asList(configData.allowedEditions); + legalBlocks.removeIf(q -> !allowed.contains(q.getName())); + } else { + for (String restricted : configData.restrictedEditions) { + legalBlocks.removeIf(q -> q.getName().equals(restricted)); + } } return legalBlocks.isEmpty() ? null : Aggregates.random(legalBlocks); } @@ -388,8 +394,14 @@ public class AdventureEventData implements Serializable { legalBlocks.add(b); } } - for (String restricted : Config.instance().getConfigData().restrictedEditions) { - legalBlocks.removeIf(q -> q.getName().equals(restricted)); + ConfigData configData = Config.instance().getConfigData(); + if (configData.allowedEditions != null) { + List allowed = Arrays.asList(configData.allowedEditions); + legalBlocks.removeIf(q -> !allowed.contains(q.getName())); + } else { + for (String restricted : configData.restrictedEditions) { + legalBlocks.removeIf(q -> q.getName().equals(restricted)); + } } return legalBlocks.isEmpty()?null:Aggregates.random(legalBlocks); } diff --git a/forge-gui-mobile/src/forge/adventure/data/ConfigData.java b/forge-gui-mobile/src/forge/adventure/data/ConfigData.java index bf18d7326c6..453affb632e 100644 --- a/forge-gui-mobile/src/forge/adventure/data/ConfigData.java +++ b/forge-gui-mobile/src/forge/adventure/data/ConfigData.java @@ -22,4 +22,5 @@ public class ConfigData { public RewardData legalCards; public String[] restrictedCards; public String[] restrictedEditions; + public String[] allowedEditions; } diff --git a/forge-gui-mobile/src/forge/adventure/data/RewardData.java b/forge-gui-mobile/src/forge/adventure/data/RewardData.java index a1db60d757e..3b7fcef20dd 100644 --- a/forge-gui-mobile/src/forge/adventure/data/RewardData.java +++ b/forge-gui-mobile/src/forge/adventure/data/RewardData.java @@ -86,7 +86,8 @@ public class RewardData implements Serializable { private static Iterable allEnemyCards; static private void initializeAllCards(){ - RewardData legals = Config.instance().getConfigData().legalCards; + ConfigData configData = Config.instance().getConfigData(); + RewardData legals = configData.legalCards; if(legals==null) allCards = CardUtil.getFullCardPool(false); // we need unique cards only here, so that a unique card can be chosen before a set variant is determined @@ -100,11 +101,14 @@ public class RewardData implements Serializable { return false; if(input.getRules().getAiHints().getRemNonCommanderDecks()) return false; - if(Arrays.asList(Config.instance().getConfigData().restrictedEditions).contains(input.getEdition())) + if(configData.allowedEditions != null) { + if (!Arrays.asList(configData.allowedEditions).contains(input.getEdition())) + return false; + } else if(Arrays.asList(configData.restrictedEditions).contains(input.getEdition())) return false; if(input.getRules().isCustom()) return false; - return !Arrays.asList(Config.instance().getConfigData().restrictedCards).contains(input.getName()); + return !Arrays.asList(configData.restrictedCards).contains(input.getName()); }); //Filter AI cards for enemies. allEnemyCards=Iterables.filter(allCards, input -> { diff --git a/forge-gui-mobile/src/forge/adventure/scene/SpellSmithScene.java b/forge-gui-mobile/src/forge/adventure/scene/SpellSmithScene.java index 08b8f87a906..a7e26681b73 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/SpellSmithScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/SpellSmithScene.java @@ -11,6 +11,7 @@ import com.github.tommyettinger.textra.TextraButton; import com.github.tommyettinger.textra.TextraLabel; import forge.Forge; import forge.StaticData; +import forge.adventure.data.ConfigData; import forge.adventure.data.RewardData; import forge.adventure.util.*; import forge.card.CardEdition; @@ -151,7 +152,10 @@ public class SpellSmithScene extends UIScene { .filter(input2 -> input2.getEdition().equals(input.getCode())).collect(Collectors.toList()); if (it.size() == 0) return false; - return (!Arrays.asList(Config.instance().getConfigData().restrictedEditions).contains(input.getCode())); + ConfigData configData = Config.instance().getConfigData(); + if (configData.allowedEditions != null) + return Arrays.asList(configData.allowedEditions).contains(input.getCode()); + return (!Arrays.asList(configData.restrictedEditions).contains(input.getCode())); }).sorted(new Comparator() { @Override public int compare(CardEdition e1, CardEdition e2) { diff --git a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java index 67a03becec3..24c994ff56b 100644 --- a/forge-gui-mobile/src/forge/adventure/util/CardUtil.java +++ b/forge-gui-mobile/src/forge/adventure/util/CardUtil.java @@ -6,6 +6,7 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Iterables; import forge.StaticData; +import forge.adventure.data.ConfigData; import forge.adventure.data.GeneratedDeckData; import forge.adventure.data.GeneratedDeckTemplateData; import forge.adventure.data.RewardData; @@ -755,8 +756,12 @@ public class CardUtil { } public static Deck generateBoosterPackAsDeck(String code){ - - if (Arrays.asList(Config.instance().getConfigData().restrictedEditions).contains(code)){ + ConfigData configData = Config.instance().getConfigData(); + if (configData.allowedEditions != null) { + if (!Arrays.asList(configData.allowedEditions).contains(code)){ + System.err.println("Cannot generate booster pack, '" + code + "' is not an allowed edition"); + } + } else if (Arrays.asList(configData.restrictedEditions).contains(code)){ System.err.println("Cannot generate booster pack, '" + code + "' is a restricted edition"); }