CollectionPredicate.java

net.minecraft.advancements.criterion.CollectionPredicate

信息

  • 全限定名:net.minecraft.advancements.criterion.CollectionPredicate
  • 类型:public record
  • 包:net.minecraft.advancements.criterion
  • 源码路径:src/main/java/net/minecraft/advancements/criterion/CollectionPredicate.java
  • 起始行号:L9
  • 实现:Predicate<Iterable<?extends T>>
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

构造器

方法

下面的方法块按源码顺序生成。

public static <T,P extends Predicate<T>> Codec<CollectionPredicate<T,P>> codec(Codec<P> elementCodec) @ L12

  • 方法名:codec
  • 源码定位:L12
  • 返回类型:<T,P extends Predicate> Codec<CollectionPredicate<T,P>>
  • 修饰符:public static

参数:

  • elementCodec: Codec

说明:

TODO

public boolean test(Iterable<?extends T> value) @ L23

  • 方法名:test
  • 源码定位:L23
  • 返回类型:boolean
  • 修饰符:public

参数:

  • value: Iterable<?extends T>

说明:

TODO

代码

public record CollectionPredicate<T, P extends Predicate<T>>(
    Optional<CollectionContentsPredicate<T, P>> contains, Optional<CollectionCountsPredicate<T, P>> counts, Optional<MinMaxBounds.Ints> size
) implements Predicate<Iterable<? extends T>> {
    public static <T, P extends Predicate<T>> Codec<CollectionPredicate<T, P>> codec(Codec<P> elementCodec) {
        return RecordCodecBuilder.create(
            i -> i.group(
                    CollectionContentsPredicate.<T, P>codec(elementCodec).optionalFieldOf("contains").forGetter(CollectionPredicate::contains),
                    CollectionCountsPredicate.<T, P>codec(elementCodec).optionalFieldOf("count").forGetter(CollectionPredicate::counts),
                    MinMaxBounds.Ints.CODEC.optionalFieldOf("size").forGetter(CollectionPredicate::size)
                )
                .apply(i, CollectionPredicate::new)
        );
    }
 
    public boolean test(Iterable<? extends T> value) {
        if (this.contains.isPresent() && !this.contains.get().test(value)) {
            return false;
        } else {
            return this.counts.isPresent() && !this.counts.get().test(value) ? false : !this.size.isPresent() || this.size.get().matches(Iterables.size(value));
        }
    }
}

引用的其他类