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 java.util.function.Predicate; import net.minecraft.advancements.critereon.CollectionPredicate; import net.minecraft.advancements.critereon.SingleComponentItemPredicate; import net.minecraft.core.component.DataComponentType; import net.minecraft.core.component.DataComponents; import net.minecraft.server.network.Filterable; import net.minecraft.world.item.component.WritableBookContent; public record WritableBookPredicate(Optional, WritableBookPredicate.PagePredicate>> pages) implements SingleComponentItemPredicate { public static final Codec CODEC = RecordCodecBuilder.create( p_392086_ -> p_392086_.group( CollectionPredicate., WritableBookPredicate.PagePredicate>codec(WritableBookPredicate.PagePredicate.CODEC) .optionalFieldOf("pages") .forGetter(WritableBookPredicate::pages) ) .apply(p_392086_, WritableBookPredicate::new) ); @Override public DataComponentType componentType() { return DataComponents.WRITABLE_BOOK_CONTENT; } public boolean matches(WritableBookContent p_396091_) { return !this.pages.isPresent() || this.pages.get().test(p_396091_.pages()); } public record PagePredicate(String contents) implements Predicate> { public static final Codec CODEC = Codec.STRING .xmap(WritableBookPredicate.PagePredicate::new, WritableBookPredicate.PagePredicate::contents); public boolean test(Filterable p_394701_) { return p_394701_.raw().equals(this.contents); } } }