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 java.util.Optional; import net.minecraft.advancements.critereon.SingleComponentItemPredicate; import net.minecraft.core.HolderSet; import net.minecraft.core.RegistryCodecs; import net.minecraft.core.component.DataComponentType; import net.minecraft.core.component.DataComponents; import net.minecraft.core.registries.Registries; import net.minecraft.world.item.equipment.trim.ArmorTrim; import net.minecraft.world.item.equipment.trim.TrimMaterial; import net.minecraft.world.item.equipment.trim.TrimPattern; public record TrimPredicate(Optional> material, Optional> pattern) implements SingleComponentItemPredicate { public static final Codec CODEC = RecordCodecBuilder.create( p_396603_ -> p_396603_.group( RegistryCodecs.homogeneousList(Registries.TRIM_MATERIAL).optionalFieldOf("material").forGetter(TrimPredicate::material), RegistryCodecs.homogeneousList(Registries.TRIM_PATTERN).optionalFieldOf("pattern").forGetter(TrimPredicate::pattern) ) .apply(p_396603_, TrimPredicate::new) ); @Override public DataComponentType componentType() { return DataComponents.TRIM; } public boolean matches(ArmorTrim p_397685_) { return this.material.isPresent() && !this.material.get().contains(p_397685_.material()) ? false : !this.pattern.isPresent() || this.pattern.get().contains(p_397685_.pattern()); } }