package net.minecraft.advancements; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; import net.minecraft.util.ResourceLocation; public interface ICriterionTrigger { ResourceLocation getId(); void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener); void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener); void removeAllListeners(PlayerAdvancements playerAdvancementsIn); /** * Deserialize a ICriterionInstance of this trigger from the data in the JSON. */ T deserializeInstance(JsonObject json, JsonDeserializationContext context); public static class Listener { private final T criterionInstance; private final Advancement advancement; private final String criterionName; public Listener(T criterionInstanceIn, Advancement advancementIn, String criterionNameIn) { this.criterionInstance = criterionInstanceIn; this.advancement = advancementIn; this.criterionName = criterionNameIn; } public T getCriterionInstance() { return this.criterionInstance; } public void grantCriterion(PlayerAdvancements playerAdvancementsIn) { playerAdvancementsIn.grantCriterion(this.advancement, this.criterionName); } public boolean equals(Object p_equals_1_) { if (this == p_equals_1_) { return true; } else if (p_equals_1_ != null && this.getClass() == p_equals_1_.getClass()) { ICriterionTrigger.Listener listener = (ICriterionTrigger.Listener)p_equals_1_; if (!this.criterionInstance.equals(listener.criterionInstance)) { return false; } else { return !this.advancement.equals(listener.advancement) ? false : this.criterionName.equals(listener.criterionName); } } else { return false; } } public int hashCode() { int i = this.criterionInstance.hashCode(); i = 31 * i + this.advancement.hashCode(); i = 31 * i + this.criterionName.hashCode(); return i; } } }