use of org.spongepowered.common.bridge.advancements.CriterionProgressBridge in project SpongeCommon by SpongePowered.
the class CriterionProgressMixin_API method grant.
@Override
public Instant grant() {
if (this.obtained != null) {
return this.obtained.toInstant();
}
final AdvancementProgress advancementProgress = ((CriterionProgressBridge) this).bridge$getAdvancementProgress();
final org.spongepowered.api.advancement.Advancement advancement = advancementProgress.advancement();
((AdvancementProgressBridge) advancementProgress).bridge$getPlayerAdvancements().award((Advancement) advancement, this.criterion().name());
return this.obtained.toInstant();
}
use of org.spongepowered.common.bridge.advancements.CriterionProgressBridge in project SpongeCommon by SpongePowered.
the class CriterionProgressMixin_API method revoke.
@Override
public Optional<Instant> revoke() {
if (this.obtained == null) {
return Optional.empty();
}
final Instant instant = this.obtained.toInstant();
final AdvancementProgress advancementProgress = ((CriterionProgressBridge) this).bridge$getAdvancementProgress();
final org.spongepowered.api.advancement.Advancement advancement = advancementProgress.advancement();
((AdvancementProgressBridge) advancementProgress).bridge$getPlayerAdvancements().revoke((Advancement) advancement, this.criterion().name());
return Optional.of(instant);
}
use of org.spongepowered.common.bridge.advancements.CriterionProgressBridge in project SpongeCommon by SpongePowered.
the class PlayerAdvancementsMixin method impl$onUnregisterListenersGetProgress.
@Redirect(method = "registerListeners(Lnet/minecraft/advancements/Advancement;)V", at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/advancements/CriterionProgress;isDone()Z"))
private boolean impl$onUnregisterListenersGetProgress(final CriterionProgress progress) {
final CriterionProgressBridge mixinCriterionProgress = (CriterionProgressBridge) progress;
if (((PlatformEntityBridge) this.player).bridge$isFakePlayer() || !mixinCriterionProgress.bridge$isCriterionAvailable()) {
return progress.isDone();
}
final AdvancementCriterion criterion = ((org.spongepowered.api.advancement.criteria.CriterionProgress) progress).criterion();
final CriterionBridge mixinCriterion = (CriterionBridge) criterion;
// Only remove the trigger once the goal is reached
if (mixinCriterion.bridge$getScoreCriterion() != null) {
return ((CriterionProgressBridge) progress).bridge$getAdvancementProgress().get(mixinCriterion.bridge$getScoreCriterion()).get().achieved();
}
return progress.isDone();
}
use of org.spongepowered.common.bridge.advancements.CriterionProgressBridge 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);
}
}
Aggregations