Code/net/minecraft/client/renderer/block/model/multipart/CombinedCondition.java

50 lines
1.7 KiB
Java

package net.minecraft.client.renderer.block.model.multipart;
import com.google.common.collect.Lists;
import com.mojang.serialization.Codec;
import java.util.List;
import java.util.function.Predicate;
import net.minecraft.Util;
import net.minecraft.util.StringRepresentable;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.StateHolder;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public record CombinedCondition(CombinedCondition.Operation operation, List<Condition> terms) implements Condition {
@Override
public <O, S extends StateHolder<O, S>> Predicate<S> instantiate(StateDefinition<O, S> p_394518_) {
return this.operation.apply(Lists.transform(this.terms, p_397724_ -> p_397724_.instantiate(p_394518_)));
}
@OnlyIn(Dist.CLIENT)
public static enum Operation implements StringRepresentable {
AND("AND") {
@Override
public <V> Predicate<V> apply(List<Predicate<V>> p_396002_) {
return Util.allOf(p_396002_);
}
},
OR("OR") {
@Override
public <V> Predicate<V> apply(List<Predicate<V>> p_393603_) {
return Util.anyOf(p_393603_);
}
};
public static final Codec<CombinedCondition.Operation> CODEC = StringRepresentable.fromEnum(CombinedCondition.Operation::values);
private final String name;
Operation(final String p_396752_) {
this.name = p_396752_;
}
@Override
public String getSerializedName() {
return this.name;
}
public abstract <V> Predicate<V> apply(List<Predicate<V>> p_395241_);
}
}