Code/net/minecraft/core/component/predicates/DamagePredicate.java

33 lines
1.5 KiB
Java

package net.minecraft.core.component.predicates;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.mojang.serialization.codecs.RecordCodecBuilder.Instance;
import net.minecraft.advancements.critereon.MinMaxBounds;
import net.minecraft.core.component.DataComponentGetter;
import net.minecraft.core.component.DataComponents;
public record DamagePredicate(MinMaxBounds.Ints durability, MinMaxBounds.Ints damage) implements DataComponentPredicate {
public static final Codec<DamagePredicate> CODEC = RecordCodecBuilder.create(
p_397826_ -> p_397826_.group(
MinMaxBounds.Ints.CODEC.optionalFieldOf("durability", MinMaxBounds.Ints.ANY).forGetter(DamagePredicate::durability),
MinMaxBounds.Ints.CODEC.optionalFieldOf("damage", MinMaxBounds.Ints.ANY).forGetter(DamagePredicate::damage)
)
.apply(p_397826_, DamagePredicate::new)
);
@Override
public boolean matches(DataComponentGetter p_391581_) {
Integer integer = p_391581_.get(DataComponents.DAMAGE);
if (integer == null) {
return false;
} else {
int i = p_391581_.getOrDefault(DataComponents.MAX_DAMAGE, 0);
return !this.durability.matches(i - integer) ? false : this.damage.matches(integer);
}
}
public static DamagePredicate durability(MinMaxBounds.Ints p_392932_) {
return new DamagePredicate(p_392932_, MinMaxBounds.Ints.ANY);
}
}