Fixed UV-Coordinate rendering

This commit is contained in:
Frank Bauer 2021-06-28 17:35:10 +02:00
parent 3d6f0adc56
commit 770f12ee20
12 changed files with 204 additions and 127 deletions

View file

@ -95,13 +95,17 @@ class ModelPart {
s += "PartDefinition " + name + " = ";
s += pName+".addOrReplaceChild(\""+name+"\", CubeListBuilder.create()\n";
if (this.mirror) s+= ".mirror()\n";
s+= ".texOffs("+u+", "+v+")";
if (this.hadBox) {
s+= "\n";
if (scale!=1)
s+= ".addBox("+bx+"f, "+by+"f, "+bz+"f, "+ba+"f, "+bb+"f, "+bc+"f, deformation_"+name+")\n";
s+= ".addBox("+bx+"f, "+by+"f, "+bz+"f, "+ba+"f, "+bb+"f, "+bc+"f, deformation_"+name+"),\n";
else
s+= ".addBox("+bx+"f, "+by+"f, "+bz+"f, "+ba+"f, "+bb+"f, "+bc+"f)\n";
s+= ".addBox("+bx+"f, "+by+"f, "+bz+"f, "+ba+"f, "+bb+"f, "+bc+"f),\n";
} else {
s+= ",\n";
}
s+= ".texOffs("+u+", "+v+"),\n";
if (x==0 && y==0 && z==0 && rx==0 && ry==0 && rz==0){
s+= "PartPose.ZERO";
} else if (rx==0 && ry==0 && rz==0){
@ -144,13 +148,33 @@ public class Convert {
p.setRotationAngle(x, y, z);
}
public void c (){
float scale = 0;
ModelPart[] SHARDS = new ModelPart[4];
SHARDS[0] = new ModelPart(16, 16, 2, 4, "SHARDS[0]").addBox(-5.0F, 1.0F, -3.0F, 2.0F, 8.0F, 2.0F);
SHARDS[1] = new ModelPart(16, 16, 2, 4, "SHARDS[1]").addBox(3.0F, -1.0F, -1.0F, 2.0F, 8.0F, 2.0F);
SHARDS[2] = new ModelPart(16, 16, 2, 4, "SHARDS[2]").addBox(-1.0F, 0.0F, -5.0F, 2.0F, 4.0F, 2.0F);
SHARDS[3] = new ModelPart(16, 16, 2, 4, "SHARDS[3]").addBox(0.0F, 3.0F, 4.0F, 2.0F, 6.0F, 2.0F);
ModelPart CORE = new ModelPart(16, 16, 0, 0, "CORE");
CORE.addBox(-2.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F);
float scale = 1;
ModelPart partC = new ModelPart(64, 64, 0, 19, "partC");
partC.addBox(1.0F, 0.0F, 1.0F, 14.0F, 9.0F, 14.0F, 0.0F);
ModelPart partA = new ModelPart(64, 64, 0, 0,"partA");
partA.addBox(1.0F, 0.0F, 0.0F, 14.0F, 5.0F, 14.0F, 0.0F);
partA.y = 9.0F;
partA.z = 1.0F;
ModelPart partB = new ModelPart(64, 64, 0, 0, "partB");
partB.addBox(7.0F, -1.0F, 15.0F, 2.0F, 4.0F, 1.0F, 0.0F);
partB.y = 8.0F;
ModelPart partRightC = new ModelPart(64, 64, 0, 19, "partRightC");
partRightC.addBox(1.0F, 0.0F, 1.0F, 15.0F, 9.0F, 14.0F, 0.0F);
ModelPart partRightA = new ModelPart(64, 64, 0, 0, "partRightA");
partRightA.addBox(1.0F, 0.0F, 0.0F, 15.0F, 5.0F, 14.0F, 0.0F);
partRightA.y = 9.0F;
partRightA.z = 1.0F;
ModelPart partRightB = new ModelPart(64, 64, 0, 0, "partRightB");
partRightB.addBox(15.0F, -1.0F, 15.0F, 1.0F, 4.0F, 1.0F, 0.0F);
partRightB.y = 8.0F;
ModelPart partLeftC = new ModelPart(64, 64, 0, 19, "partLeftC");
partLeftC.addBox(0.0F, 0.0F, 1.0F, 15.0F, 9.0F, 14.0F, 0.0F);
ModelPart partLeftA = new ModelPart(64, 64, 0, 0, "partLeftA");
partLeftA.addBox(0.0F, 0.0F, 0.0F, 15.0F, 5.0F, 14.0F, 0.0F);
partLeftA.y = 9.0F;
partLeftA.z = 1.0F;
ModelPart partLeftB = new ModelPart(64, 64, 0, 0, "partLeftB");
partLeftB.addBox(0.0F, -1.0F, 15.0F, 1.0F, 4.0F, 1.0F, 0.0F);
partLeftB.y = 8.0F;
}
}

View file

@ -51,13 +51,13 @@ public class EndCrystalRenderer {
MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot();
modelPartData.addOrReplaceChild("FRAME", CubeListBuilder.create()
.addBox(-4.0f, -4.0f, -4.0f, 8.0f, 8.0f, 8.0f)
.texOffs(0, 0),
.texOffs(0, 0)
.addBox(-4.0f, -4.0f, -4.0f, 8.0f, 8.0f, 8.0f),
PartPose.ZERO);
modelPartData.addOrReplaceChild("CORE", CubeListBuilder.create()
.addBox(-4.0f, -4.0f, -4.0f, 8.0f, 8.0f, 8.0f)
.texOffs(32, 0),
.texOffs(32, 0)
.addBox(-4.0f, -4.0f, -4.0f, 8.0f, 8.0f, 8.0f),
PartPose.ZERO);
return LayerDefinition.create(modelData, 64, 32);

View file

@ -66,28 +66,28 @@ public class EternalCrystalRenderer {
MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot();
modelPartData.addOrReplaceChild("SHARDS_0", CubeListBuilder.create()
.addBox(-5.0f, 1.0f, -3.0f, 2.0f, 8.0f, 2.0f)
.texOffs(2, 4),
.texOffs(2, 4)
.addBox(-5.0f, 1.0f, -3.0f, 2.0f, 8.0f, 2.0f),
PartPose.ZERO);
modelPartData.addOrReplaceChild("SHARDS_1", CubeListBuilder.create()
.addBox(3.0f, -1.0f, -1.0f, 2.0f, 8.0f, 2.0f)
.texOffs(2, 4),
.texOffs(2, 4)
.addBox(3.0f, -1.0f, -1.0f, 2.0f, 8.0f, 2.0f),
PartPose.ZERO);
modelPartData.addOrReplaceChild("SHARDS_2", CubeListBuilder.create()
.addBox(-1.0f, 0.0f, -5.0f, 2.0f, 4.0f, 2.0f)
.texOffs(2, 4),
.texOffs(2, 4)
.addBox(-1.0f, 0.0f, -5.0f, 2.0f, 4.0f, 2.0f),
PartPose.ZERO);
modelPartData.addOrReplaceChild("SHARDS_3", CubeListBuilder.create()
.addBox(0.0f, 3.0f, 4.0f, 2.0f, 6.0f, 2.0f)
.texOffs(2, 4),
.texOffs(2, 4)
.addBox(0.0f, 3.0f, 4.0f, 2.0f, 6.0f, 2.0f),
PartPose.ZERO);
modelPartData.addOrReplaceChild("CORE", CubeListBuilder.create()
.addBox(-2.0f, -2.0f, -2.0f, 4.0f, 12.0f, 4.0f)
.texOffs(0, 0),
.texOffs(0, 0)
.addBox(-2.0f, -2.0f, -2.0f, 4.0f, 12.0f, 4.0f),
PartPose.ZERO);
return LayerDefinition.create(modelData, 16, 16);

View file

@ -122,7 +122,7 @@ public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
scaleY = sin * 0.1F + 0.9F;
scaleXZ = Mth.sin(animationProgress * 0.13F + 3.14F) * 0.1F + 0.9F;
for (int i=1; i<=TENTACLE_COUNT; i++){
for (int i=0; i<TENTACLE_COUNT; i++){
tentacle[i].xRot = sin * 0.15f;
}
}

View file

@ -5,6 +5,8 @@ import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.model.ListModel;
import net.minecraft.client.model.geom.EntityModelSet;
import net.minecraft.client.model.geom.ModelLayers;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.model.geom.PartNames;
import net.minecraft.client.model.geom.PartPose;
@ -15,6 +17,7 @@ import net.minecraft.client.model.geom.builders.PartDefinition;
import net.minecraft.client.renderer.RenderType;
import ru.bclib.util.MHelper;
import ru.betterend.entity.EndSlimeEntity;
import ru.betterend.registry.EndEntitiesRenders;
public class EndSlimeEntityModel<T extends EndSlimeEntity> extends ListModel<T> {
private final ModelPart innerCube;
@ -120,9 +123,11 @@ public class EndSlimeEntityModel<T extends EndSlimeEntity> extends ListModel<T>
return LayerDefinition.create(modelData, 64, 32);
}
public EndSlimeEntityModel(ModelPart modelPart, boolean onlyShell) {
public EndSlimeEntityModel(EntityModelSet modelSet, boolean onlyShell){
super(RenderType::entityCutout);
ModelPart modelPart = modelSet.bakeLayer(onlyShell ? EndEntitiesRenders.END_SLIME_SHELL_MODEL : EndEntitiesRenders.END_SLIME_MODEL);
innerCube = modelPart.getChild(PartNames.BODY);
if (!onlyShell) {
rightEye = modelPart.getChild(PartNames.RIGHT_EYE);

View file

@ -41,20 +41,20 @@ public class SilkMothEntityModel extends BlockBenchModel<SilkMothEntity> {
0.0f, 0.0f, 0.6981f));
legsL.addOrReplaceChild("cube_r1", CubeListBuilder.create()
.addBox(0.0216f, 0.0f, -0.5976f, 3.0f, 0.0f, 1.0f)
.texOffs(0, 13),
.texOffs(0, 13)
.addBox(0.0216f, 0.0f, -0.5976f, 3.0f, 0.0f, 1.0f),
PartPose.offsetAndRotation(0.0f, 0.0f, -1.0f,
0.0f, 0.2182f, 0.3927f));
legsL.addOrReplaceChild("cube_r2", CubeListBuilder.create()
.addBox(0.0f, 0.0f, -0.6f, 3.0f, 0.0f, 1.0f)
.texOffs(0, 15),
.texOffs(0, 15)
.addBox(0.0f, 0.0f, -0.6f, 3.0f, 0.0f, 1.0f),
PartPose.offsetAndRotation(0.5f, 0.1f, -0.05f,
0.0f, 0.0f, 0.3927f));
legsL.addOrReplaceChild("cube_r3", CubeListBuilder.create()
.addBox(0.0f, 0.0f, -0.5f, 3.0f, 0.0f, 1.0f)
.texOffs(0, 14),
.texOffs(0, 14)
.addBox(0.0f, 0.0f, -0.5f, 3.0f, 0.0f, 1.0f),
PartPose.offsetAndRotation(0.0f, 0.0f, 0.9f,
0.0f, -0.2182f, 0.3927f));
@ -64,62 +64,62 @@ public class SilkMothEntityModel extends BlockBenchModel<SilkMothEntity> {
0.0f, 3.1416f, -0.6545f));
legsR.addOrReplaceChild("cube_r4", CubeListBuilder.create()
.addBox(0.0f, 0.0f, -0.5f, 3.0f, 0.0f, 1.0f)
.texOffs(0, 10),
.texOffs(0, 10)
.addBox(0.0f, 0.0f, -0.5f, 3.0f, 0.0f, 1.0f),
PartPose.offsetAndRotation(0.0f, 0.0f, -1.0f,
0.0f, 0.2182f, 0.3927f));
legsR.addOrReplaceChild("cube_r5", CubeListBuilder.create()
.addBox(0.0f, 0.0f, -0.4f, 3.0f, 0.0f, 1.0f)
.texOffs(0, 11),
.texOffs(0, 11)
.addBox(0.0f, 0.0f, -0.4f, 3.0f, 0.0f, 1.0f),
PartPose.offsetAndRotation(0.5f, 0.1f, -0.05f,
0.0f, 0.0f, 0.3927f));
legsR.addOrReplaceChild("cube_r6", CubeListBuilder.create()
.addBox(0.0216f, 0.0f, -0.4024f, 3.0f, 0.0f, 1.0f)
.texOffs(0, 12),
.texOffs(0, 12)
.addBox(0.0216f, 0.0f, -0.4024f, 3.0f, 0.0f, 1.0f),
PartPose.offsetAndRotation(0.0f, 0.0f, 0.9f,
0.0f, -0.2182f, 0.3927f));
PartDefinition head_pivot = modelPartData.addOrReplaceChild(PartNames.HEAD, CubeListBuilder.create()
.addBox(-1.5f, -1.5f, -2.0f, 3.0f, 3.0f, 3.0f)
.texOffs(15, 10),
.texOffs(15, 10)
.addBox(-1.5f, -1.5f, -2.0f, 3.0f, 3.0f, 3.0f),
PartPose.offset(0.0f, 18.0f, -3.0f));
head_pivot.addOrReplaceChild("tendril_r_r1", CubeListBuilder.create()
.mirror()
.addBox(-1.5f, -5.0f, 0.0f, 3.0f, 5.0f, 0.0f)
.texOffs(23, 0),
.texOffs(23, 0)
.addBox(-1.5f, -5.0f, 0.0f, 3.0f, 5.0f, 0.0f),
PartPose.offsetAndRotation(1.0f, -1.15f, -1.0f,
0.0f, 0.0f, 0.3927f));
head_pivot.addOrReplaceChild("tendril_r_r2", CubeListBuilder.create()
.addBox(-1.5f, -5.0f, 0.0f, 3.0f, 5.0f, 0.0f)
.texOffs(23, 0),
.texOffs(23, 0)
.addBox(-1.5f, -5.0f, 0.0f, 3.0f, 5.0f, 0.0f),
PartPose.offsetAndRotation(-1.0f, -1.15f, -1.0f,
0.0f, 0.0f, -0.3927f));
PartDefinition bb_main = modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create()
.addBox(-2.5f, -8.5f, -3.0f, 5.0f, 5.0f, 3.0f)
.texOffs(19, 19),
.texOffs(19, 19)
.addBox(-2.5f, -8.5f, -3.0f, 5.0f, 5.0f, 3.0f),
PartPose.offset(0.0f, 24.0f, 0.0f));
bb_main.addOrReplaceChild(PartNames.RIGHT_WING, CubeListBuilder.create()
.mirror()
.addBox(-7.0f, 0.0f, -3.0f, 9.0f, 0.0f, 5.0f)
.texOffs(0, 5),
.texOffs(0, 5)
.addBox(-7.0f, 0.0f, -3.0f, 9.0f, 0.0f, 5.0f),
PartPose.offsetAndRotation(-1.5f, -6.5f, 0.5f,
0.0f, 0.0f, 0.3927f));
bb_main.addOrReplaceChild(PartNames.LEFT_WING, CubeListBuilder.create()
.addBox(-2.0f, 0.0f, -3.0f, 9.0f, 0.0f, 5.0f)
.texOffs(0, 5),
.texOffs(0, 5)
.addBox(-2.0f, 0.0f, -3.0f, 9.0f, 0.0f, 5.0f),
PartPose.offsetAndRotation(1.5f, -6.5f, 0.5f,
0.0f, 0.0f, -0.3927f));
bb_main.addOrReplaceChild("abdomen_r1", CubeListBuilder.create()
.addBox(-3.0f, -4.0f, -1.0f, 4.0f, 4.0f, 7.0f)
.texOffs(0, 10),
.texOffs(0, 10)
.addBox(-3.0f, -4.0f, -1.0f, 4.0f, 4.0f, 7.0f),
PartPose.offsetAndRotation(1.0f, -3.9f, 0.0f,
-0.3927f, 0.0f, 0.0f));

View file

@ -22,7 +22,7 @@ public class RendererEntityEndSlime extends MobRenderer<EndSlimeEntity, EndSlime
private static final RenderType GLOW[] = new RenderType[4];
public RendererEntityEndSlime(EntityRendererProvider.Context ctx) {
super(ctx, new EndSlimeEntityModel<>(ctx.bakeLayer(EndEntitiesRenders.END_SLIME_MODEL)), 0.25f);
super(ctx, new EndSlimeEntityModel<>(ctx.getModelSet(), false), 0.25f);
this.addLayer(new OverlayFeatureRenderer<EndSlimeEntity>(this, ctx));
this.addLayer(new EyesLayer<EndSlimeEntity, EndSlimeEntityModel<EndSlimeEntity>>(this) {
@Override
@ -73,8 +73,8 @@ public class RendererEntityEndSlime extends MobRenderer<EndSlimeEntity, EndSlime
public OverlayFeatureRenderer(RenderLayerParent<T, EndSlimeEntityModel<T>> featureRendererContext, EntityRendererProvider.Context ctx) {
super(featureRendererContext);
modelOrdinal = new EndSlimeEntityModel<>(ctx.bakeLayer(EndEntitiesRenders.END_SLIME_SHELL_MODEL));
modelLake = new EndSlimeEntityModel<>(ctx.bakeLayer(EndEntitiesRenders.END_SLIME_SHELL_MODEL));
modelOrdinal = new EndSlimeEntityModel<>(ctx.getModelSet(), true);
modelLake = new EndSlimeEntityModel<>(ctx.getModelSet(), true);
}
public void render(PoseStack matrixStack, MultiBufferSource vertexConsumerProvider, int i, T livingEntity,

View file

@ -22,14 +22,14 @@ public class ArmoredElytraModel<T extends LivingEntity> extends AgeableListModel
MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot();
modelPartData.addOrReplaceChild(PartNames.LEFT_WING, CubeListBuilder.create()
.addBox(-10.0f, 0.0f, 0.0f, 10.0f, 20.0f, 2.0f)
.texOffs(22, 0),
.texOffs(22, 0)
.addBox(-10.0f, 0.0f, 0.0f, 10.0f, 20.0f, 2.0f),
PartPose.ZERO);
modelPartData.addOrReplaceChild(PartNames.RIGHT_WING, CubeListBuilder.create()
.mirror()
.addBox(0.0f, 0.0f, 0.0f, 10.0f, 20.0f, 2.0f)
.texOffs(22, 0),
.texOffs(22, 0)
.addBox(0.0f, 0.0f, 0.0f, 10.0f, 20.0f, 2.0f),
PartPose.ZERO);
return LayerDefinition.create(modelData, 48, 48);

View file

@ -22,16 +22,27 @@ public class CrystaliteBootsModel extends HumanoidModel<LivingEntity> {
final float scale = 1.0f;
MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot();
CubeDeformation deformation = new CubeDeformation(scale + 0.25f);
// TODO: see if we need to subclass HumanoidModel
// Humanoid model tries to retrieve all parts in it's constructor,
// so we need to add empty Nodes
modelPartData.addOrReplaceChild("head", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("hat", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("body", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("left_arm", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("right_leg", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("left_leg", CubeListBuilder.create(), PartPose.ZERO);
CubeDeformation deformation = new CubeDeformation(scale + 0.25f);
modelPartData.addOrReplaceChild("leftBoot", CubeListBuilder.create()
.addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation)
.texOffs(0, 32),
.texOffs(0, 32)
.addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation),
PartPose.offset(1.9f, 12.0f, 0.0f));
modelPartData.addOrReplaceChild("rightBoot", CubeListBuilder.create()
.addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation)
.texOffs(0, 16),
.texOffs(0, 16)
.addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation),
PartPose.offset(-1.9f, 12.0f, 0.0f));
return LayerDefinition.create(modelData, 64, 48);

View file

@ -33,35 +33,47 @@ public class CrystaliteChestplateModel extends HumanoidModel<LivingEntity> {
private static LayerDefinition getTexturedModelData(float scale, boolean thinArms) {
MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot();
// TODO: see if we need to subclass HumanoidModel
// Humanoid model tries to retrieve all parts in it's constructor,
// so we need to add empty Nodes
modelPartData.addOrReplaceChild("head", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("hat", CubeListBuilder.create(), PartPose.ZERO);
// modelPartData.addOrReplaceChild("body", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("left_arm", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("right_leg", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("left_leg", CubeListBuilder.create(), PartPose.ZERO);
CubeDeformation deformation = new CubeDeformation(scale + 0.25F);
PartDefinition body = modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create()
.addBox(-4.0f, 0.0f, -2.0f, 8.0f, 12.0f, 4.0f, deformation)
.texOffs(16, 16),
.texOffs(16, 16)
.addBox(-4.0f, 0.0f, -2.0f, 8.0f, 12.0f, 4.0f, deformation),
PartPose.ZERO);
if (thinArms) {
deformation = new CubeDeformation(scale + 0.45F);
PartDefinition leftShoulder = modelPartData.addOrReplaceChild("leftShoulder", CubeListBuilder.create()
.mirror()
.addBox(-1.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation)
.texOffs(40, 32),
.texOffs(40, 32)
.addBox(-1.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation),
PartPose.offset(5.0f, 2.0f, 0.0f));
PartDefinition rightShoulder = modelPartData.addOrReplaceChild("rightShoulder", CubeListBuilder.create()
.addBox(-3.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation)
.texOffs(40, 16),
.texOffs(40, 16)
.addBox(-3.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation),
PartPose.offset(-5.0f, 2.0f, 10.0f));
} else {
deformation = new CubeDeformation(scale + 0.45F);
PartDefinition leftShoulder = modelPartData.addOrReplaceChild("leftShoulder", CubeListBuilder.create()
.mirror()
.addBox(-1.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation)
.texOffs(40, 32),
.texOffs(40, 32)
.addBox(-1.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation),
PartPose.offset(5.0f, 2.0f, 0.0f));
PartDefinition rightShoulder = modelPartData.addOrReplaceChild("rightShoulder", CubeListBuilder.create()
.addBox(-3.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation)
.texOffs(40, 16),
.texOffs(40, 16)
.addBox(-3.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation),
PartPose.offset(-5.0f, 2.0f, 10.0f));
}
return LayerDefinition.create(modelData, 64, 48);

View file

@ -15,6 +15,7 @@ import net.minecraft.client.model.geom.builders.*;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.world.entity.LivingEntity;
import ru.betterend.registry.EndEntitiesRenders;
import shadow.fabric.impl.client.rendering.ArmorProviderExtensions;
@Environment(EnvType.CLIENT)
public class CrystaliteHelmetModel extends HumanoidModel<LivingEntity> {
@ -23,10 +24,22 @@ public class CrystaliteHelmetModel extends HumanoidModel<LivingEntity> {
final float scale = 1.0f;
MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot();
// TODO: see if we need to subclass HumanoidModel
// Humanoid model tries to retrieve all parts in it's constructor,
// so we need to add empty Nodes
modelPartData.addOrReplaceChild("head", CubeListBuilder.create(), PartPose.ZERO);
//modelPartData.addOrReplaceChild("hat", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("body", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("left_arm", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("right_leg", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("left_leg", CubeListBuilder.create(), PartPose.ZERO);
CubeDeformation deformation_hat = new CubeDeformation(scale + 0.5f);
PartDefinition hat = modelPartData.addOrReplaceChild(PartNames.HAT, CubeListBuilder.create()
.addBox(-4.0f, -8.0f, -4.0f, 8.0f, 8.0f, 8.0f, deformation_hat)
.texOffs(0, 0),
.texOffs(0, 0)
.addBox(-4.0f, -8.0f, -4.0f, 8.0f, 8.0f, 8.0f, deformation_hat),
PartPose.ZERO);
return LayerDefinition.create(modelData, 64, 48);

View file

@ -19,20 +19,32 @@ public class CrystaliteLeggingsModel extends HumanoidModel<LivingEntity> {
float scale = 1.0f;
MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot();
// TODO: see if we need to subclass HumanoidModel
// Humanoid model tries to retrieve all parts in it's constructor,
// so we need to add empty Nodes
modelPartData.addOrReplaceChild("head", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("hat", CubeListBuilder.create(), PartPose.ZERO);
// modelPartData.addOrReplaceChild("body", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.ZERO);
modelPartData.addOrReplaceChild("left_arm", CubeListBuilder.create(), PartPose.ZERO);
// modelPartData.addOrReplaceChild("right_leg", CubeListBuilder.create(), PartPose.ZERO);
// modelPartData.addOrReplaceChild("left_leg", CubeListBuilder.create(), PartPose.ZERO);
CubeDeformation deformation = new CubeDeformation(scale);
modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create()
.addBox(-4.0f, 0.0f, -2.0f, 8.0f, 12.0f, 4.0f, deformation)
.texOffs(16, 16),
.texOffs(16, 16)
.addBox(-4.0f, 0.0f, -2.0f, 8.0f, 12.0f, 4.0f, deformation),
PartPose.ZERO);
modelPartData.addOrReplaceChild(PartNames.LEFT_LEG, CubeListBuilder.create()
.addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation)
.texOffs(0, 32),
.texOffs(0, 32)
.addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation),
PartPose.offset(1.9f, 12.0f, 0.0f));
modelPartData.addOrReplaceChild(PartNames.RIGHT_LEG, CubeListBuilder.create()
.addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation)
.texOffs(0, 16),
.texOffs(0, 16)
.addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation),
PartPose.offset(-1.9f, 12.0f, 0.0f));
return LayerDefinition.create(modelData, 64, 48);