minecraft-src/net/minecraft/client/renderer/block/model/multipart/CombinedCondition.java
2025-07-04 03:45:38 +03:00

39 lines
1.3 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.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<Condition> terms) implements Condition {
@Override
public <O, S extends StateHolder<O, S>> Predicate<S> instantiate(StateDefinition<O, S> 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<CombinedCondition.Operation> 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 <V> Predicate<V> apply(List<Predicate<V>> conditions);
}
}