minecraft-src/net/minecraft/advancements/critereon/ItemDamagePredicate.java
2025-07-04 03:15:13 +03:00

31 lines
1.2 KiB
Java

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<Integer> {
public static final Codec<ItemDamagePredicate> 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<Integer> 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);
}
}