feat: 支持自定义姿势
This commit is contained in:
parent
5fb2c614db
commit
67bbef432b
|
|
@ -9,6 +9,7 @@ import net.minecraft.client.model.geom.PartPose;
|
||||||
import net.minecraft.client.model.geom.builders.*;
|
import net.minecraft.client.model.geom.builders.*;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import top.r3944realms.lib39.Lib39;
|
import top.r3944realms.lib39.Lib39;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -31,13 +32,56 @@ public class DollModel extends Model {
|
||||||
private final ModelPart rightArmSlim;
|
private final ModelPart rightArmSlim;
|
||||||
private final ModelPart leftArmSlim;
|
private final ModelPart leftArmSlim;
|
||||||
private final ModelPart leftLeg;
|
private final ModelPart leftLeg;
|
||||||
|
@Nullable
|
||||||
|
private IDollPose currentPose;
|
||||||
|
/**
|
||||||
|
* Gets current pose.
|
||||||
|
*
|
||||||
|
* @return the current pose
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public IDollPose getCurrentPose() {
|
||||||
|
return currentPose;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets doll pose.
|
||||||
|
*
|
||||||
|
* @param dollPose the doll pose
|
||||||
|
*/
|
||||||
|
public void setDollPose(@NotNull IDollPose dollPose) {
|
||||||
|
this.currentPose = dollPose;
|
||||||
|
this.head.loadPose(dollPose.getHeadPose());
|
||||||
|
this.body.loadPose(dollPose.getBodyPose());
|
||||||
|
this.rightArm.loadPose(dollPose.getRightArmPose());
|
||||||
|
this.leftArm.loadPose(dollPose.getLeftArmPose());
|
||||||
|
this.rightArmSlim.loadPose(dollPose.getRightArmPose());
|
||||||
|
this.leftArmSlim.loadPose(dollPose.getLeftArmPose());
|
||||||
|
this.rightLeg.loadPose(dollPose.getRightLegPose());
|
||||||
|
this.leftLeg.loadPose(dollPose.getLeftLegPose());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset pose.
|
||||||
|
*/
|
||||||
|
public void resetPose() {
|
||||||
|
this.currentPose = DollPoses.DEFAULT;
|
||||||
|
this.head.resetPose();
|
||||||
|
this.body.resetPose();
|
||||||
|
this.rightArm.resetPose();
|
||||||
|
this.leftArm.resetPose();
|
||||||
|
this.rightArmSlim.resetPose();
|
||||||
|
this.leftArmSlim.resetPose();
|
||||||
|
this.rightLeg.resetPose();
|
||||||
|
this.leftLeg.resetPose();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a new Doll model.
|
* Instantiates a new Doll model.
|
||||||
*
|
*
|
||||||
* @param root the root
|
* @param root the root
|
||||||
*/
|
*/
|
||||||
public DollModel(ModelPart root) {
|
public DollModel(@NotNull ModelPart root) {
|
||||||
super(RenderType::entityTranslucent);
|
super(RenderType::entityTranslucent);
|
||||||
this.head = root.getChild("head");
|
this.head = root.getChild("head");
|
||||||
this.body = root.getChild("body");
|
this.body = root.getChild("body");
|
||||||
|
|
@ -54,21 +98,104 @@ public class DollModel extends Model {
|
||||||
*
|
*
|
||||||
* @return the layer definition
|
* @return the layer definition
|
||||||
*/
|
*/
|
||||||
public static LayerDefinition createBodyLayer() {
|
public static @NotNull LayerDefinition createBodyLayer() {
|
||||||
|
return createBodyLayer(DollPoses.DEFAULT);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static @NotNull LayerDefinition createBodyLayer(@NotNull IDollPose dollPoses) {
|
||||||
MeshDefinition meshdefinition = new MeshDefinition();
|
MeshDefinition meshdefinition = new MeshDefinition();
|
||||||
PartDefinition partdefinition = meshdefinition.getRoot();
|
PartDefinition partdefinition = meshdefinition.getRoot();
|
||||||
partdefinition.addOrReplaceChild("head", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.0F)).texOffs(32, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.5F)), PartPose.offset(0.0F, 9.0F, 0.0F));
|
partdefinition.addOrReplaceChild(
|
||||||
partdefinition.addOrReplaceChild("body", CubeListBuilder.create().texOffs(16, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(16, 32).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offset(0.0F, 9.0F, 0.0F));
|
"head",
|
||||||
partdefinition.addOrReplaceChild("right_arm", CubeListBuilder.create().texOffs(40, 16).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(40, 32).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(-5.0F, 11.0F, 0.0F, 0.0F, 0.0F, 0.3927F));
|
CubeListBuilder.create()
|
||||||
partdefinition.addOrReplaceChild("right_arm_slim", CubeListBuilder.create().texOffs(40, 16).addBox(-2.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(40, 32).addBox(-2.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(-5.0F, 11.0F, 0.0F, 0.0F, 0.0F, 0.3927F));
|
.texOffs(0, 0)
|
||||||
partdefinition.addOrReplaceChild("left_arm_slim", CubeListBuilder.create().texOffs(32, 48).addBox(-1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(48, 48).addBox(-1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(5.0F, 11.0F, 0.0F, 0.0F, 0.0F, -0.3927F));
|
.addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.0F))
|
||||||
partdefinition.addOrReplaceChild("left_arm", CubeListBuilder.create().texOffs(32, 48).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(48, 48).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(5.0F, 11.0F, 0.0F, 0.0F, 0.0F, -0.3927F));
|
.texOffs(32, 0)
|
||||||
partdefinition.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 16).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(0, 32).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(-2.0F, 19.0F, -2.0F, -1.5708F, 0.3927F, 0.0F));
|
.addBox(
|
||||||
partdefinition.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(16, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(0, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(2.0F, 19.0F, -2.0F, -1.5708F, -0.3927F, 0.0F));
|
-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F,
|
||||||
|
new CubeDeformation(0.5F)
|
||||||
|
), dollPoses.getHeadPose()
|
||||||
|
);
|
||||||
|
partdefinition.addOrReplaceChild(
|
||||||
|
"body",
|
||||||
|
CubeListBuilder.create()
|
||||||
|
.texOffs(16, 16)
|
||||||
|
.addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.0F))
|
||||||
|
.texOffs(16, 32)
|
||||||
|
.addBox(
|
||||||
|
-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F,
|
||||||
|
new CubeDeformation(0.25F)
|
||||||
|
), dollPoses.getBodyPose()
|
||||||
|
);
|
||||||
|
partdefinition.addOrReplaceChild(
|
||||||
|
"right_arm",
|
||||||
|
CubeListBuilder.create()
|
||||||
|
.texOffs(40, 16)
|
||||||
|
.addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F))
|
||||||
|
.texOffs(40, 32)
|
||||||
|
.addBox(
|
||||||
|
-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F,
|
||||||
|
new CubeDeformation(0.25F)
|
||||||
|
), dollPoses.getRightArmPose()
|
||||||
|
);
|
||||||
|
partdefinition.addOrReplaceChild(
|
||||||
|
"right_arm_slim",
|
||||||
|
CubeListBuilder.create()
|
||||||
|
.texOffs(40, 16)
|
||||||
|
.addBox(-2.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.0F))
|
||||||
|
.texOffs(40, 32)
|
||||||
|
.addBox(-2.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F,
|
||||||
|
new CubeDeformation(0.25F)
|
||||||
|
), dollPoses.getRightArmPose()
|
||||||
|
);
|
||||||
|
partdefinition.addOrReplaceChild(
|
||||||
|
"left_arm_slim",
|
||||||
|
CubeListBuilder.create()
|
||||||
|
.texOffs(32, 48)
|
||||||
|
.addBox(-1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.0F))
|
||||||
|
.texOffs(48, 48)
|
||||||
|
.addBox(
|
||||||
|
-1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F,
|
||||||
|
new CubeDeformation(0.25F)
|
||||||
|
), dollPoses.getLeftArmPose()
|
||||||
|
);
|
||||||
|
partdefinition.addOrReplaceChild(
|
||||||
|
"left_arm",
|
||||||
|
CubeListBuilder.create()
|
||||||
|
.texOffs(32, 48)
|
||||||
|
.addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F))
|
||||||
|
.texOffs(48, 48)
|
||||||
|
.addBox(
|
||||||
|
-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F,
|
||||||
|
new CubeDeformation(0.25F)
|
||||||
|
), dollPoses.getLeftArmPose()
|
||||||
|
);
|
||||||
|
partdefinition.addOrReplaceChild(
|
||||||
|
"right_leg",
|
||||||
|
CubeListBuilder.create()
|
||||||
|
.texOffs(0, 16)
|
||||||
|
.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F))
|
||||||
|
.texOffs(0, 32)
|
||||||
|
.addBox(
|
||||||
|
-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.25F)
|
||||||
|
), dollPoses.getRightLegPose()
|
||||||
|
);
|
||||||
|
partdefinition.addOrReplaceChild(
|
||||||
|
"left_leg",
|
||||||
|
CubeListBuilder.create()
|
||||||
|
.texOffs(16, 48)
|
||||||
|
.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.0F))
|
||||||
|
.texOffs(0, 48)
|
||||||
|
.addBox(
|
||||||
|
-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F,
|
||||||
|
new CubeDeformation(0.25F)
|
||||||
|
), dollPoses.getLeftLegPose()
|
||||||
|
);
|
||||||
return LayerDefinition.create(meshdefinition, 64, 64);
|
return LayerDefinition.create(meshdefinition, 64, 64);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderToBuffer(PoseStack poseStack, @NotNull VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
|
public void renderToBuffer(PoseStack poseStack, @NotNull VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
|
||||||
poseStack.pushPose();
|
poseStack.pushPose();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,93 @@
|
||||||
|
package top.r3944realms.lib39.client.model;
|
||||||
|
|
||||||
|
import net.minecraft.client.model.geom.PartPose;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import top.r3944realms.lib39.Lib39;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The enum Doll poses.
|
||||||
|
*/
|
||||||
|
public enum DollPoses implements IDollPose{
|
||||||
|
/**
|
||||||
|
* Default doll poses.
|
||||||
|
*/
|
||||||
|
DEFAULT(
|
||||||
|
"default",
|
||||||
|
PartPose.offset(0.0F, 9.0F, 0.0F),
|
||||||
|
PartPose.offset(0.0F, 9.0F, 0.0F),
|
||||||
|
PartPose.offsetAndRotation(-5.0F, 11.0F, 0.0F, 0.0F, 0.0F, 0.3927F),
|
||||||
|
PartPose.offsetAndRotation(5.0F, 11.0F, 0.0F, 0.0F, 0.0F, -0.3927F),
|
||||||
|
PartPose.offsetAndRotation(-2.0F, 19.0F, -2.0F, -1.5708F, 0.3927F, 0.0F),
|
||||||
|
PartPose.offsetAndRotation(2.0F, 19.0F, -2.0F, -1.5708F, -0.3927F, 0.0F)
|
||||||
|
);
|
||||||
|
// 注册全局?
|
||||||
|
private final ResourceLocation id;
|
||||||
|
private final Vec3 offset;
|
||||||
|
private final PartPose headPose;
|
||||||
|
private final PartPose bodyPose;
|
||||||
|
private final PartPose rightArmPose;
|
||||||
|
private final PartPose leftArmPose;
|
||||||
|
private final PartPose rightLegPose;
|
||||||
|
private final PartPose leftLegPose;
|
||||||
|
|
||||||
|
DollPoses(String name, PartPose headPose, PartPose bodyPose,
|
||||||
|
PartPose rightArmPose, PartPose leftArmPose,
|
||||||
|
PartPose rightLegPose, PartPose leftLegPose) {
|
||||||
|
this(name, Vec3.ZERO, headPose, bodyPose, rightArmPose, leftArmPose, rightLegPose, leftLegPose);
|
||||||
|
}
|
||||||
|
|
||||||
|
DollPoses(String name, Vec3 offset, PartPose headPose, PartPose bodyPose,
|
||||||
|
PartPose rightArmPose, PartPose leftArmPose,
|
||||||
|
PartPose rightLegPose, PartPose leftLegPose) {
|
||||||
|
this.id = Lib39.rl(name);
|
||||||
|
this.offset = offset;
|
||||||
|
this.headPose = headPose;
|
||||||
|
this.bodyPose = bodyPose;
|
||||||
|
this.rightArmPose = rightArmPose;
|
||||||
|
this.leftArmPose = leftArmPose;
|
||||||
|
this.rightLegPose = rightLegPose;
|
||||||
|
this.leftLegPose = leftLegPose;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull ResourceLocation getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PartPose getHeadPose() {
|
||||||
|
return headPose;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PartPose getBodyPose() {
|
||||||
|
return bodyPose;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PartPose getRightArmPose() {
|
||||||
|
return rightArmPose;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PartPose getLeftArmPose() {
|
||||||
|
return leftArmPose;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PartPose getRightLegPose() {
|
||||||
|
return rightLegPose;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PartPose getLeftLegPose() {
|
||||||
|
return leftLegPose;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Vec3 getTotalOffset() {
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,69 @@
|
||||||
|
package top.r3944realms.lib39.client.model;
|
||||||
|
|
||||||
|
import net.minecraft.client.model.geom.PartPose;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The interface Doll pose.
|
||||||
|
*/
|
||||||
|
public interface IDollPose {
|
||||||
|
/**
|
||||||
|
* Gets id.
|
||||||
|
*
|
||||||
|
* @return the id
|
||||||
|
*/
|
||||||
|
@NotNull ResourceLocation getId();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets total offset.
|
||||||
|
*
|
||||||
|
* @return the total offset
|
||||||
|
*/
|
||||||
|
@NotNull default Vec3 getTotalOffset() {
|
||||||
|
return Vec3.ZERO;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets head pose.
|
||||||
|
*
|
||||||
|
* @return the head pose
|
||||||
|
*/
|
||||||
|
@NotNull PartPose getHeadPose();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets body pose.
|
||||||
|
*
|
||||||
|
* @return the body pose
|
||||||
|
*/
|
||||||
|
@NotNull PartPose getBodyPose();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets right arm pose.
|
||||||
|
*
|
||||||
|
* @return the right arm pose
|
||||||
|
*/
|
||||||
|
@NotNull PartPose getRightArmPose();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets left arm pose.
|
||||||
|
*
|
||||||
|
* @return the left arm pose
|
||||||
|
*/
|
||||||
|
@NotNull PartPose getLeftArmPose();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets right leg pose.
|
||||||
|
*
|
||||||
|
* @return the right leg pose
|
||||||
|
*/
|
||||||
|
@NotNull PartPose getRightLegPose();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets left leg pose.
|
||||||
|
*
|
||||||
|
* @return the left leg pose
|
||||||
|
*/
|
||||||
|
@NotNull PartPose getLeftLegPose();
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user