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.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.util.StringRepresentable; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.StateHolder; @Environment(EnvType.CLIENT) public record CombinedCondition(CombinedCondition.Operation operation, List terms) implements Condition { @Override public > Predicate instantiate(StateDefinition stateDefinition) { return this.operation.apply(Lists.transform(this.terms, condition -> condition.instantiate(stateDefinition))); } @Environment(EnvType.CLIENT) public static enum Operation implements StringRepresentable { AND("AND", 0, "AND"), OR("OR", 1, "OR"); public static final Codec CODEC = StringRepresentable.fromEnum(CombinedCondition.Operation::values); private final String name; Operation(final String name) { this.name = name; } @Override public String getSerializedName() { return this.name; } public abstract Predicate apply(List> conditions); } }