Spaces:
Build error
Build error
File size: 3,602 Bytes
d46f4a3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
package net.minecraft.advancements.critereon;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.mojang.serialization.codecs.RecordCodecBuilder.Instance;
import java.util.List;
import java.util.function.Predicate;
public interface CollectionCountsPredicate<T, P extends Predicate<T>> extends Predicate<Iterable<T>> {
List<CollectionCountsPredicate.Entry<T, P>> unpack();
static <T, P extends Predicate<T>> Codec<CollectionCountsPredicate<T, P>> codec(Codec<P> p_335836_) {
return CollectionCountsPredicate.Entry.<T, P>codec(p_335836_)
.listOf()
.xmap(CollectionCountsPredicate::of, CollectionCountsPredicate::unpack);
}
@SafeVarargs
static <T, P extends Predicate<T>> CollectionCountsPredicate<T, P> of(CollectionCountsPredicate.Entry<T, P>... p_332496_) {
return of(List.of(p_332496_));
}
static <T, P extends Predicate<T>> CollectionCountsPredicate<T, P> of(List<CollectionCountsPredicate.Entry<T, P>> p_334665_) {
return (CollectionCountsPredicate<T, P>)(switch (p_334665_.size()) {
case 0 -> new CollectionCountsPredicate.Zero();
case 1 -> new CollectionCountsPredicate.Single(p_334665_.getFirst());
default -> new CollectionCountsPredicate.Multiple(p_334665_);
});
}
public static record Entry<T, P extends Predicate<T>>(P test, MinMaxBounds.Ints count) {
public static <T, P extends Predicate<T>> Codec<CollectionCountsPredicate.Entry<T, P>> codec(Codec<P> p_334145_) {
return RecordCodecBuilder.create(
p_334567_ -> p_334567_.group(
p_334145_.fieldOf("test").forGetter(CollectionCountsPredicate.Entry::test),
MinMaxBounds.Ints.CODEC.fieldOf("count").forGetter(CollectionCountsPredicate.Entry::count)
)
.apply(p_334567_, CollectionCountsPredicate.Entry::new)
);
}
public boolean test(Iterable<T> p_329726_) {
int i = 0;
for (T t : p_329726_) {
if (this.test.test(t)) {
i++;
}
}
return this.count.matches(i);
}
}
public static record Multiple<T, P extends Predicate<T>>(List<CollectionCountsPredicate.Entry<T, P>> entries) implements CollectionCountsPredicate<T, P> {
public boolean test(Iterable<T> p_329412_) {
for (CollectionCountsPredicate.Entry<T, P> entry : this.entries) {
if (!entry.test(p_329412_)) {
return false;
}
}
return true;
}
@Override
public List<CollectionCountsPredicate.Entry<T, P>> unpack() {
return this.entries;
}
}
public static record Single<T, P extends Predicate<T>>(CollectionCountsPredicate.Entry<T, P> entry) implements CollectionCountsPredicate<T, P> {
public boolean test(Iterable<T> p_333879_) {
return this.entry.test(p_333879_);
}
@Override
public List<CollectionCountsPredicate.Entry<T, P>> unpack() {
return List.of(this.entry);
}
}
public static class Zero<T, P extends Predicate<T>> implements CollectionCountsPredicate<T, P> {
public boolean test(Iterable<T> p_329157_) {
return true;
}
@Override
public List<CollectionCountsPredicate.Entry<T, P>> unpack() {
return List.of();
}
}
} |