Search in sources :

Example 1 with AndCriterion

use of org.spongepowered.api.advancement.criteria.AndCriterion in project SpongeCommon by SpongePowered.

the class MixinAdvancementProgress method processProgressMap.

private void processProgressMap(AdvancementCriterion criterion, Map<AdvancementCriterion, ICriterionProgress> progressMap) {
    if (criterion instanceof OperatorCriterion) {
        ((OperatorCriterion) criterion).getCriteria().forEach(child -> processProgressMap(child, progressMap));
        if (criterion instanceof AndCriterion) {
            progressMap.put(criterion, new SpongeAndCriterionProgress(this, (SpongeAndCriterion) criterion));
        } else if (criterion instanceof OrCriterion) {
            progressMap.put(criterion, new SpongeOrCriterionProgress(this, (SpongeOrCriterion) criterion));
        }
    } else if (criterion instanceof SpongeScoreCriterion) {
        final SpongeScoreCriterion scoreCriterion = (SpongeScoreCriterion) criterion;
        for (AdvancementCriterion internalCriterion : scoreCriterion.internalCriteria) {
            final IMixinCriterionProgress progress = (IMixinCriterionProgress) this.criteria.get(internalCriterion.getName());
            progress.setCriterion(internalCriterion);
            progressMap.put(internalCriterion, (ICriterionProgress) progress);
        }
        progressMap.put(scoreCriterion, new SpongeScoreCriterionProgress(this, scoreCriterion));
    } else if (criterion != SpongeEmptyCriterion.INSTANCE) {
        final IMixinCriterionProgress progress = (IMixinCriterionProgress) this.criteria.get(criterion.getName());
        progress.setCriterion(criterion);
        progressMap.put(criterion, (ICriterionProgress) progress);
    }
}
Also used : SpongeAndCriterion(org.spongepowered.common.advancement.SpongeAndCriterion) OrCriterion(org.spongepowered.api.advancement.criteria.OrCriterion) SpongeOrCriterion(org.spongepowered.common.advancement.SpongeOrCriterion) SpongeAndCriterionProgress(org.spongepowered.common.advancement.SpongeAndCriterionProgress) ScoreAdvancementCriterion(org.spongepowered.api.advancement.criteria.ScoreAdvancementCriterion) AdvancementCriterion(org.spongepowered.api.advancement.criteria.AdvancementCriterion) OperatorCriterion(org.spongepowered.api.advancement.criteria.OperatorCriterion) SpongeScoreCriterion(org.spongepowered.common.advancement.SpongeScoreCriterion) SpongeAndCriterion(org.spongepowered.common.advancement.SpongeAndCriterion) AndCriterion(org.spongepowered.api.advancement.criteria.AndCriterion) SpongeOrCriterionProgress(org.spongepowered.common.advancement.SpongeOrCriterionProgress) SpongeScoreCriterionProgress(org.spongepowered.common.advancement.SpongeScoreCriterionProgress) IMixinCriterionProgress(org.spongepowered.common.interfaces.advancement.IMixinCriterionProgress) ICriterionProgress(org.spongepowered.common.advancement.ICriterionProgress)

Example 2 with AndCriterion

use of org.spongepowered.api.advancement.criteria.AndCriterion in project LanternServer by LanternPowered.

the class LanternPlayerAdvancements method createCriteria.

static Tuple<List<AdvancementCriterion>, String[][]> createCriteria(AdvancementCriterion criterion) {
    final List<AdvancementCriterion> criteria = new ArrayList<>();
    final List<String[]> names = new ArrayList<>();
    if (criterion instanceof AndCriterion) {
        for (AdvancementCriterion child : ((AndCriterion) criterion).getCriteria()) {
            if (child instanceof LanternScoreCriterion) {
                for (String id : ((LanternScoreCriterion) child).getIds()) {
                    names.add(new String[] { id });
                }
            } else {
                names.add(new String[] { child.getName() });
            }
            criteria.add(child);
        }
    } else {
        if (criterion instanceof LanternScoreCriterion) {
            for (String id : ((LanternScoreCriterion) criterion).getIds()) {
                names.add(new String[] { id });
            }
        } else {
            names.add(new String[] { criterion.getName() });
        }
        criteria.add(criterion);
    }
    return new Tuple<>(criteria, names.toArray(new String[names.size()][]));
}
Also used : AdvancementCriterion(org.spongepowered.api.advancement.criteria.AdvancementCriterion) ArrayList(java.util.ArrayList) LanternScoreCriterion(org.lanternpowered.server.advancement.criteria.LanternScoreCriterion) AndCriterion(org.spongepowered.api.advancement.criteria.AndCriterion) Tuple(org.spongepowered.api.util.Tuple)

Aggregations

AdvancementCriterion (org.spongepowered.api.advancement.criteria.AdvancementCriterion)2 AndCriterion (org.spongepowered.api.advancement.criteria.AndCriterion)2 ArrayList (java.util.ArrayList)1 LanternScoreCriterion (org.lanternpowered.server.advancement.criteria.LanternScoreCriterion)1 OperatorCriterion (org.spongepowered.api.advancement.criteria.OperatorCriterion)1 OrCriterion (org.spongepowered.api.advancement.criteria.OrCriterion)1 ScoreAdvancementCriterion (org.spongepowered.api.advancement.criteria.ScoreAdvancementCriterion)1 Tuple (org.spongepowered.api.util.Tuple)1 ICriterionProgress (org.spongepowered.common.advancement.ICriterionProgress)1 SpongeAndCriterion (org.spongepowered.common.advancement.SpongeAndCriterion)1 SpongeAndCriterionProgress (org.spongepowered.common.advancement.SpongeAndCriterionProgress)1 SpongeOrCriterion (org.spongepowered.common.advancement.SpongeOrCriterion)1 SpongeOrCriterionProgress (org.spongepowered.common.advancement.SpongeOrCriterionProgress)1 SpongeScoreCriterion (org.spongepowered.common.advancement.SpongeScoreCriterion)1 SpongeScoreCriterionProgress (org.spongepowered.common.advancement.SpongeScoreCriterionProgress)1 IMixinCriterionProgress (org.spongepowered.common.interfaces.advancement.IMixinCriterionProgress)1