65 lines
2.2 KiB
Java
65 lines
2.2 KiB
Java
|
package net.minecraft.client.data.models.blockstates;
|
||
|
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.List;
|
||
|
import java.util.Optional;
|
||
|
import net.minecraft.client.data.models.MultiVariant;
|
||
|
import net.minecraft.client.renderer.block.model.BlockModelDefinition;
|
||
|
import net.minecraft.client.renderer.block.model.multipart.Condition;
|
||
|
import net.minecraft.client.renderer.block.model.multipart.Selector;
|
||
|
import net.minecraft.world.level.block.Block;
|
||
|
import net.minecraftforge.api.distmarker.Dist;
|
||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||
|
|
||
|
@OnlyIn(Dist.CLIENT)
|
||
|
public class MultiPartGenerator implements BlockModelDefinitionGenerator {
|
||
|
private final Block block;
|
||
|
private final List<MultiPartGenerator.Entry> parts = new ArrayList<>();
|
||
|
|
||
|
private MultiPartGenerator(Block p_376910_) {
|
||
|
this.block = p_376910_;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public Block block() {
|
||
|
return this.block;
|
||
|
}
|
||
|
|
||
|
public static MultiPartGenerator multiPart(Block p_376179_) {
|
||
|
return new MultiPartGenerator(p_376179_);
|
||
|
}
|
||
|
|
||
|
public MultiPartGenerator with(MultiVariant p_396276_) {
|
||
|
this.parts.add(new MultiPartGenerator.Entry(Optional.empty(), p_396276_));
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
private void validateCondition(Condition p_392697_) {
|
||
|
p_392697_.instantiate(this.block.getStateDefinition());
|
||
|
}
|
||
|
|
||
|
public MultiPartGenerator with(Condition p_395503_, MultiVariant p_394665_) {
|
||
|
this.validateCondition(p_395503_);
|
||
|
this.parts.add(new MultiPartGenerator.Entry(Optional.of(p_395503_), p_394665_));
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
public MultiPartGenerator with(ConditionBuilder p_396571_, MultiVariant p_392855_) {
|
||
|
return this.with(p_396571_.build(), p_392855_);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public BlockModelDefinition create() {
|
||
|
return new BlockModelDefinition(
|
||
|
Optional.empty(),
|
||
|
Optional.of(new BlockModelDefinition.MultiPartDefinition(this.parts.stream().map(MultiPartGenerator.Entry::toUnbaked).toList()))
|
||
|
);
|
||
|
}
|
||
|
|
||
|
@OnlyIn(Dist.CLIENT)
|
||
|
record Entry(Optional<Condition> condition, MultiVariant variants) {
|
||
|
public Selector toUnbaked() {
|
||
|
return new Selector(this.condition, this.variants.toUnbaked());
|
||
|
}
|
||
|
}
|
||
|
}
|