minecraft-src/net/minecraft/client/data/models/MultiVariant.java
2025-07-04 03:45:38 +03:00

34 lines
1.2 KiB
Java

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.model.BlockStateModel;
import net.minecraft.client.renderer.block.model.SingleVariant;
import net.minecraft.client.renderer.block.model.Variant;
import net.minecraft.client.renderer.block.model.VariantMutator;
import net.minecraft.client.resources.model.WeightedVariants;
import net.minecraft.util.random.Weighted;
import net.minecraft.util.random.WeightedList;
@Environment(EnvType.CLIENT)
public record MultiVariant(WeightedList<Variant> variants) {
public MultiVariant(WeightedList<Variant> variants) {
if (variants.isEmpty()) {
throw new IllegalArgumentException("Variant list must contain at least one element");
} else {
this.variants = variants;
}
}
public MultiVariant with(VariantMutator other) {
return new MultiVariant(this.variants.map(other));
}
public BlockStateModel.Unbaked toUnbaked() {
List<Weighted<Variant>> list = this.variants.unwrap();
return (BlockStateModel.Unbaked)(list.size() == 1
? new SingleVariant.Unbaked((Variant)((Weighted)list.getFirst()).value())
: new WeightedVariants.Unbaked(this.variants.map(SingleVariant.Unbaked::new)));
}
}