/* * Decompiled with CFR 0.152. * * Could not load the following classes: * com.google.common.collect.Maps * it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap */ package net.minecraft.client.model.geom.builders; import com.google.common.collect.Maps; import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.UnaryOperator; import java.util.stream.Collectors; import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.model.geom.PartPose; import net.minecraft.client.model.geom.builders.CubeDefinition; import net.minecraft.client.model.geom.builders.CubeListBuilder; public class PartDefinition { private final List cubes; private final PartPose partPose; private final Map children = Maps.newHashMap(); PartDefinition(List cubes, PartPose partPose) { this.cubes = cubes; this.partPose = partPose; } public PartDefinition addOrReplaceChild(String name, CubeListBuilder cubes, PartPose partPose) { PartDefinition child = new PartDefinition(cubes.getCubes(), partPose); return this.addOrReplaceChild(name, child); } public PartDefinition addOrReplaceChild(String name, PartDefinition child) { PartDefinition previous = this.children.put(name, child); if (previous != null) { child.children.putAll(previous.children); } return child; } public PartDefinition clearRecursively() { for (String name : this.children.keySet()) { this.clearChild(name).clearRecursively(); } return this; } public PartDefinition clearChild(String name) { PartDefinition child = this.children.get(name); if (child == null) { throw new IllegalArgumentException("No child with name: " + name); } return this.addOrReplaceChild(name, CubeListBuilder.create(), child.partPose); } public void retainPartsAndChildren(Set parts) { for (Map.Entry entry : this.children.entrySet()) { PartDefinition child = entry.getValue(); if (parts.contains(entry.getKey())) continue; this.addOrReplaceChild(entry.getKey(), CubeListBuilder.create(), child.partPose).retainPartsAndChildren(parts); } } public void retainExactParts(Set parts) { for (Map.Entry entry : this.children.entrySet()) { PartDefinition child = entry.getValue(); if (parts.contains(entry.getKey())) { child.clearRecursively(); continue; } this.addOrReplaceChild(entry.getKey(), CubeListBuilder.create(), child.partPose).retainExactParts(parts); } } public ModelPart bake(int texScaleX, int texScaleY) { Object2ObjectArrayMap bakedChildren = this.children.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> ((PartDefinition)e.getValue()).bake(texScaleX, texScaleY), (a, b) -> a, Object2ObjectArrayMap::new)); List bakedCubes = this.cubes.stream().map(definition -> definition.bake(texScaleX, texScaleY)).toList(); ModelPart result = new ModelPart(bakedCubes, (Map)bakedChildren); result.setInitialPose(this.partPose); result.loadPose(this.partPose); return result; } public PartDefinition getChild(String name) { return this.children.get(name); } public Set> getChildren() { return this.children.entrySet(); } public PartDefinition transformed(UnaryOperator function) { PartDefinition newPart = new PartDefinition(this.cubes, (PartPose)function.apply(this.partPose)); newPart.children.putAll(this.children); return newPart; } }