31 lines
1.2 KiB
Java
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);
|
|
}
|
|
}
|