package net.minecraft.advancements.critereon; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.advancements.critereon.MinMaxBounds.Ints; import net.minecraft.core.component.DataComponentType; import net.minecraft.core.component.DataComponents; import net.minecraft.world.item.ItemStack; public record ItemDamagePredicate(Ints durability, Ints damage) implements SingleComponentItemPredicate { public static final Codec CODEC = RecordCodecBuilder.create( instance -> instance.group( Ints.CODEC.optionalFieldOf("durability", Ints.ANY).forGetter(ItemDamagePredicate::durability), Ints.CODEC.optionalFieldOf("damage", Ints.ANY).forGetter(ItemDamagePredicate::damage) ) .apply(instance, ItemDamagePredicate::new) ); @Override public DataComponentType componentType() { return DataComponents.DAMAGE; } public boolean matches(ItemStack itemStack, Integer integer) { return !this.durability.matches(itemStack.getMaxDamage() - integer) ? false : this.damage.matches(integer); } public static ItemDamagePredicate durability(Ints damage) { return new ItemDamagePredicate(damage, Ints.ANY); } }