diff --git a/src/main/java/org/betterx/betterend/advancements/BECriteria.java b/src/main/java/org/betterx/betterend/advancements/BECriteria.java index 1bb5ee0e..7213271a 100644 --- a/src/main/java/org/betterx/betterend/advancements/BECriteria.java +++ b/src/main/java/org/betterx/betterend/advancements/BECriteria.java @@ -2,22 +2,24 @@ package org.betterx.betterend.advancements; import org.betterx.betterend.BetterEnd; +import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.advancements.critereon.EntityPredicate; import net.minecraft.advancements.critereon.PlayerTrigger; -import net.fabricmc.fabric.api.object.builder.v1.advancement.CriterionRegistry; - public class BECriteria { public static PlayerTrigger PORTAL_ON; public static PlayerTrigger PORTAL_TRAVEL; + public static PlayerTrigger INFUSION_FINISHED; public static PlayerTrigger.TriggerInstance PORTAL_ON_TRIGGER; public static PlayerTrigger.TriggerInstance PORTAL_TRAVEL_TRIGGER; + public static PlayerTrigger.TriggerInstance INFUSION_FINISHED_TRIGGER; public static void register() { - PORTAL_ON = CriterionRegistry.register(new PlayerTrigger(BetterEnd.makeID("portal_on"))); - PORTAL_TRAVEL = CriterionRegistry.register(new PlayerTrigger(BetterEnd.makeID("portal_travel"))); + PORTAL_ON = CriteriaTriggers.register(new PlayerTrigger(BetterEnd.makeID("portal_on"))); + PORTAL_TRAVEL = CriteriaTriggers.register(new PlayerTrigger(BetterEnd.makeID("portal_travel"))); + INFUSION_FINISHED = CriteriaTriggers.register(new PlayerTrigger(BetterEnd.makeID("infusion_finished"))); PORTAL_ON_TRIGGER = new PlayerTrigger.TriggerInstance( PORTAL_ON.getId(), @@ -27,5 +29,9 @@ public class BECriteria { PORTAL_TRAVEL.getId(), EntityPredicate.Composite.ANY ); + INFUSION_FINISHED_TRIGGER = new PlayerTrigger.TriggerInstance( + INFUSION_FINISHED.getId(), + EntityPredicate.Composite.ANY + ); } } diff --git a/src/main/java/org/betterx/betterend/registry/EndAdvancements.java b/src/main/java/org/betterx/betterend/registry/EndAdvancements.java index b433d1bf..d0497568 100644 --- a/src/main/java/org/betterx/betterend/registry/EndAdvancements.java +++ b/src/main/java/org/betterx/betterend/registry/EndAdvancements.java @@ -69,5 +69,36 @@ public class EndAdvancements { .requirements(RequirementsStrategy.AND) .rewardXP(1500) .buildAndRegister(); + + ResourceLocation allElytras = AdvancementManager.Builder + .create(BetterEnd.makeID("all_elytras")) + .parent(root) + .startDisplay(EndItems.CRYSTALITE_ELYTRA) + .frame(FrameType.GOAL) + .endDisplay() + .addInventoryChangedCriterion("vanilla", Items.ELYTRA) + .addInventoryChangedCriterion("crystalite", EndItems.CRYSTALITE_ELYTRA) + .addInventoryChangedCriterion("armored", EndItems.ARMORED_ELYTRA) + .requirements(RequirementsStrategy.AND) + .buildAndRegister(); + + ResourceLocation infusion = AdvancementManager.Builder + .create(BetterEnd.makeID("infusion")) + .parent(root) + .startDisplay(EndBlocks.INFUSION_PEDESTAL) + .endDisplay() + .addInventoryChangedCriterion("infusion_pedestal", EndBlocks.INFUSION_PEDESTAL) + .requirements(RequirementsStrategy.OR) + .buildAndRegister(); + + ResourceLocation infusionFinished = AdvancementManager.Builder + .create(BetterEnd.makeID("infusion_finished")) + .parent(infusion) + .startDisplay(Items.ENDER_EYE) + .frame(FrameType.GOAL) + .endDisplay() + .addCriterion("finished", BECriteria.INFUSION_FINISHED_TRIGGER) + .requirements(RequirementsStrategy.OR) + .buildAndRegister(); } } diff --git a/src/main/java/org/betterx/betterend/rituals/InfusionRitual.java b/src/main/java/org/betterx/betterend/rituals/InfusionRitual.java index 55a1d6bb..353de131 100644 --- a/src/main/java/org/betterx/betterend/rituals/InfusionRitual.java +++ b/src/main/java/org/betterx/betterend/rituals/InfusionRitual.java @@ -1,5 +1,6 @@ package org.betterx.betterend.rituals; +import org.betterx.betterend.advancements.BECriteria; import org.betterx.betterend.blocks.entities.InfusionPedestalEntity; import org.betterx.betterend.blocks.entities.PedestalBlockEntity; import org.betterx.betterend.particle.InfusionParticleType; @@ -15,6 +16,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.phys.Vec3; import java.awt.*; import java.util.Arrays; @@ -111,6 +113,12 @@ public class InfusionRitual implements Container { if (progress == time) { clearContent(); input.setItem(0, activeRecipe.assemble(this)); + if (world instanceof ServerLevel sl) { + sl.getPlayers(p -> p.position() + .subtract(new Vec3(worldPos.getX(), worldPos.getY(), worldPos.getZ())) + .length() < 16) + .forEach(p -> BECriteria.INFUSION_FINISHED.trigger(p)); + } reset(); } else if (world instanceof ServerLevel) { ServerLevel serverLevel = (ServerLevel) world; diff --git a/src/main/resources/assets/betterend/lang/de_de.json b/src/main/resources/assets/betterend/lang/de_de.json index 0ace9239..237da7d9 100644 --- a/src/main/resources/assets/betterend/lang/de_de.json +++ b/src/main/resources/assets/betterend/lang/de_de.json @@ -650,5 +650,11 @@ "advancements.betterend.portal_on.title": "Wege der Ewigkeit", "advancements.betterend.portal_on.description": "Entfache ein ewiges Portal", "advancements.betterend.all_the_biomes.title": "Ein Neues Ende", - "advancements.betterend.all_the_biomes.description": "Besuche alle BetterEnd Biome" + "advancements.betterend.all_the_biomes.description": "Besuche alle BetterEnd Biome", + "advancements.betterend.all_elytras.title": "Flugshow", + "advancements.betterend.all_elytras.description": "Besitze alle Elytra Varianten", + "advancements.betterend.infusion.title": "Elementarmagie", + "advancements.betterend.infusion.description": "Erhalte eine Elementarsockel", + "advancements.betterend.infusion_finished.title": "Unendliche Möglichkeiten", + "advancements.betterend.infusion_finished.description": "Sei dabei wenn ein Elementarritual abgeschlossen wird." } diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index 13d24f12..44f31405 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -850,5 +850,11 @@ "advancements.betterend.portal_travel.title": "Eternal Ways", "advancements.betterend.portal_travel.description": "Reise auf uralten Pfaden und benutze ein ewiges Portal", "advancements.betterend.all_the_biomes.title": "A New Ending", - "advancements.betterend.all_the_biomes.description": "Visit all BetterEnd Biomes" + "advancements.betterend.all_the_biomes.description": "Visit all BetterEnd Biomes", + "advancements.betterend.all_elytras.title": "Airshow", + "advancements.betterend.all_elytras.description": "Own all Elytra variants", + "advancements.betterend.infusion.title": "Old Rituals", + "advancements.betterend.infusion.description": "Obtain an Infusion Pedestal", + "advancements.betterend.infusion_finished.title": "Neverending Magic", + "advancements.betterend.infusion_finished.description": "Be close to an Infusion Ritual when it is finished" }