package net.minecraft.client.data.models; import java.util.List; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.renderer.block.dispatch.BlockStateModel; import net.minecraft.client.renderer.block.dispatch.SingleVariant; import net.minecraft.client.renderer.block.dispatch.Variant; import net.minecraft.client.renderer.block.dispatch.VariantMutator; import net.minecraft.client.renderer.block.dispatch.WeightedVariants; import net.minecraft.util.random.Weighted; import net.minecraft.util.random.WeightedList; @Environment(EnvType.CLIENT) public record MultiVariant(WeightedList variants) { public MultiVariant(WeightedList variants) { if (variants.isEmpty()) { throw new IllegalArgumentException("Variant list must contain at least one element"); } else { this.variants = variants; } } public MultiVariant with(final VariantMutator mutator) { return new MultiVariant(this.variants.map(mutator)); } public BlockStateModel.Unbaked toUnbaked() { List> entries = this.variants.unwrap(); return (BlockStateModel.Unbaked)(entries.size() == 1 ? new SingleVariant.Unbaked((Variant)((Weighted)entries.getFirst()).value()) : new WeightedVariants.Unbaked(this.variants.map(SingleVariant.Unbaked::new))); } }