From c0c43839534fc607f85d4895b1257a0a3612240b Mon Sep 17 00:00:00 2001 From: Krazy Date: Sat, 24 Jan 2015 17:37:54 +0000 Subject: [PATCH] Fixed land distribution for FRF. Basics have been removed entirely as per the real booster packs. Also cleaned up a bit of formatting. --- .../java/forge/card/BoosterGenerator.java | 66 +++++++++++++------ forge-gui/res/blockdata/printsheets.txt | 35 +++++----- 2 files changed, 61 insertions(+), 40 deletions(-) diff --git a/forge-core/src/main/java/forge/card/BoosterGenerator.java b/forge-core/src/main/java/forge/card/BoosterGenerator.java index d6ae4db05d3..08655a298b0 100644 --- a/forge-core/src/main/java/forge/card/BoosterGenerator.java +++ b/forge-core/src/main/java/forge/card/BoosterGenerator.java @@ -96,6 +96,7 @@ public class BoosterGenerator { @SuppressWarnings("unchecked") public static PrintSheet makeSheet(String sheetKey, Iterable src) { + PrintSheet ps = new PrintSheet(sheetKey); String[] sKey = TextUtil.splitWithParenthesis(sheetKey, ' ', 2); Predicate setPred = (Predicate) (sKey.length > 1 ? IPaperCard.Predicates.printedInSets(sKey[1].split(" ")) : Predicates.alwaysTrue()); @@ -106,35 +107,46 @@ public class BoosterGenerator { // source replacement operators - if one is applied setPredicate will be ignored Iterator itMod = operators.iterator(); while(itMod.hasNext()) { + String mainCode = itMod.next(); - if ( mainCode.regionMatches(true, 0, "fromSheet", 0, 9)) { // custom print sheet + + if (mainCode.regionMatches(true, 0, "fromSheet", 0, 9)) { // custom print sheet + String sheetName = StringUtils.strip(mainCode.substring(9), "()\" "); src = StaticData.instance().getPrintSheets().get(sheetName).toFlatList(); setPred = Predicates.alwaysTrue(); } else if (mainCode.startsWith("promo")) { // get exactly the named cards, that's a tiny inlined print sheet + String list = StringUtils.strip(mainCode.substring(5), "() "); String[] cardNames = TextUtil.splitWithParenthesis(list, ',', '"', '"'); List srcList = new ArrayList<>(); - for(String cardName: cardNames) + + for(String cardName: cardNames) { srcList.add(StaticData.instance().getCommonCards().getCard(cardName)); + } + src = srcList; setPred = Predicates.alwaysTrue(); - } else + } else { continue; + } itMod.remove(); + } // only special operators should remain by now - the ones that could not be turned into one predicate String mainCode = operators.isEmpty() ? null : operators.get(0).trim(); if( null == mainCode || mainCode.equalsIgnoreCase(BoosterSlots.ANY) ) { // no restriction on rarity + Predicate predicate = Predicates.and(setPred, extraPred); ps.addAll(Iterables.filter(src, predicate)); } else if ( mainCode.equalsIgnoreCase(BoosterSlots.UNCOMMON_RARE) ) { // for sets like ARN, where U1 cards are considered rare and U3 are uncommon + Predicate predicateRares = Predicates.and(setPred, IPaperCard.Predicates.Presets.IS_RARE, extraPred); ps.addAll(Iterables.filter(src, predicateRares)); @@ -150,41 +162,48 @@ public class BoosterGenerator { Predicate predicateRare = Predicates.and( setPred, IPaperCard.Predicates.Presets.IS_RARE, extraPred); ps.addAll(Iterables.filter(src, predicateRare), 2); - } else + + } else { throw new IllegalArgumentException("Booster generator: operator could not be parsed - " + mainCode); + } + return ps; + } /** * This method also modifies passed parameter */ private static Predicate buildExtraPredicate(List operators) { + List> conditions = new ArrayList<>(); Iterator itOp = operators.iterator(); while(itOp.hasNext()) { + String operator = itOp.next(); if(StringUtils.isEmpty(operator)) { itOp.remove(); continue; } - if(operator.endsWith("s")) - operator = operator.substring(0, operator.length()-1); + if(operator.endsWith("s")) { + operator = operator.substring(0, operator.length() - 1); + } boolean invert = operator.charAt(0) == '!'; - if( invert ) operator = operator.substring(1); + if (invert) { operator = operator.substring(1); } Predicate toAdd = null; - if( operator.equalsIgnoreCase(BoosterSlots.DUAL_FACED_CARD) ) { toAdd = Predicates.compose(CardRulesPredicates.splitType(CardSplitType.Transform), PaperCard.FN_GET_RULES); - } else if ( operator.equalsIgnoreCase(BoosterSlots.LAND) ) { toAdd = Predicates.compose(CardRulesPredicates.Presets.IS_LAND, PaperCard.FN_GET_RULES); - } else if ( operator.equalsIgnoreCase(BoosterSlots.BASIC_LAND)) { toAdd = IPaperCard.Predicates.Presets.IS_BASIC_LAND; - } else if ( operator.equalsIgnoreCase(BoosterSlots.TIME_SHIFTED)) { toAdd = IPaperCard.Predicates.Presets.IS_SPECIAL; - } else if ( operator.equalsIgnoreCase(BoosterSlots.MYTHIC)) { toAdd = IPaperCard.Predicates.Presets.IS_MYTHIC_RARE; - } else if ( operator.equalsIgnoreCase(BoosterSlots.RARE)) { toAdd = IPaperCard.Predicates.Presets.IS_RARE; - } else if ( operator.equalsIgnoreCase(BoosterSlots.UNCOMMON)) { toAdd = IPaperCard.Predicates.Presets.IS_UNCOMMON; - } else if ( operator.equalsIgnoreCase(BoosterSlots.COMMON)) { toAdd = IPaperCard.Predicates.Presets.IS_COMMON; - } else if ( operator.startsWith("name(") ) { + if (operator.equalsIgnoreCase(BoosterSlots.DUAL_FACED_CARD)) { toAdd = Predicates.compose(CardRulesPredicates.splitType(CardSplitType.Transform), PaperCard.FN_GET_RULES); + } else if (operator.equalsIgnoreCase(BoosterSlots.LAND)) { toAdd = Predicates.compose(CardRulesPredicates.Presets.IS_LAND, PaperCard.FN_GET_RULES); + } else if (operator.equalsIgnoreCase(BoosterSlots.BASIC_LAND)) { toAdd = IPaperCard.Predicates.Presets.IS_BASIC_LAND; + } else if (operator.equalsIgnoreCase(BoosterSlots.TIME_SHIFTED)) { toAdd = IPaperCard.Predicates.Presets.IS_SPECIAL; + } else if (operator.equalsIgnoreCase(BoosterSlots.MYTHIC)) { toAdd = IPaperCard.Predicates.Presets.IS_MYTHIC_RARE; + } else if (operator.equalsIgnoreCase(BoosterSlots.RARE)) { toAdd = IPaperCard.Predicates.Presets.IS_RARE; + } else if (operator.equalsIgnoreCase(BoosterSlots.UNCOMMON)) { toAdd = IPaperCard.Predicates.Presets.IS_UNCOMMON; + } else if (operator.equalsIgnoreCase(BoosterSlots.COMMON)) { toAdd = IPaperCard.Predicates.Presets.IS_COMMON; + } else if (operator.startsWith("name(")) { operator = StringUtils.strip(operator.substring(4), "() "); String[] cardNames = TextUtil.splitWithParenthesis(operator, ',', '"', '"'); toAdd = IPaperCard.Predicates.names(Lists.newArrayList(cardNames)); @@ -198,18 +217,25 @@ public class BoosterGenerator { toAdd = IPaperCard.Predicates.names(Lists.newArrayList(cardNames)); } - if(toAdd == null) + if (toAdd == null) { continue; - else + } else { itOp.remove(); + } - if( invert ) + if (invert) { toAdd = Predicates.not(toAdd); + } conditions.add(toAdd); + } - if( conditions.isEmpty() ) + + if (conditions.isEmpty()) { return Predicates.alwaysTrue(); + } + return Predicates.and(conditions); + } diff --git a/forge-gui/res/blockdata/printsheets.txt b/forge-gui/res/blockdata/printsheets.txt index 2132a2dcd40..c12e459c233 100644 --- a/forge-gui/res/blockdata/printsheets.txt +++ b/forge-gui/res/blockdata/printsheets.txt @@ -22,26 +22,21 @@ 1 Maze's End|DGM [FRF Lands] -2 Bloodstained Mire|KTK -2 Flooded Strand|KTK -2 Polluted Delta|KTK -2 Windswept Heath|KTK -2 Wooded Foothills|KTK -10 Bloodfell Caves|FRF -10 Blossoming Sands|FRF -10 Dismal Backwater|FRF -10 Jungle Hollow|FRF -10 Rugged Highlands|FRF -10 Scoured Barrens|FRF -10 Swiftwater Cliffs|FRF -10 Thornwood Falls|FRF -10 Tranquil Cove|FRF -10 Wind-Scarred Crag|FRF -25 Forest|FRF -25 Island|FRF -25 Mountain|FRF -25 Plains|FRF -25 Swamp|FRF +4 Bloodstained Mire|KTK +4 Flooded Strand|KTK +4 Polluted Delta|KTK +4 Windswept Heath|KTK +4 Wooded Foothills|KTK +45 Bloodfell Caves|FRF +45 Blossoming Sands|FRF +45 Dismal Backwater|FRF +45 Jungle Hollow|FRF +45 Rugged Highlands|FRF +45 Scoured Barrens|FRF +45 Swiftwater Cliffs|FRF +45 Thornwood Falls|FRF +45 Tranquil Cove|FRF +45 Wind-Scarred Crag|FRF [GTC Boros Guild] 1 Act of Treason|GTC