From 48be3406c725e4b7cf261a650681a0133f8aacd1 Mon Sep 17 00:00:00 2001 From: Jetz Date: Thu, 6 Nov 2025 08:50:00 -0500 Subject: [PATCH] Reduce bias towards standard in event selection. Make allowedEvents override other filters. Ensure set pool filter can't filter out every event. --- .../adventure/data/AdventureEventData.java | 44 +++++++++++-------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java b/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java index 266eaddf722..75a4673017b 100644 --- a/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java +++ b/forge-gui-mobile/src/forge/adventure/data/AdventureEventData.java @@ -175,17 +175,17 @@ public class AdventureEventData implements Serializable { private static final Predicate filterStandard = FModel.getFormats().getStandard().editionLegalPredicate; public static Predicate selectSetPool() { - // Should we negate any of these to avoid overlap? final int rollD100 = MyRandom.getRandom().nextInt(100); Predicate rolledFilter; if (rollD100 < 30) { rolledFilter = filterStandard; } else if (rollD100 < 60) { - rolledFilter = filterPioneer; + // Remove standard from older pools because its representation is already inflated. + rolledFilter = filterPioneer.and(filterStandard.negate()); } else if (rollD100 < 80) { - rolledFilter = filterModern; + rolledFilter = filterModern.and(filterStandard.negate()); } else { - rolledFilter = filterVintage; + rolledFilter = filterVintage.and(filterStandard.negate()); } return rolledFilter; } @@ -195,25 +195,33 @@ public class AdventureEventData implements Serializable { private static CardBlock pickWeightedCardBlock() { CardEdition.Collection editions = FModel.getMagicDb().getEditions(); ConfigData configData = Config.instance().getConfigData(); - Predicate filter = CardEdition.Predicates.CAN_MAKE_BOOSTER.and(selectSetPool()); + Predicate filter = CardEdition.Predicates.CAN_MAKE_BOOSTER; if(configData.allowedEvents != null) { Set allowedEvents = Set.of(configData.allowedEvents); filter = filter.and(q -> allowedEvents.contains(q.getCode())); } - else if(configData.restrictedEvents != null) { - //Temporary restriction until rewards are more diverse - don't want to award restricted cards so these editions need different rewards added. - //Also includes sets that use conspiracy or commander drafts. - Set restrictedEvents = Set.of(configData.restrictedEvents); - filter = filter.and((q) -> !restrictedEvents.contains(q.getCode())); - } - if (configData.allowedEditions != null) { - Set allowed = Set.of(configData.allowedEditions); - filter = filter.and(q -> allowed.contains(q.getCode())); - } else if(configData.restrictedEditions != null) { - List restrictedList = Arrays.asList(configData.restrictedEditions); - Set restricted = new HashSet<>(restrictedList); //Would use Set.of but that throws an error if there's any duplicates, and users edit these lists all the time. - filter = filter.and(q -> !restricted.contains(q.getCode())); + else + { + //The whitelist beats all other filters. + if(configData.restrictedEvents != null) { + //Temporary restriction until rewards are more diverse - don't want to award restricted cards so these editions need different rewards added. + //Also includes sets that use conspiracy or commander drafts. + Set restrictedEvents = Set.of(configData.restrictedEvents); + filter = filter.and((q) -> !restrictedEvents.contains(q.getCode())); + } + if (configData.allowedEditions != null) { + Set allowed = Set.of(configData.allowedEditions); + filter = filter.and(q -> allowed.contains(q.getCode())); + } else if(configData.restrictedEditions != null) { + List restrictedList = Arrays.asList(configData.restrictedEditions); + Set restricted = new HashSet<>(restrictedList); //Would use Set.of but that throws an error if there's any duplicates, and users edit these lists all the time. + filter = filter.and(q -> !restricted.contains(q.getCode())); + } + + Predicate setPoolFilter = selectSetPool(); + if(editions.stream().anyMatch(setPoolFilter)) + filter = filter.and(setPoolFilter); } List allEditions = new ArrayList<>();