Search in sources :

Example 1 with SetType

use of mage.constants.SetType in project mage by magefree.

the class ConstructedFormats method buildLists.

public static void buildLists() {
    underlyingSetCodesPerFormat.put(STANDARD, new ArrayList<>());
    underlyingSetCodesPerFormat.put(EXTENDED, new ArrayList<>());
    underlyingSetCodesPerFormat.put(FRONTIER, new ArrayList<>());
    underlyingSetCodesPerFormat.put(PIONEER, new ArrayList<>());
    underlyingSetCodesPerFormat.put(MODERN, new ArrayList<>());
    underlyingSetCodesPerFormat.put(VINTAGE_LEGACY, new ArrayList<>());
    underlyingSetCodesPerFormat.put(HISTORIC, new ArrayList<>());
    underlyingSetCodesPerFormat.put(JOKE, new ArrayList<>());
    underlyingSetCodesPerFormat.put(CUSTOM, new ArrayList<>());
    final Map<String, ExpansionInfo> expansionInfo = new HashMap<>();
    // prevent NPE on sorting if this is not the first try
    formats.clear();
    // we have to return here to prevent exception in design view. (Does not hurt at design time)
    if (!ExpansionRepository.instance.instanceInitialized) {
        return;
    }
    // build formats list for deck validators
    for (ExpansionInfo set : ExpansionRepository.instance.getAll()) {
        expansionInfo.put(set.getName(), set);
        formats.add(set.getName());
        // full list
        underlyingSetCodesPerFormat.put(set.getName(), new ArrayList<>());
        underlyingSetCodesPerFormat.get(set.getName()).add(set.getCode());
        // custom
        if (set.getType().isCustomSet()) {
            underlyingSetCodesPerFormat.get(CUSTOM).add(set.getCode());
            continue;
        }
        // joke
        if (set.getType().isJokeSet()) {
            underlyingSetCodesPerFormat.get(JOKE).add(set.getCode());
            continue;
        }
        // vintage/legacy (any set, TODO: even ?custom set?)
        underlyingSetCodesPerFormat.get(VINTAGE_LEGACY).add(set.getCode());
        // historic
        if (set.getType().isHistoricLegal() && set.getReleaseDate().after(historicDate)) {
            underlyingSetCodesPerFormat.get(HISTORIC).add(set.getCode());
        }
        // standard (dependent on current date)
        if (STANDARD_CARDS.getSetCodes().contains(set.getCode())) {
            underlyingSetCodesPerFormat.get(STANDARD).add(set.getCode());
        }
        // extended
        if (set.getType().isStandardLegal() && set.getReleaseDate().after(extendedDate)) {
            underlyingSetCodesPerFormat.get(EXTENDED).add(set.getCode());
        }
        // frontier
        if (set.getType().isStandardLegal() && set.getReleaseDate().after(frontierDate)) {
            underlyingSetCodesPerFormat.get(FRONTIER).add(set.getCode());
        }
        // pioneer
        if (set.getType().isStandardLegal() && set.getReleaseDate().after(pioneerDate)) {
            underlyingSetCodesPerFormat.get(PIONEER).add(set.getCode());
        }
        // modern
        if (set.getType().isModernLegal() && set.getReleaseDate().after(modernDate)) {
            underlyingSetCodesPerFormat.get(MODERN).add(set.getCode());
        }
        if (set.getType() == SetType.EXPANSION && set.getBlockName() != null) {
            String blockDisplayName = getBlockDisplayName(set.getBlockName());
            underlyingSetCodesPerFormat.computeIfAbsent(blockDisplayName, k -> new ArrayList<>());
            underlyingSetCodesPerFormat.get(blockDisplayName).add(set.getCode());
            if (expansionInfo.get(blockDisplayName) == null) {
                expansionInfo.put(blockDisplayName, set);
                formats.add(blockDisplayName);
            }
            if (expansionInfo.get(blockDisplayName).getReleaseDate().after(set.getReleaseDate())) {
                expansionInfo.put(blockDisplayName, set);
            }
        }
        if (set.getType() == SetType.SUPPLEMENTAL && set.getBlockName() != null) {
            expansionInfo.putIfAbsent(set.getBlockName(), set);
            if (expansionInfo.get(set.getBlockName()).getReleaseDate().before(set.getReleaseDate())) {
                expansionInfo.put(set.getBlockName(), set);
            }
        }
    }
    formats.sort((name1, name2) -> {
        ExpansionInfo expansionInfo1 = expansionInfo.get(name1);
        ExpansionInfo expansionInfo2 = expansionInfo.get(name2);
        if (expansionInfo1.getType().compareTo(expansionInfo2.getType()) == 0) {
            SetType setType = expansionInfo1.getType();
            switch(setType) {
                case EXPANSION:
                    if (expansionInfo1.getBlockName() == null) {
                        if (expansionInfo2.getBlockName() == null) {
                            return expansionInfo2.getReleaseDate().compareTo(expansionInfo1.getReleaseDate());
                        }
                        return 1;
                    }
                    if (expansionInfo2.getBlockName() == null) {
                        return -1;
                    }
                    // Block comparison
                    if (name1.endsWith("Block") && name2.endsWith("Block")) {
                        return expansionInfo2.getReleaseDate().compareTo(expansionInfo1.getReleaseDate());
                    }
                    if (name1.endsWith("Block")) {
                        if (expansionInfo1.getBlockName().equals(expansionInfo2.getBlockName())) {
                            return -1;
                        }
                    }
                    if (name2.endsWith("Block")) {
                        if (expansionInfo1.getBlockName().equals(expansionInfo2.getBlockName())) {
                            return 1;
                        }
                    }
                    return expansionInfo2.getReleaseDate().compareTo(expansionInfo1.getReleaseDate());
                case SUPPLEMENTAL:
                    if (expansionInfo1.getBlockName() == null) {
                        if (expansionInfo2.getBlockName() == null) {
                            return expansionInfo2.getReleaseDate().compareTo(expansionInfo1.getReleaseDate());
                        }
                        return -1;
                    }
                    if (expansionInfo2.getBlockName() == null) {
                        return 1;
                    }
                    if (expansionInfo1.getBlockName().equals(expansionInfo2.getBlockName())) {
                        // If release date is the same, sort alphabetically.
                        if (expansionInfo2.getReleaseDate().compareTo(expansionInfo1.getReleaseDate()) == 0) {
                            return name1.compareTo(name2);
                        }
                        return expansionInfo2.getReleaseDate().compareTo(expansionInfo1.getReleaseDate());
                    }
                    if (expansionInfo1.getBlockName().startsWith("Duel Decks")) {
                        if (expansionInfo1.getBlockName().startsWith("Duel Decks: Anthology")) {
                            return 1;
                        }
                        return 1;
                    }
                    if (expansionInfo2.getBlockName().startsWith("Duel Decks")) {
                        return -1;
                    }
                    ExpansionInfo blockInfo1 = expansionInfo.get(expansionInfo1.getBlockName());
                    ExpansionInfo blockInfo2 = expansionInfo.get(expansionInfo2.getBlockName());
                    return blockInfo2.getReleaseDate().compareTo(blockInfo1.getReleaseDate());
                default:
                    return expansionInfo2.getReleaseDate().compareTo(expansionInfo1.getReleaseDate());
            }
        }
        return expansionInfo1.getType().compareTo(expansionInfo2.getType());
    });
    if (!formats.isEmpty()) {
        formats.add(0, CUSTOM);
        formats.add(0, JOKE);
        formats.add(0, HISTORIC);
        formats.add(0, VINTAGE_LEGACY);
        formats.add(0, MODERN);
        formats.add(0, PIONEER);
        formats.add(0, FRONTIER);
        formats.add(0, EXTENDED);
        formats.add(0, STANDARD);
    }
    formats.add(0, ALL_SETS);
}
Also used : SetType(mage.constants.SetType) ExpansionInfo(mage.cards.repository.ExpansionInfo)

Aggregations

ExpansionInfo (mage.cards.repository.ExpansionInfo)1 SetType (mage.constants.SetType)1