package net.minecraft.advancements; import com.mojang.serialization.Codec; import net.minecraft.server.PlayerAdvancements; public interface CriterionTrigger { void addPlayerListener(PlayerAdvancements playerAdvancements, CriterionTrigger.Listener listener); void removePlayerListener(PlayerAdvancements playerAdvancements, CriterionTrigger.Listener listener); void removePlayerListeners(PlayerAdvancements playerAdvancements); Codec codec(); default Criterion createCriterion(T triggerInstance) { return new Criterion<>(this, triggerInstance); } public record Listener(T trigger, AdvancementHolder advancement, String criterion) { public void run(PlayerAdvancements playerAdvancements) { playerAdvancements.award(this.advancement, this.criterion); } } }