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

25 lines
1.1 KiB
Java

package net.minecraft.client.renderer.block.model.multipart;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import java.util.Optional;
import java.util.function.Predicate;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.block.model.BlockStateModel;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.StateHolder;
@Environment(EnvType.CLIENT)
public record Selector(Optional<Condition> condition, BlockStateModel.Unbaked variant) {
public static final Codec<Selector> CODEC = RecordCodecBuilder.create(
instance -> instance.group(
Condition.CODEC.optionalFieldOf("when").forGetter(Selector::condition), BlockStateModel.Unbaked.CODEC.fieldOf("apply").forGetter(Selector::variant)
)
.apply(instance, Selector::new)
);
public <O, S extends StateHolder<O, S>> Predicate<S> instantiate(StateDefinition<O, S> stateDefinition) {
return (Predicate<S>)this.condition.map(condition -> condition.instantiate(stateDefinition)).orElse((Predicate)stateHolder -> true);
}
}