[Feature] More Advancements

This commit is contained in:
Frank 2022-08-01 00:14:44 +02:00
parent 74faf97a93
commit 579f2a80ca
5 changed files with 63 additions and 6 deletions

View file

@ -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
);
}
}

View file

@ -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();
}
}

View file

@ -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;