83 lines
3.7 KiB
Java
83 lines
3.7 KiB
Java
/*
|
|
* Decompiled with CFR 0.152.
|
|
*
|
|
* Could not load the following classes:
|
|
* com.google.common.collect.ImmutableMap
|
|
* com.google.common.collect.ImmutableMap$Builder
|
|
* com.mojang.datafixers.kinds.App
|
|
* com.mojang.datafixers.kinds.Applicative
|
|
* com.mojang.serialization.MapCodec
|
|
* com.mojang.serialization.codecs.RecordCodecBuilder
|
|
*/
|
|
package net.minecraft.advancements.criterion;
|
|
|
|
import com.google.common.collect.ImmutableMap;
|
|
import com.mojang.datafixers.kinds.App;
|
|
import com.mojang.datafixers.kinds.Applicative;
|
|
import com.mojang.serialization.MapCodec;
|
|
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
|
import java.util.Map;
|
|
import java.util.function.Predicate;
|
|
import net.minecraft.core.component.DataComponentExactPredicate;
|
|
import net.minecraft.core.component.DataComponentGetter;
|
|
import net.minecraft.core.component.DataComponentType;
|
|
import net.minecraft.core.component.predicates.DataComponentPredicate;
|
|
import net.minecraft.network.RegistryFriendlyByteBuf;
|
|
import net.minecraft.network.codec.StreamCodec;
|
|
|
|
public record DataComponentMatchers(DataComponentExactPredicate exact, Map<DataComponentPredicate.Type<?>, DataComponentPredicate> partial) implements Predicate<DataComponentGetter>
|
|
{
|
|
public static final DataComponentMatchers ANY = new DataComponentMatchers(DataComponentExactPredicate.EMPTY, Map.of());
|
|
public static final MapCodec<DataComponentMatchers> CODEC = RecordCodecBuilder.mapCodec(i -> i.group((App)DataComponentExactPredicate.CODEC.optionalFieldOf("components", (Object)DataComponentExactPredicate.EMPTY).forGetter(DataComponentMatchers::exact), (App)DataComponentPredicate.CODEC.optionalFieldOf("predicates", Map.of()).forGetter(DataComponentMatchers::partial)).apply((Applicative)i, DataComponentMatchers::new));
|
|
public static final StreamCodec<RegistryFriendlyByteBuf, DataComponentMatchers> STREAM_CODEC = StreamCodec.composite(DataComponentExactPredicate.STREAM_CODEC, DataComponentMatchers::exact, DataComponentPredicate.STREAM_CODEC, DataComponentMatchers::partial, DataComponentMatchers::new);
|
|
|
|
@Override
|
|
public boolean test(DataComponentGetter values) {
|
|
if (!this.exact.test(values)) {
|
|
return false;
|
|
}
|
|
for (DataComponentPredicate predicate : this.partial.values()) {
|
|
if (predicate.matches(values)) continue;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public boolean isEmpty() {
|
|
return this.exact.isEmpty() && this.partial.isEmpty();
|
|
}
|
|
|
|
public static class Builder {
|
|
private DataComponentExactPredicate exact = DataComponentExactPredicate.EMPTY;
|
|
private final ImmutableMap.Builder<DataComponentPredicate.Type<?>, DataComponentPredicate> partial = ImmutableMap.builder();
|
|
|
|
private Builder() {
|
|
}
|
|
|
|
public static Builder components() {
|
|
return new Builder();
|
|
}
|
|
|
|
public <T extends DataComponentType<?>> Builder any(DataComponentType<?> type) {
|
|
DataComponentPredicate.AnyValueType predicateType = DataComponentPredicate.AnyValueType.create(type);
|
|
this.partial.put((Object)predicateType, (Object)predicateType.predicate());
|
|
return this;
|
|
}
|
|
|
|
public <T extends DataComponentPredicate> Builder partial(DataComponentPredicate.Type<T> type, T predicate) {
|
|
this.partial.put(type, predicate);
|
|
return this;
|
|
}
|
|
|
|
public Builder exact(DataComponentExactPredicate exact) {
|
|
this.exact = exact;
|
|
return this;
|
|
}
|
|
|
|
public DataComponentMatchers build() {
|
|
return new DataComponentMatchers(this.exact, (Map<DataComponentPredicate.Type<?>, DataComponentPredicate>)this.partial.buildOrThrow());
|
|
}
|
|
}
|
|
}
|
|
|