use of net.minecraft.advancement.Advancement in project SpeedRunIGT by RedLime.
the class ClientAdvancementManagerMixin method getCompleteAdvancementsCount.
private int getCompleteAdvancementsCount() {
int count = 0;
for (Advancement advancement : this.getManager().getAdvancements()) {
if (this.advancementProgresses.containsKey(advancement) && advancement.getDisplay() != null && !advancement.getId().getPath().startsWith("recipes")) {
AdvancementProgress advancementProgress = this.advancementProgresses.get(advancement);
advancementProgress.init(advancement.getCriteria(), advancement.getRequirements());
if (advancementProgress.isDone())
count++;
}
}
return count;
}
use of net.minecraft.advancement.Advancement in project frame-fabric by moddingplayground.
the class RecipeProvider method createFileMapAdvancements.
public Map<Identifier, JsonElement> createFileMapAdvancements() {
Map<Identifier, JsonElement> map = Maps.newHashMap();
for (Supplier<AbstractRecipeGenerator> generator : this.getGenerators()) {
AbstractRecipeGenerator gen = generator.get();
gen.accept((id, factory) -> factory.offerTo(provider -> {
JsonObject json = provider.toAdvancementJson();
if (json != null && map.put(id, json) != null)
throw new IllegalStateException("Duplicate recipe advancement " + id);
}, id));
Identifier rootId = gen.getId("root");
if (!map.containsKey(rootId)) {
map.put(rootId, Advancement.Builder.create().criterion("impossible", new ImpossibleCriterion.Conditions()).toJson());
}
}
return map;
}
use of net.minecraft.advancement.Advancement in project SpeedRunIGT by RedLime.
the class ClientAdvancementManagerMixin method advancement.
@Redirect(method = "onAdvancements", at = @At(value = "INVOKE", target = "Ljava/util/Map$Entry;getValue()Ljava/lang/Object;"))
public Object advancement(Map.Entry<Identifier, AdvancementProgress> entry) {
InGameTimer timer = InGameTimer.getInstance();
Advancement advancement = this.manager.get(entry.getKey());
AdvancementProgress advancementProgress = entry.getValue();
assert advancement != null;
advancementProgress.init(advancement.getCriteria(), advancement.getRequirements());
if (advancementProgress.isDone() && timer.getStatus() != TimerStatus.NONE) {
// For Timelines
if (timer.getCategory() == RunCategories.ANY) {
if (Objects.equals(advancement.getId().getPath(), "story/follow_ender_eye")) {
timer.tryInsertNewTimeline("enter_stronghold");
} else if (Objects.equals(advancement.getId().getPath(), "nether/find_bastion")) {
timer.tryInsertNewTimeline("enter_bastion");
} else if (Objects.equals(advancement.getId().getPath(), "nether/find_fortress")) {
timer.tryInsertNewTimeline("enter_fortress");
}
}
timer.tryInsertNewAdvancement(advancement.getId().toString(), null);
// How Did We Get Here
if (timer.getCategory() == RunCategories.HOW_DID_WE_GET_HERE && Objects.equals(advancement.getId().toString(), new Identifier("nether/all_effects").toString())) {
InGameTimer.complete();
}
// Hero of Village
if (timer.getCategory() == RunCategories.HERO_OF_VILLAGE && Objects.equals(advancement.getId().toString(), new Identifier("adventure/hero_of_the_village").toString())) {
InGameTimer.complete();
}
// Arbalistic
if (timer.getCategory() == RunCategories.ARBALISTIC && Objects.equals(advancement.getId().toString(), new Identifier("adventure/arbalistic").toString())) {
InGameTimer.complete();
}
}
return entry.getValue();
}
use of net.minecraft.advancement.Advancement in project SpeedRunIGT by RedLime.
the class PlayerAdvancementTrackerMixin method getCriteria.
@ModifyArgs(method = "endTrackingCompleted", at = @At(value = "INVOKE", target = "Lnet/minecraft/advancement/criterion/Criterion$ConditionsContainer;<init>(Lnet/minecraft/advancement/criterion/CriterionConditions;Lnet/minecraft/advancement/Advancement;Ljava/lang/String;)V"))
private void getCriteria(Args args) {
Advancement advancement = args.get(1);
String criteriaKey = args.get(2);
if (InGameTimer.getInstance().getStatus() != TimerStatus.NONE) {
InGameTimer.getInstance().tryInsertNewAdvancement(advancement.getId().toString(), criteriaKey);
}
}
Aggregations