package net.minecraft.advancements.critereon; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder.Instance; import java.util.Optional; import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.advancements.Criterion; import net.minecraft.core.HolderGetter; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; public class PlayerTrigger extends SimpleCriterionTrigger { @Override public Codec codec() { return PlayerTrigger.TriggerInstance.CODEC; } public void trigger(ServerPlayer p_222619_) { this.trigger(p_222619_, p_222625_ -> true); } public record TriggerInstance(Optional player) implements SimpleCriterionTrigger.SimpleInstance { public static final Codec CODEC = RecordCodecBuilder.create( p_325242_ -> p_325242_.group(EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(PlayerTrigger.TriggerInstance::player)) .apply(p_325242_, PlayerTrigger.TriggerInstance::new) ); public static Criterion located(LocationPredicate.Builder p_297421_) { return CriteriaTriggers.LOCATION .createCriterion(new PlayerTrigger.TriggerInstance(Optional.of(EntityPredicate.wrap(EntityPredicate.Builder.entity().located(p_297421_))))); } public static Criterion located(EntityPredicate.Builder p_299982_) { return CriteriaTriggers.LOCATION.createCriterion(new PlayerTrigger.TriggerInstance(Optional.of(EntityPredicate.wrap(p_299982_.build())))); } public static Criterion located(Optional p_301210_) { return CriteriaTriggers.LOCATION.createCriterion(new PlayerTrigger.TriggerInstance(EntityPredicate.wrap(p_301210_))); } public static Criterion sleptInBed() { return CriteriaTriggers.SLEPT_IN_BED.createCriterion(new PlayerTrigger.TriggerInstance(Optional.empty())); } public static Criterion raidWon() { return CriteriaTriggers.RAID_WIN.createCriterion(new PlayerTrigger.TriggerInstance(Optional.empty())); } public static Criterion avoidVibration() { return CriteriaTriggers.AVOID_VIBRATION.createCriterion(new PlayerTrigger.TriggerInstance(Optional.empty())); } public static Criterion tick() { return CriteriaTriggers.TICK.createCriterion(new PlayerTrigger.TriggerInstance(Optional.empty())); } public static Criterion walkOnBlockWithEquipment( HolderGetter p_365157_, HolderGetter p_363794_, Block p_222638_, Item p_222639_ ) { return located( EntityPredicate.Builder.entity() .equipment(EntityEquipmentPredicate.Builder.equipment().feet(ItemPredicate.Builder.item().of(p_363794_, p_222639_))) .steppingOn(LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(p_365157_, p_222638_))) ); } @Override public Optional player() { return this.player; } } }