PlayerModel.java

net.minecraft.client.model.player.PlayerModel

信息

  • 全限定名:net.minecraft.client.model.player.PlayerModel
  • 类型:public class
  • 包:net.minecraft.client.model.player
  • 源码路径:src/main/java/net/minecraft/client/model/player/PlayerModel.java
  • 起始行号:L22
  • 继承:HumanoidModel
  • 职责:

    TODO

字段/常量

  • LEFT_SLEEVE

    • 类型: String
    • 修饰符: protected static final
    • 源码定位: L23
    • 说明:

      TODO

  • RIGHT_SLEEVE

    • 类型: String
    • 修饰符: protected static final
    • 源码定位: L24
    • 说明:

      TODO

  • LEFT_PANTS

    • 类型: String
    • 修饰符: protected static final
    • 源码定位: L25
    • 说明:

      TODO

  • RIGHT_PANTS

    • 类型: String
    • 修饰符: protected static final
    • 源码定位: L26
    • 说明:

      TODO

  • bodyParts

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

      TODO

  • leftSleeve

    • 类型: ModelPart
    • 修饰符: public final
    • 源码定位: L28
    • 说明:

      TODO

  • rightSleeve

    • 类型: ModelPart
    • 修饰符: public final
    • 源码定位: L29
    • 说明:

      TODO

  • leftPants

    • 类型: ModelPart
    • 修饰符: public final
    • 源码定位: L30
    • 说明:

      TODO

  • rightPants

    • 类型: ModelPart
    • 修饰符: public final
    • 源码定位: L31
    • 说明:

      TODO

  • jacket

    • 类型: ModelPart
    • 修饰符: public final
    • 源码定位: L32
    • 说明:

      TODO

  • slim

    • 类型: boolean
    • 修饰符: private final
    • 源码定位: L33
    • 说明:

      TODO

内部类/嵌套类型

构造器

public PlayerModel(ModelPart root, boolean slim) @ L35

  • 构造器名:PlayerModel
  • 源码定位:L35
  • 修饰符:public

参数:

  • root: ModelPart
  • slim: boolean

说明:

TODO

方法

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

public static MeshDefinition createMesh(CubeDeformation scale, boolean slim) @ L46

  • 方法名:createMesh
  • 源码定位:L46
  • 返回类型:MeshDefinition
  • 修饰符:public static

参数:

  • scale: CubeDeformation
  • slim: boolean

说明:

TODO

public static ArmorModelSet<MeshDefinition> createArmorMeshSet(CubeDeformation innerDeformation, CubeDeformation outerDeformation) @ L93

  • 方法名:createArmorMeshSet
  • 源码定位:L93
  • 返回类型:ArmorModelSet
  • 修饰符:public static

参数:

  • innerDeformation: CubeDeformation
  • outerDeformation: CubeDeformation

说明:

TODO

public void setupAnim(AvatarRenderState state) @ L110

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

参数:

  • state: AvatarRenderState

说明:

TODO

public void translateToHand(AvatarRenderState state, HumanoidArm arm, PoseStack poseStack) @ L126

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

参数:

  • state: AvatarRenderState
  • arm: HumanoidArm
  • poseStack: PoseStack

说明:

TODO

public ModelPart getRandomBodyPart(RandomSource random) @ L139

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

参数:

  • random: RandomSource

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class PlayerModel extends HumanoidModel<AvatarRenderState> {
    protected static final String LEFT_SLEEVE = "left_sleeve";
    protected static final String RIGHT_SLEEVE = "right_sleeve";
    protected static final String LEFT_PANTS = "left_pants";
    protected static final String RIGHT_PANTS = "right_pants";
    private final List<ModelPart> bodyParts;
    public final ModelPart leftSleeve;
    public final ModelPart rightSleeve;
    public final ModelPart leftPants;
    public final ModelPart rightPants;
    public final ModelPart jacket;
    private final boolean slim;
 
    public PlayerModel(ModelPart root, boolean slim) {
        super(root, RenderTypes::entityTranslucent);
        this.slim = slim;
        this.leftSleeve = this.leftArm.getChild("left_sleeve");
        this.rightSleeve = this.rightArm.getChild("right_sleeve");
        this.leftPants = this.leftLeg.getChild("left_pants");
        this.rightPants = this.rightLeg.getChild("right_pants");
        this.jacket = this.body.getChild("jacket");
        this.bodyParts = List.of(this.head, this.body, this.leftArm, this.rightArm, this.leftLeg, this.rightLeg);
    }
 
    public static MeshDefinition createMesh(CubeDeformation scale, boolean slim) {
        MeshDefinition mesh = HumanoidModel.createMesh(scale, 0.0F);
        PartDefinition root = mesh.getRoot();
        float overlayScale = 0.25F;
        if (slim) {
            PartDefinition leftArm = root.addOrReplaceChild(
                "left_arm", CubeListBuilder.create().texOffs(32, 48).addBox(-1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, scale), PartPose.offset(5.0F, 2.0F, 0.0F)
            );
            PartDefinition rightArm = root.addOrReplaceChild(
                "right_arm", CubeListBuilder.create().texOffs(40, 16).addBox(-2.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, scale), PartPose.offset(-5.0F, 2.0F, 0.0F)
            );
            leftArm.addOrReplaceChild(
                "left_sleeve", CubeListBuilder.create().texOffs(48, 48).addBox(-1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, scale.extend(0.25F)), PartPose.ZERO
            );
            rightArm.addOrReplaceChild(
                "right_sleeve", CubeListBuilder.create().texOffs(40, 32).addBox(-2.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, scale.extend(0.25F)), PartPose.ZERO
            );
        } else {
            PartDefinition leftArm = root.addOrReplaceChild(
                "left_arm", CubeListBuilder.create().texOffs(32, 48).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale), PartPose.offset(5.0F, 2.0F, 0.0F)
            );
            PartDefinition rightArm = root.getChild("right_arm");
            leftArm.addOrReplaceChild(
                "left_sleeve", CubeListBuilder.create().texOffs(48, 48).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale.extend(0.25F)), PartPose.ZERO
            );
            rightArm.addOrReplaceChild(
                "right_sleeve", CubeListBuilder.create().texOffs(40, 32).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale.extend(0.25F)), PartPose.ZERO
            );
        }
 
        PartDefinition leftLeg = root.addOrReplaceChild(
            "left_leg", CubeListBuilder.create().texOffs(16, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale), PartPose.offset(1.9F, 12.0F, 0.0F)
        );
        PartDefinition rightLeg = root.getChild("right_leg");
        leftLeg.addOrReplaceChild(
            "left_pants", CubeListBuilder.create().texOffs(0, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale.extend(0.25F)), PartPose.ZERO
        );
        rightLeg.addOrReplaceChild(
            "right_pants", CubeListBuilder.create().texOffs(0, 32).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale.extend(0.25F)), PartPose.ZERO
        );
        PartDefinition body = root.getChild("body");
        body.addOrReplaceChild(
            "jacket", CubeListBuilder.create().texOffs(16, 32).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, scale.extend(0.25F)), PartPose.ZERO
        );
        return mesh;
    }
 
    public static ArmorModelSet<MeshDefinition> createArmorMeshSet(CubeDeformation innerDeformation, CubeDeformation outerDeformation) {
        return HumanoidModel.createArmorMeshSet(innerDeformation, outerDeformation).map(mesh -> {
            PartDefinition root = mesh.getRoot();
            PartDefinition leftArm = root.getChild("left_arm");
            PartDefinition rightArm = root.getChild("right_arm");
            leftArm.addOrReplaceChild("left_sleeve", CubeListBuilder.create(), PartPose.ZERO);
            rightArm.addOrReplaceChild("right_sleeve", CubeListBuilder.create(), PartPose.ZERO);
            PartDefinition leftLeg = root.getChild("left_leg");
            PartDefinition rightLeg = root.getChild("right_leg");
            leftLeg.addOrReplaceChild("left_pants", CubeListBuilder.create(), PartPose.ZERO);
            rightLeg.addOrReplaceChild("right_pants", CubeListBuilder.create(), PartPose.ZERO);
            PartDefinition body = root.getChild("body");
            body.addOrReplaceChild("jacket", CubeListBuilder.create(), PartPose.ZERO);
            return (MeshDefinition)mesh;
        });
    }
 
    public void setupAnim(AvatarRenderState state) {
        boolean showBody = !state.isSpectator;
        this.body.visible = showBody;
        this.rightArm.visible = showBody;
        this.leftArm.visible = showBody;
        this.rightLeg.visible = showBody;
        this.leftLeg.visible = showBody;
        this.hat.visible = state.showHat;
        this.jacket.visible = state.showJacket;
        this.leftPants.visible = state.showLeftPants;
        this.rightPants.visible = state.showRightPants;
        this.leftSleeve.visible = state.showLeftSleeve;
        this.rightSleeve.visible = state.showRightSleeve;
        super.setupAnim(state);
    }
 
    public void translateToHand(AvatarRenderState state, HumanoidArm arm, PoseStack poseStack) {
        this.root().translateAndRotate(poseStack);
        ModelPart part = this.getArm(arm);
        if (this.slim) {
            float offset = 0.5F * (arm == HumanoidArm.RIGHT ? 1 : -1);
            part.x += offset;
            part.translateAndRotate(poseStack);
            part.x -= offset;
        } else {
            part.translateAndRotate(poseStack);
        }
    }
 
    public ModelPart getRandomBodyPart(RandomSource random) {
        return Util.getRandom(this.bodyParts, random);
    }
}

引用的其他类