minecraft-src/net/minecraft/client/model/geom/builders/PartDefinition.java
2025-07-04 01:41:11 +03:00

58 lines
2.1 KiB
Java

package net.minecraft.client.model.geom.builders;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;
import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.model.geom.PartPose;
@Environment(EnvType.CLIENT)
public class PartDefinition {
private final List<CubeDefinition> cubes;
private final PartPose partPose;
private final Map<String, PartDefinition> children = Maps.<String, PartDefinition>newHashMap();
PartDefinition(List<CubeDefinition> cubes, PartPose partPose) {
this.cubes = cubes;
this.partPose = partPose;
}
public PartDefinition addOrReplaceChild(String name, CubeListBuilder cubes, PartPose partPose) {
PartDefinition partDefinition = new PartDefinition(cubes.getCubes(), partPose);
PartDefinition partDefinition2 = (PartDefinition)this.children.put(name, partDefinition);
if (partDefinition2 != null) {
partDefinition.children.putAll(partDefinition2.children);
}
return partDefinition;
}
public ModelPart bake(int texWidth, int texHeight) {
Object2ObjectArrayMap<String, ModelPart> object2ObjectArrayMap = (Object2ObjectArrayMap<String, ModelPart>)this.children
.entrySet()
.stream()
.collect(
Collectors.toMap(
Entry::getKey, entry -> ((PartDefinition)entry.getValue()).bake(texWidth, texHeight), (modelPartx, modelPart2) -> modelPartx, Object2ObjectArrayMap::new
)
);
List<ModelPart.Cube> list = (List<ModelPart.Cube>)this.cubes
.stream()
.map(cubeDefinition -> cubeDefinition.bake(texWidth, texHeight))
.collect(ImmutableList.toImmutableList());
ModelPart modelPart = new ModelPart(list, object2ObjectArrayMap);
modelPart.setInitialPose(this.partPose);
modelPart.loadPose(this.partPose);
return modelPart;
}
public PartDefinition getChild(String name) {
return (PartDefinition)this.children.get(name);
}
}