diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index 1d13ed4f781..dbec74a010f 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -291,14 +291,12 @@ public class ComputerUtilCombat { * @return a int. */ public static int lifeThatWouldRemain(final Player ai, final Combat combat) { - int damage = 0; final List attackers = combat.getAttackersOf(ai); final List unblocked = Lists.newArrayList(); for (final Card attacker : attackers) { - final List blockers = combat.getBlockers(attacker); if ((blockers.size() == 0) @@ -418,7 +416,6 @@ public class ComputerUtilCombat { final List threateningCommanders = getLifeThreateningCommanders(ai,combat); for (final Card attacker : attackers) { - final List blockers = combat.getBlockers(attacker); if (blockers.isEmpty()) { @@ -2266,7 +2263,7 @@ public class ComputerUtilCombat { if (!re.matchesValidParam("ValidSource", source)) { continue; } - if (!re.matchesValidParam("ValidTarget", source)) { + if (!re.matchesValidParam("ValidTarget", target)) { continue; } if (re.hasParam("IsCombat")) { diff --git a/forge-core/src/main/java/forge/CardStorageReader.java b/forge-core/src/main/java/forge/CardStorageReader.java index d83f642b715..3f6c89288df 100644 --- a/forge-core/src/main/java/forge/CardStorageReader.java +++ b/forge-core/src/main/java/forge/CardStorageReader.java @@ -138,7 +138,7 @@ public class CardStorageReader { final CardRules.Reader rulesReader = new CardRules.Reader(); final List result = new ArrayList<>(); - for(int i = from; i < to; i++) { + for (int i = from; i < to; i++) { final ZipEntry ze = files.get(i); // if (ze.getName().endsWith(CardStorageReader.CARD_FILE_DOT_EXTENSION)) // already filtered! result.add(this.loadCard(rulesReader, ze)); @@ -315,11 +315,11 @@ public class CardStorageReader { final List>> parts = executor.invokeAll(tasks); executor.shutdown(); cdl.await(); - for(final Future> pp : parts) { + for (final Future> pp : parts) { result.addAll(pp.get()); } } else { - for(final Callable> c : tasks) { + for (final Callable> c : tasks) { result.addAll(c.call()); } } diff --git a/forge-core/src/main/java/forge/StaticData.java b/forge-core/src/main/java/forge/StaticData.java index 1486ff33364..eac4c47a2da 100644 --- a/forge-core/src/main/java/forge/StaticData.java +++ b/forge-core/src/main/java/forge/StaticData.java @@ -240,7 +240,6 @@ public class StaticData { private void tryToLoadCard(String requestInfo){ CardDb.CardRequest r = CardRequest.fromString(requestInfo); String cardName = r.cardName; - String setCode = r.edition; CardRules rules = cardReader.attemptToLoadCard(cardName, setCode); CardRules customRules = null; if (customCardReader != null) { @@ -258,14 +257,6 @@ public class StaticData { } } - // TODO Remove these in favor of them being associated to the Edition - /** @return {@link forge.util.storage.IStorage}<{@link forge.item.SealedProduct.Template}> */ - public IStorage getFatPacks() { - if (fatPacks == null) - fatPacks = new StorageBase<>("Fat packs", new FatPack.Template.Reader(blockDataFolder + "fatpacks.txt")); - return fatPacks; - } - /** @return {@link forge.util.storage.IStorage}<{@link forge.item.SealedProduct.Template}> */ public final IStorage getTournamentPacks() { if (tournaments == null) diff --git a/forge-core/src/main/java/forge/card/CardEdition.java b/forge-core/src/main/java/forge/card/CardEdition.java index 5e5fad217b5..7718cfc4775 100644 --- a/forge-core/src/main/java/forge/card/CardEdition.java +++ b/forge-core/src/main/java/forge/card/CardEdition.java @@ -84,6 +84,16 @@ public final class CardEdition implements Comparable { } } + public String getFatPackDefault() { + switch (this) { + case CORE: + case EXPANSION: + return "10"; + default: + return "0"; + } + } + public String toString(){ String[] names = TextUtil.splitWithParenthesis(this.name().toLowerCase(), '_'); for (int i = 0; i < names.length; i++) @@ -128,7 +138,8 @@ public final class CardEdition implements Comparable { BUY_A_BOX("buy a box"), PROMO("promo"), BUNDLE("bundle"), - BOX_TOPPER("box topper"); + BOX_TOPPER("box topper"), + DUNGEONS("dungeons"); private final String name; @@ -198,11 +209,11 @@ public final class CardEdition implements Comparable { try { collNr = Integer.parseInt(onlyNumeric); } catch (NumberFormatException exon) { - collNr = 0; // this is the case of ONLY-letters collector numbers + collNr = 0; // this is the case of ONLY-letters collector numbers } if ((collNr > 0) && (sortableCollNr.startsWith(onlyNumeric))) // e.g. 12a, 37+, 2018f, sortableCollNr = String.format("%05d", collNr) + nonNumeric; - else // e.g. WS6, S1 + else // e.g. WS6, S1 sortableCollNr = nonNumeric + String.format("%05d", collNr); } return sortableCollNr; @@ -242,6 +253,8 @@ public final class CardEdition implements Comparable { // SealedProduct private String prerelease = null; private int boosterBoxCount = 36; + private int fatPackCount = 10; + private String fatPackExtraSlots = ""; // Booster/draft info private boolean smallSetOverride = false; @@ -332,6 +345,8 @@ public final class CardEdition implements Comparable { public String getPrerelease() { return prerelease; } public int getBoosterBoxCount() { return boosterBoxCount; } + public int getFatPackCount() { return fatPackCount; } + public String getFatPackExtraSlots() { return fatPackExtraSlots; } public FoilType getFoilType() { return foilType; } public double getFoilChanceInBooster() { return foilChanceInBooster; } @@ -441,11 +456,11 @@ public final class CardEdition implements Comparable { Map cardToIndex = new HashMap<>(); List sheets = Lists.newArrayList(); - for(String sectionName : cardMap.keySet()) { + 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) { + for (CardInSet card : cards) { int index = 1; if (cardToIndex.containsKey(card.name)) { index = cardToIndex.get(card.name); @@ -460,7 +475,7 @@ public final class CardEdition implements Comparable { sheets.add(sheet); } - for(String sheetName : customPrintSheetsToParse.keySet()) { + for (String sheetName : customPrintSheetsToParse.keySet()) { List sheetToParse = customPrintSheetsToParse.get(sheetName); CardPool sheetPool = CardPool.fromCardList(sheetToParse); PrintSheet sheet = new PrintSheet(String.format("%s %s", this.getCode(), sheetName), sheetPool); @@ -543,7 +558,7 @@ public final class CardEdition implements Comparable { // parse tokens section if (contents.containsKey("tokens")) { - for(String line : contents.get("tokens")) { + for (String line : contents.get("tokens")) { if (StringUtils.isBlank(line)) continue; @@ -571,11 +586,11 @@ public final class CardEdition implements Comparable { res.mciCode = res.code2.toLowerCase(); } res.scryfallCode = section.get("ScryfallCode"); - if (res.scryfallCode == null){ + if (res.scryfallCode == null) { res.scryfallCode = res.code; } res.cardsLanguage = section.get("CardLang"); - if (res.cardsLanguage == null){ + if (res.cardsLanguage == null) { res.cardsLanguage = "en"; } @@ -601,7 +616,7 @@ public final class CardEdition implements Comparable { res.borderColor = BorderColor.valueOf(section.get("border", "Black").toUpperCase(Locale.ENGLISH)); Type enumType = Type.UNKNOWN; if (this.isCustomEditions){ - enumType = Type.CUSTOM_SET; // Forcing ThirdParty Edition Type to avoid inconsistencies + enumType = Type.CUSTOM_SET; // Forcing ThirdParty Edition Type to avoid inconsistencies } else { String type = section.get("type"); if (null != type && !type.isEmpty()) { @@ -617,8 +632,10 @@ public final class CardEdition implements Comparable { res.type = enumType; res.prerelease = section.get("Prerelease", null); res.boosterBoxCount = Integer.parseInt(section.get("BoosterBox", enumType.getBoosterBoxDefault())); + res.fatPackCount = Integer.parseInt(section.get("FatPack", enumType.getFatPackDefault())); + res.fatPackExtraSlots = section.get("FatPackExtraSlots", ""); - switch(section.get("foil", "newstyle").toLowerCase()) { + switch (section.get("foil", "newstyle").toLowerCase()) { case "notsupported": res.foilType = FoilType.NOT_SUPPORTED; break; @@ -751,7 +768,7 @@ public final class CardEdition implements Comparable { @Override public Map readAll() { Map map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - for(CardEdition ce : Collection.this) { + for (CardEdition ce : Collection.this) { List boosterTypes = Lists.newArrayList(ce.getAvailableBoosterTypes()); for (String type : boosterTypes) { String setAffix = type.equals("Draft") ? "" : type; @@ -805,14 +822,14 @@ public final class CardEdition implements Comparable { strictness = CardArtPreference.ORIGINAL_ART_ALL_EDITIONS; // card is not found in core and expansions only (probably something CMD or C13) cp = StaticData.instance().getCommonCards().getCardFromEditions(k.getKey().getName(), strictness); } - if ( cp == null ) + if (cp == null) cp = k.getKey(); // it's unlikely, this code will ever run minEditions.add(cp.getEdition()); } - for(CardEdition ed : getOrderedEditions()) { - if(minEditions.contains(ed.getCode())) + for (CardEdition ed : getOrderedEditions()) { + if (minEditions.contains(ed.getCode())) return ed; } return UNKNOWN; @@ -854,7 +871,7 @@ public final class CardEdition implements Comparable { private static class CanMakeFatPack implements Predicate { @Override public boolean apply(final CardEdition subject) { - return StaticData.instance().getFatPacks().contains(subject.getCode()); + return subject.getFatPackCount() > 0; } } diff --git a/forge-core/src/main/java/forge/card/CardRules.java b/forge-core/src/main/java/forge/card/CardRules.java index c490bbd781a..a0d6cc930aa 100644 --- a/forge-core/src/main/java/forge/card/CardRules.java +++ b/forge-core/src/main/java/forge/card/CardRules.java @@ -513,14 +513,14 @@ public final class CardRules implements ICardCharacteristics { case 'S': if ("S".equals(key)) { this.faces[this.curFace].addStaticAbility(value); - } else if ( "SVar".equals(key) ) { - if ( null == value ) throw new IllegalArgumentException("SVar has no variable name"); + } else if ("SVar".equals(key)) { + if (null == value) throw new IllegalArgumentException("SVar has no variable name"); colonPos = value.indexOf(':'); String variable = colonPos > 0 ? value.substring(0, colonPos) : value; value = colonPos > 0 ? value.substring(1+colonPos) : null; - if ( "Picture".equals(variable) ) { + if ("Picture".equals(variable)) { this.pictureUrl[this.curFace] = value; } else this.faces[curFace].addSVar(variable, value); diff --git a/forge-core/src/main/java/forge/card/CardType.java b/forge-core/src/main/java/forge/card/CardType.java index 257230a184a..2dc2f912a2d 100644 --- a/forge-core/src/main/java/forge/card/CardType.java +++ b/forge-core/src/main/java/forge/card/CardType.java @@ -451,8 +451,7 @@ public final class CardType implements Comparable, CardTypeView { if (calculatedType == null) { if (subtypes.isEmpty()) { calculatedType = StringUtils.join(getTypesBeforeDash(), ' '); - } - else { + } else { calculatedType = StringUtils.join(getTypesBeforeDash(), ' ') + " - " + StringUtils.join(subtypes, " "); } } diff --git a/forge-core/src/main/java/forge/card/MagicColor.java b/forge-core/src/main/java/forge/card/MagicColor.java index 13a73fb55d1..465559faa5a 100644 --- a/forge-core/src/main/java/forge/card/MagicColor.java +++ b/forge-core/src/main/java/forge/card/MagicColor.java @@ -84,7 +84,7 @@ public final class MagicColor { } public static String toShortString(final byte color) { - switch (color){ + switch (color) { case WHITE: return "W"; case BLUE: return "U"; case BLACK: return "B"; @@ -95,7 +95,7 @@ public final class MagicColor { } public static String toLongString(final byte color) { - switch (color){ + switch (color) { case WHITE: return Constant.WHITE; case BLUE: return Constant.BLUE; case BLACK: return Constant.BLACK; diff --git a/forge-core/src/main/java/forge/card/PrintSheet.java b/forge-core/src/main/java/forge/card/PrintSheet.java index 530e9ad2717..822c37bafe2 100644 --- a/forge-core/src/main/java/forge/card/PrintSheet.java +++ b/forge-core/src/main/java/forge/card/PrintSheet.java @@ -29,8 +29,8 @@ public class PrintSheet { public static final IStorage initializePrintSheets(File sheetsFile, CardEdition.Collection editions) { IStorage sheets = new StorageExtendable<>("Special print runs", new PrintSheet.Reader(sheetsFile)); - for(CardEdition edition : editions) { - for(PrintSheet ps : edition.getPrintSheetsBySection()) { + for (CardEdition edition : editions) { + for (PrintSheet ps : edition.getPrintSheetsBySection()) { sheets.add(ps.name, ps); } } @@ -64,7 +64,7 @@ public class PrintSheet { } public void addAll(Iterable cards, int weight) { - for(PaperCard card : cards) + for (PaperCard card : cards) cardsWithWeights.add(card, weight); } @@ -78,15 +78,15 @@ public class PrintSheet { private PaperCard fetchRoulette(int start, int roulette, Collection toSkip) { int sum = start; boolean isSecondRun = start > 0; - for(Entry cc : cardsWithWeights ) { + for (Entry cc : cardsWithWeights ) { sum += cc.getValue(); - if( sum > roulette ) { - if( toSkip != null && toSkip.contains(cc.getKey())) + if (sum > roulette) { + if (toSkip != null && toSkip.contains(cc.getKey())) continue; return cc.getKey(); } } - if( isSecondRun ) + if (isSecondRun) throw new IllegalStateException("Print sheet does not have enough unique cards"); return fetchRoulette(sum + 1, roulette, toSkip); // start over from beginning, in case last cards were to skip @@ -94,8 +94,8 @@ public class PrintSheet { public List all() { List result = new ArrayList<>(); - for(Entry kv : cardsWithWeights) { - for(int i = 0; i < kv.getValue(); i++) { + for (Entry kv : cardsWithWeights) { + for (int i = 0; i < kv.getValue(); i++) { result.add(kv.getKey()); } } @@ -106,26 +106,26 @@ public class PrintSheet { List result = new ArrayList<>(); int totalWeight = cardsWithWeights.countAll(); - if( totalWeight == 0) { + if (totalWeight == 0) { System.err.println("No cards were found on sheet " + name); return result; } // If they ask for 40 unique basic lands (to make a fatpack) out of 20 distinct possible, add the whole print run N times. int uniqueCards = cardsWithWeights.countDistinct(); - while ( number >= uniqueCards ) { - for(Entry kv : cardsWithWeights) { + while (number >= uniqueCards) { + for (Entry kv : cardsWithWeights) { result.add(kv.getKey()); } number -= uniqueCards; } List uniques = wantUnique ? new ArrayList<>() : null; - for(int iC = 0; iC < number; iC++) { + for (int iC = 0; iC < number; iC++) { int index = MyRandom.getRandom().nextInt(totalWeight); PaperCard toAdd = fetchRoulette(0, index, wantUnique ? uniques : null); result.add(toAdd); - if( wantUnique ) + if (wantUnique) uniques.add(toAdd); } return result; diff --git a/forge-core/src/main/java/forge/deck/Deck.java b/forge-core/src/main/java/forge/deck/Deck.java index c64776cb067..70b7062209b 100644 --- a/forge-core/src/main/java/forge/deck/Deck.java +++ b/forge-core/src/main/java/forge/deck/Deck.java @@ -257,7 +257,7 @@ public class Deck extends DeckBase implements Iterable cp : pool) { + for (Entry cp : pool) { PaperCard card = cp.getKey(); int count = cp.getValue(); if (!cardNamesWithNoEditionInSection.contains(card.getName())) diff --git a/forge-core/src/main/java/forge/item/FatPack.java b/forge-core/src/main/java/forge/item/FatPack.java index 2ee80d07309..3d0f65a3b7b 100644 --- a/forge-core/src/main/java/forge/item/FatPack.java +++ b/forge-core/src/main/java/forge/item/FatPack.java @@ -18,10 +18,8 @@ package forge.item; -import java.util.ArrayList; import java.util.List; -import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import com.google.common.base.Function; @@ -30,16 +28,17 @@ import forge.ImageKeys; import forge.StaticData; import forge.card.CardEdition; import forge.item.generation.BoosterGenerator; -import forge.util.TextUtil; -import forge.util.storage.StorageReaderFile; public class FatPack extends BoxedProduct { public static final Function FN_FROM_SET = new Function() { @Override - public FatPack apply(final CardEdition arg1) { - FatPack.Template d = StaticData.instance().getFatPacks().get(arg1.getCode()); + public FatPack apply(final CardEdition edition) { + int boosters = edition.getFatPackCount(); + if (boosters <= 0) { return null; } + + FatPack.Template d = new Template(edition); if (d == null) { return null; } - return new FatPack(arg1.getName(), d, d.cntBoosters); + return new FatPack(edition.getName(), d, d.cntBoosters); } }; @@ -68,17 +67,6 @@ public class FatPack extends BoxedProduct { return BoosterGenerator.getBoosterPack(fpData); } - /*@Override - protected List generate() { - List result = new ArrayList(); - for (int i = 0; i < fpData.getCntBoosters(); i++) { - result.addAll(super.generate()); - } - // Add any extra cards that may come in the fatpack after Boosters - result.addAll(BoosterGenerator.getBoosterPack(fpData)); - return result; - }*/ - @Override public final Object clone() { return new FatPack(name, fpData, fpData.cntBoosters); @@ -92,38 +80,12 @@ public class FatPack extends BoxedProduct { public static class Template extends SealedProduct.Template { private final int cntBoosters; - public int getCntBoosters() { return cntBoosters; } - private Template(String edition, int boosters, Iterable> itrSlots) - { - super(edition, itrSlots); - cntBoosters = boosters; - } + private Template(CardEdition edition) { + super(edition.getCode(), edition.getFatPackExtraSlots()); - public static final class Reader extends StorageReaderFile