PartDefinition.java

net.minecraft.client.model.geom.builders.PartDefinition

信息

  • 全限定名:net.minecraft.client.model.geom.builders.PartDefinition
  • 类型:public class
  • 包:net.minecraft.client.model.geom.builders
  • 源码路径:src/main/java/net/minecraft/client/model/geom/builders/PartDefinition.java
  • 起始行号:L17
  • 职责:

    TODO

字段/常量

  • cubes

    • 类型: List<CubeDefinition>
    • 修饰符: private final
    • 源码定位: L18
    • 说明:

      TODO

  • partPose

    • 类型: PartPose
    • 修饰符: private final
    • 源码定位: L19
    • 说明:

      TODO

  • children

    • 类型: Map<String,PartDefinition>
    • 修饰符: private final
    • 源码定位: L20
    • 说明:

      TODO

内部类/嵌套类型

构造器

PartDefinition(List<CubeDefinition> cubes, PartPose partPose) @ L22

  • 构造器名:PartDefinition
  • 源码定位:L22
  • 修饰符:package-private

参数:

  • cubes: List
  • partPose: PartPose

说明:

TODO

方法

下面的方法块按源码顺序生成。

public PartDefinition addOrReplaceChild(String name, CubeListBuilder cubes, PartPose partPose) @ L27

  • 方法名:addOrReplaceChild
  • 源码定位:L27
  • 返回类型:PartDefinition
  • 修饰符:public

参数:

  • name: String
  • cubes: CubeListBuilder
  • partPose: PartPose

说明:

TODO

public PartDefinition addOrReplaceChild(String name, PartDefinition child) @ L32

  • 方法名:addOrReplaceChild
  • 源码定位:L32
  • 返回类型:PartDefinition
  • 修饰符:public

参数:

  • name: String
  • child: PartDefinition

说明:

TODO

public PartDefinition clearRecursively() @ L41

  • 方法名:clearRecursively
  • 源码定位:L41
  • 返回类型:PartDefinition
  • 修饰符:public

参数:

说明:

TODO

public PartDefinition clearChild(String name) @ L49

  • 方法名:clearChild
  • 源码定位:L49
  • 返回类型:PartDefinition
  • 修饰符:public

参数:

  • name: String

说明:

TODO

public void retainPartsAndChildren(Set<String> parts) @ L58

  • 方法名:retainPartsAndChildren
  • 源码定位:L58
  • 返回类型:void
  • 修饰符:public

参数:

  • parts: Set

说明:

TODO

public void retainExactParts(Set<String> parts) @ L67

  • 方法名:retainExactParts
  • 源码定位:L67
  • 返回类型:void
  • 修饰符:public

参数:

  • parts: Set

说明:

TODO

public ModelPart bake(int texScaleX, int texScaleY) @ L78

  • 方法名:bake
  • 源码定位:L78
  • 返回类型:ModelPart
  • 修饰符:public

参数:

  • texScaleX: int
  • texScaleY: int

说明:

TODO

public PartDefinition getChild(String name) @ L90

  • 方法名:getChild
  • 源码定位:L90
  • 返回类型:PartDefinition
  • 修饰符:public

参数:

  • name: String

说明:

TODO

public Set<Entry<String,PartDefinition>> getChildren() @ L94

  • 方法名:getChildren
  • 源码定位:L94
  • 返回类型:Set<Entry<String,PartDefinition>>
  • 修饰符:public

参数:

说明:

TODO

public PartDefinition transformed(UnaryOperator<PartPose> function) @ L98

  • 方法名:transformed
  • 源码定位:L98
  • 返回类型:PartDefinition
  • 修饰符:public

参数:

  • function: UnaryOperator

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class PartDefinition {
    private final List<CubeDefinition> cubes;
    private final PartPose partPose;
    private final Map<String, PartDefinition> children = Maps.newHashMap();
 
    PartDefinition(List<CubeDefinition> 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);
        } else {
            return this.addOrReplaceChild(name, CubeListBuilder.create(), child.partPose);
        }
    }
 
    public void retainPartsAndChildren(Set<String> parts) {
        for (Entry<String, PartDefinition> entry : this.children.entrySet()) {
            PartDefinition child = entry.getValue();
            if (!parts.contains(entry.getKey())) {
                this.addOrReplaceChild(entry.getKey(), CubeListBuilder.create(), child.partPose).retainPartsAndChildren(parts);
            }
        }
    }
 
    public void retainExactParts(Set<String> parts) {
        for (Entry<String, PartDefinition> entry : this.children.entrySet()) {
            PartDefinition child = entry.getValue();
            if (parts.contains(entry.getKey())) {
                child.clearRecursively();
            } else {
                this.addOrReplaceChild(entry.getKey(), CubeListBuilder.create(), child.partPose).retainExactParts(parts);
            }
        }
    }
 
    public ModelPart bake(int texScaleX, int texScaleY) {
        Object2ObjectArrayMap<String, ModelPart> bakedChildren = this.children
            .entrySet()
            .stream()
            .collect(Collectors.toMap(Entry::getKey, e -> ((PartDefinition)e.getValue()).bake(texScaleX, texScaleY), (a, b) -> a, Object2ObjectArrayMap::new));
        List<ModelPart.Cube> bakedCubes = this.cubes.stream().map(definition -> definition.bake(texScaleX, texScaleY)).toList();
        ModelPart result = new ModelPart(bakedCubes, bakedChildren);
        result.setInitialPose(this.partPose);
        result.loadPose(this.partPose);
        return result;
    }
 
    public PartDefinition getChild(String name) {
        return this.children.get(name);
    }
 
    public Set<Entry<String, PartDefinition>> getChildren() {
        return this.children.entrySet();
    }
 
    public PartDefinition transformed(UnaryOperator<PartPose> function) {
        PartDefinition newPart = new PartDefinition(this.cubes, function.apply(this.partPose));
        newPart.children.putAll(this.children);
        return newPart;
    }
}

引用的其他类

  • ModelPart

    • 引用位置: 构造调用/返回值
    • 关联成员: ModelPart()
  • PartPose

    • 引用位置: 参数/字段
  • CubeDefinition

    • 引用位置: 参数/字段
  • CubeListBuilder

    • 引用位置: 参数/方法调用
    • 关联成员: CubeListBuilder.create()