use of org.spongepowered.common.advancement.criterion.ImplementationBackedCriterionProgress in project SpongeCommon by SpongePowered.
the class AdvancementProgressMixin method impl$processProgressMap.
private void impl$processProgressMap(AdvancementCriterion criterion, Map<String, ImplementationBackedCriterionProgress> progressMap) {
if (criterion instanceof OperatorCriterion) {
((OperatorCriterion) criterion).criteria().forEach(child -> this.impl$processProgressMap(child, progressMap));
if (criterion instanceof AndCriterion) {
progressMap.put(criterion.name(), new SpongeAndCriterionProgress((org.spongepowered.api.advancement.AdvancementProgress) this, (SpongeAndCriterion) criterion));
} else if (criterion instanceof OrCriterion) {
progressMap.put(criterion.name(), new SpongeOrCriterionProgress((org.spongepowered.api.advancement.AdvancementProgress) this, (SpongeOrCriterion) criterion));
}
} else if (criterion instanceof SpongeScoreCriterion) {
final SpongeScoreCriterion scoreCriterion = (SpongeScoreCriterion) criterion;
for (final AdvancementCriterion internalCriterion : scoreCriterion.internalCriteria) {
final CriterionProgressBridge progress = (CriterionProgressBridge) this.criteria.get(internalCriterion.name());
progress.bridge$setCriterion(internalCriterion);
progress.bridge$setAdvancementProgress((org.spongepowered.api.advancement.AdvancementProgress) this);
progressMap.put(internalCriterion.name(), (ImplementationBackedCriterionProgress) progress);
}
progressMap.put(scoreCriterion.name(), new SpongeScoreCriterionProgress((org.spongepowered.api.advancement.AdvancementProgress) this, scoreCriterion));
} else if (!(criterion instanceof SpongeEmptyCriterion)) {
final CriterionProgressBridge progress = (CriterionProgressBridge) this.criteria.get(criterion.name());
progress.bridge$setCriterion(criterion);
progress.bridge$setAdvancementProgress((org.spongepowered.api.advancement.AdvancementProgress) this);
progressMap.put(criterion.name(), (ImplementationBackedCriterionProgress) progress);
}
}
use of org.spongepowered.common.advancement.criterion.ImplementationBackedCriterionProgress in project SpongeCommon by SpongePowered.
the class AdvancementProgressMixin method impl$supportComplexCriteria.
/**
* @author Cybermaxke
* @reason Rewrite the method to add support for the complex advancement criteria, only triggered on the server.
*/
@Inject(method = "isDone", at = @At("HEAD"), cancellable = true)
private void impl$supportComplexCriteria(final CallbackInfoReturnable<Boolean> ci) {
if (this.impl$advancementKey == null || !PlatformHooks.INSTANCE.getGeneralHooks().onServerThread()) {
// Use vanilla behavior on the client
return;
}
final Advancement advancement = this.getOptionalAdvancement().orElse(null);
if (advancement != null) {
final ImplementationBackedCriterionProgress bridge = this.impl$progressMap.get(advancement.criterion().name());
ci.setReturnValue(bridge != null && ((CriterionProgress) bridge).achieved());
}
}
Aggregations