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 += "PartDefinition " + name + " = ";
s += pName+".addOrReplaceChild(\""+name+"\", CubeListBuilder.create()\n"; s += pName+".addOrReplaceChild(\""+name+"\", CubeListBuilder.create()\n";
if (this.mirror) s+= ".mirror()\n"; if (this.mirror) s+= ".mirror()\n";
s+= ".texOffs("+u+", "+v+")";
if (this.hadBox) { if (this.hadBox) {
s+= "\n";
if (scale!=1) 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 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){ if (x==0 && y==0 && z==0 && rx==0 && ry==0 && rz==0){
s+= "PartPose.ZERO"; s+= "PartPose.ZERO";
} else if (rx==0 && ry==0 && rz==0){ } else if (rx==0 && ry==0 && rz==0){
@ -144,13 +148,33 @@ public class Convert {
p.setRotationAngle(x, y, z); p.setRotationAngle(x, y, z);
} }
public void c (){ public void c (){
float scale = 0; float scale = 1;
ModelPart[] SHARDS = new ModelPart[4]; ModelPart partC = new ModelPart(64, 64, 0, 19, "partC");
SHARDS[0] = new ModelPart(16, 16, 2, 4, "SHARDS[0]").addBox(-5.0F, 1.0F, -3.0F, 2.0F, 8.0F, 2.0F); partC.addBox(1.0F, 0.0F, 1.0F, 14.0F, 9.0F, 14.0F, 0.0F);
SHARDS[1] = new ModelPart(16, 16, 2, 4, "SHARDS[1]").addBox(3.0F, -1.0F, -1.0F, 2.0F, 8.0F, 2.0F); ModelPart partA = new ModelPart(64, 64, 0, 0,"partA");
SHARDS[2] = new ModelPart(16, 16, 2, 4, "SHARDS[2]").addBox(-1.0F, 0.0F, -5.0F, 2.0F, 4.0F, 2.0F); partA.addBox(1.0F, 0.0F, 0.0F, 14.0F, 5.0F, 14.0F, 0.0F);
SHARDS[3] = new ModelPart(16, 16, 2, 4, "SHARDS[3]").addBox(0.0F, 3.0F, 4.0F, 2.0F, 6.0F, 2.0F); partA.y = 9.0F;
ModelPart CORE = new ModelPart(16, 16, 0, 0, "CORE"); partA.z = 1.0F;
CORE.addBox(-2.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.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(); MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot(); PartDefinition modelPartData = modelData.getRoot();
modelPartData.addOrReplaceChild("FRAME", CubeListBuilder.create() 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); PartPose.ZERO);
modelPartData.addOrReplaceChild("CORE", CubeListBuilder.create() 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); PartPose.ZERO);
return LayerDefinition.create(modelData, 64, 32); return LayerDefinition.create(modelData, 64, 32);

View file

@ -66,28 +66,28 @@ public class EternalCrystalRenderer {
MeshDefinition modelData = new MeshDefinition(); MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot(); PartDefinition modelPartData = modelData.getRoot();
modelPartData.addOrReplaceChild("SHARDS_0", CubeListBuilder.create() 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); PartPose.ZERO);
modelPartData.addOrReplaceChild("SHARDS_1", CubeListBuilder.create() 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); PartPose.ZERO);
modelPartData.addOrReplaceChild("SHARDS_2", CubeListBuilder.create() 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); PartPose.ZERO);
modelPartData.addOrReplaceChild("SHARDS_3", CubeListBuilder.create() 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); PartPose.ZERO);
modelPartData.addOrReplaceChild("CORE", CubeListBuilder.create() 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); PartPose.ZERO);
return LayerDefinition.create(modelData, 16, 16); return LayerDefinition.create(modelData, 16, 16);

View file

@ -122,7 +122,7 @@ public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
scaleY = sin * 0.1F + 0.9F; scaleY = sin * 0.1F + 0.9F;
scaleXZ = Mth.sin(animationProgress * 0.13F + 3.14F) * 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; 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 com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.model.ListModel; 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.ModelPart;
import net.minecraft.client.model.geom.PartNames; import net.minecraft.client.model.geom.PartNames;
import net.minecraft.client.model.geom.PartPose; 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 net.minecraft.client.renderer.RenderType;
import ru.bclib.util.MHelper; import ru.bclib.util.MHelper;
import ru.betterend.entity.EndSlimeEntity; import ru.betterend.entity.EndSlimeEntity;
import ru.betterend.registry.EndEntitiesRenders;
public class EndSlimeEntityModel<T extends EndSlimeEntity> extends ListModel<T> { public class EndSlimeEntityModel<T extends EndSlimeEntity> extends ListModel<T> {
private final ModelPart innerCube; private final ModelPart innerCube;
@ -120,9 +123,11 @@ public class EndSlimeEntityModel<T extends EndSlimeEntity> extends ListModel<T>
return LayerDefinition.create(modelData, 64, 32); return LayerDefinition.create(modelData, 64, 32);
} }
public EndSlimeEntityModel(ModelPart modelPart, boolean onlyShell) { public EndSlimeEntityModel(EntityModelSet modelSet, boolean onlyShell){
super(RenderType::entityCutout); super(RenderType::entityCutout);
ModelPart modelPart = modelSet.bakeLayer(onlyShell ? EndEntitiesRenders.END_SLIME_SHELL_MODEL : EndEntitiesRenders.END_SLIME_MODEL);
innerCube = modelPart.getChild(PartNames.BODY); innerCube = modelPart.getChild(PartNames.BODY);
if (!onlyShell) { if (!onlyShell) {
rightEye = modelPart.getChild(PartNames.RIGHT_EYE); rightEye = modelPart.getChild(PartNames.RIGHT_EYE);

View file

@ -15,25 +15,25 @@ import net.minecraft.util.Mth;
import ru.betterend.entity.SilkMothEntity; import ru.betterend.entity.SilkMothEntity;
public class SilkMothEntityModel extends BlockBenchModel<SilkMothEntity> { public class SilkMothEntityModel extends BlockBenchModel<SilkMothEntity> {
private final ModelPart legsL; private final ModelPart legsL;
private final ModelPart cube_r1; private final ModelPart cube_r1;
private final ModelPart cube_r2; private final ModelPart cube_r2;
private final ModelPart cube_r3; private final ModelPart cube_r3;
private final ModelPart legsR; private final ModelPart legsR;
private final ModelPart cube_r4; private final ModelPart cube_r4;
private final ModelPart cube_r5; private final ModelPart cube_r5;
private final ModelPart cube_r6; private final ModelPart cube_r6;
private final ModelPart head_pivot; private final ModelPart head_pivot;
private final ModelPart tendril_r_r1; private final ModelPart tendril_r_r1;
private final ModelPart tendril_r_r2; private final ModelPart tendril_r_r2;
private final ModelPart bb_main; private final ModelPart bb_main;
private final ModelPart wingR_r1; private final ModelPart wingR_r1;
private final ModelPart wingL_r1; private final ModelPart wingL_r1;
private final ModelPart abdomen_r1; private final ModelPart abdomen_r1;
public static LayerDefinition getTexturedModelData() { public static LayerDefinition getTexturedModelData() {
MeshDefinition modelData = new MeshDefinition(); MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot(); PartDefinition modelPartData = modelData.getRoot();
PartDefinition legsL = modelPartData.addOrReplaceChild(PartNames.LEFT_LEG, CubeListBuilder.create() PartDefinition legsL = modelPartData.addOrReplaceChild(PartNames.LEFT_LEG, CubeListBuilder.create()
.texOffs(0, 0), .texOffs(0, 0),
@ -41,20 +41,20 @@ public class SilkMothEntityModel extends BlockBenchModel<SilkMothEntity> {
0.0f, 0.0f, 0.6981f)); 0.0f, 0.0f, 0.6981f));
legsL.addOrReplaceChild("cube_r1", CubeListBuilder.create() 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, PartPose.offsetAndRotation(0.0f, 0.0f, -1.0f,
0.0f, 0.2182f, 0.3927f)); 0.0f, 0.2182f, 0.3927f));
legsL.addOrReplaceChild("cube_r2", CubeListBuilder.create() 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, PartPose.offsetAndRotation(0.5f, 0.1f, -0.05f,
0.0f, 0.0f, 0.3927f)); 0.0f, 0.0f, 0.3927f));
legsL.addOrReplaceChild("cube_r3", CubeListBuilder.create() 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, PartPose.offsetAndRotation(0.0f, 0.0f, 0.9f,
0.0f, -0.2182f, 0.3927f)); 0.0f, -0.2182f, 0.3927f));
@ -64,72 +64,72 @@ public class SilkMothEntityModel extends BlockBenchModel<SilkMothEntity> {
0.0f, 3.1416f, -0.6545f)); 0.0f, 3.1416f, -0.6545f));
legsR.addOrReplaceChild("cube_r4", CubeListBuilder.create() 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, PartPose.offsetAndRotation(0.0f, 0.0f, -1.0f,
0.0f, 0.2182f, 0.3927f)); 0.0f, 0.2182f, 0.3927f));
legsR.addOrReplaceChild("cube_r5", CubeListBuilder.create() 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, PartPose.offsetAndRotation(0.5f, 0.1f, -0.05f,
0.0f, 0.0f, 0.3927f)); 0.0f, 0.0f, 0.3927f));
legsR.addOrReplaceChild("cube_r6", CubeListBuilder.create() 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, PartPose.offsetAndRotation(0.0f, 0.0f, 0.9f,
0.0f, -0.2182f, 0.3927f)); 0.0f, -0.2182f, 0.3927f));
PartDefinition head_pivot = modelPartData.addOrReplaceChild(PartNames.HEAD, CubeListBuilder.create() 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)); PartPose.offset(0.0f, 18.0f, -3.0f));
head_pivot.addOrReplaceChild("tendril_r_r1", CubeListBuilder.create() head_pivot.addOrReplaceChild("tendril_r_r1", CubeListBuilder.create()
.mirror() .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, PartPose.offsetAndRotation(1.0f, -1.15f, -1.0f,
0.0f, 0.0f, 0.3927f)); 0.0f, 0.0f, 0.3927f));
head_pivot.addOrReplaceChild("tendril_r_r2", CubeListBuilder.create() 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, PartPose.offsetAndRotation(-1.0f, -1.15f, -1.0f,
0.0f, 0.0f, -0.3927f)); 0.0f, 0.0f, -0.3927f));
PartDefinition bb_main = modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create() 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)); PartPose.offset(0.0f, 24.0f, 0.0f));
bb_main.addOrReplaceChild(PartNames.RIGHT_WING, CubeListBuilder.create() bb_main.addOrReplaceChild(PartNames.RIGHT_WING, CubeListBuilder.create()
.mirror() .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, PartPose.offsetAndRotation(-1.5f, -6.5f, 0.5f,
0.0f, 0.0f, 0.3927f)); 0.0f, 0.0f, 0.3927f));
bb_main.addOrReplaceChild(PartNames.LEFT_WING, CubeListBuilder.create() 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, PartPose.offsetAndRotation(1.5f, -6.5f, 0.5f,
0.0f, 0.0f, -0.3927f)); 0.0f, 0.0f, -0.3927f));
bb_main.addOrReplaceChild("abdomen_r1", CubeListBuilder.create() 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, PartPose.offsetAndRotation(1.0f, -3.9f, 0.0f,
-0.3927f, 0.0f, 0.0f)); -0.3927f, 0.0f, 0.0f));
/*texWidth = 64; /*texWidth = 64;
texHeight = 64;*/ texHeight = 64;*/
return LayerDefinition.create(modelData, 64, 64); return LayerDefinition.create(modelData, 64, 64);
} }
public SilkMothEntityModel(ModelPart modelPart) { public SilkMothEntityModel(ModelPart modelPart) {
super(RenderType::entityCutout); super(RenderType::entityCutout);
legsL = modelPart.getChild(PartNames.LEFT_LEG); legsL = modelPart.getChild(PartNames.LEFT_LEG);
cube_r1 = legsL.getChild("cube_r1"); cube_r1 = legsL.getChild("cube_r1");
@ -228,27 +228,27 @@ public class SilkMothEntityModel extends BlockBenchModel<SilkMothEntity> {
bb_main.addChild(abdomen_r1); bb_main.addChild(abdomen_r1);
setRotationAngle(abdomen_r1, -0.3927F, 0.0F, 0.0F); setRotationAngle(abdomen_r1, -0.3927F, 0.0F, 0.0F);
abdomen_r1.texOffs(0, 10).addBox(-3.0F, -4.0F, -1.0F, 4.0F, 4.0F, 7.0F, 0.0F);*/ abdomen_r1.texOffs(0, 10).addBox(-3.0F, -4.0F, -1.0F, 4.0F, 4.0F, 7.0F, 0.0F);*/
} }
@Override @Override
public void setupAnim(SilkMothEntity entity, float limbAngle, float limbDistance, float animationProgress, public void setupAnim(SilkMothEntity entity, float limbAngle, float limbDistance, float animationProgress,
float headYaw, float headPitch) { float headYaw, float headPitch) {
wingR_r1.zRot = Mth.sin(animationProgress * 2F) * 0.4F + 0.3927F; wingR_r1.zRot = Mth.sin(animationProgress * 2F) * 0.4F + 0.3927F;
wingL_r1.zRot = -wingR_r1.zRot; wingL_r1.zRot = -wingR_r1.zRot;
head_pivot.xRot = Mth.sin(animationProgress * 0.03F) * 0.1F; head_pivot.xRot = Mth.sin(animationProgress * 0.03F) * 0.1F;
tendril_r_r1.zRot = Mth.sin(animationProgress * 0.07F) * 0.2F + 0.3927F; tendril_r_r1.zRot = Mth.sin(animationProgress * 0.07F) * 0.2F + 0.3927F;
tendril_r_r2.zRot = -tendril_r_r1.zRot; tendril_r_r2.zRot = -tendril_r_r1.zRot;
abdomen_r1.xRot = Mth.sin(animationProgress * 0.05F) * 0.1F - 0.3927F; abdomen_r1.xRot = Mth.sin(animationProgress * 0.05F) * 0.1F - 0.3927F;
legsR.zRot = Mth.sin(animationProgress * 0.07F) * 0.1F - 0.6545F; legsR.zRot = Mth.sin(animationProgress * 0.07F) * 0.1F - 0.6545F;
legsL.zRot = -legsR.zRot; legsL.zRot = -legsR.zRot;
} }
@Override @Override
public void renderToBuffer(PoseStack matrices, VertexConsumer vertices, int light, int overlay, float red, public void renderToBuffer(PoseStack matrices, VertexConsumer vertices, int light, int overlay, float red,
float green, float blue, float alpha) { float green, float blue, float alpha) {
bb_main.render(matrices, vertices, light, overlay); bb_main.render(matrices, vertices, light, overlay);
head_pivot.render(matrices, vertices, light, overlay); head_pivot.render(matrices, vertices, light, overlay);
legsL.render(matrices, vertices, light, overlay); legsL.render(matrices, vertices, light, overlay);
legsR.render(matrices, vertices, light, overlay); legsR.render(matrices, vertices, light, overlay);
} }
} }

View file

@ -22,7 +22,7 @@ public class RendererEntityEndSlime extends MobRenderer<EndSlimeEntity, EndSlime
private static final RenderType GLOW[] = new RenderType[4]; private static final RenderType GLOW[] = new RenderType[4];
public RendererEntityEndSlime(EntityRendererProvider.Context ctx) { 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 OverlayFeatureRenderer<EndSlimeEntity>(this, ctx));
this.addLayer(new EyesLayer<EndSlimeEntity, EndSlimeEntityModel<EndSlimeEntity>>(this) { this.addLayer(new EyesLayer<EndSlimeEntity, EndSlimeEntityModel<EndSlimeEntity>>(this) {
@Override @Override
@ -73,8 +73,8 @@ public class RendererEntityEndSlime extends MobRenderer<EndSlimeEntity, EndSlime
public OverlayFeatureRenderer(RenderLayerParent<T, EndSlimeEntityModel<T>> featureRendererContext, EntityRendererProvider.Context ctx) { public OverlayFeatureRenderer(RenderLayerParent<T, EndSlimeEntityModel<T>> featureRendererContext, EntityRendererProvider.Context ctx) {
super(featureRendererContext); super(featureRendererContext);
modelOrdinal = new EndSlimeEntityModel<>(ctx.bakeLayer(EndEntitiesRenders.END_SLIME_SHELL_MODEL)); modelOrdinal = new EndSlimeEntityModel<>(ctx.getModelSet(), true);
modelLake = new EndSlimeEntityModel<>(ctx.bakeLayer(EndEntitiesRenders.END_SLIME_SHELL_MODEL)); modelLake = new EndSlimeEntityModel<>(ctx.getModelSet(), true);
} }
public void render(PoseStack matrixStack, MultiBufferSource vertexConsumerProvider, int i, T livingEntity, 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(); MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot(); PartDefinition modelPartData = modelData.getRoot();
modelPartData.addOrReplaceChild(PartNames.LEFT_WING, CubeListBuilder.create() 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); PartPose.ZERO);
modelPartData.addOrReplaceChild(PartNames.RIGHT_WING, CubeListBuilder.create() modelPartData.addOrReplaceChild(PartNames.RIGHT_WING, CubeListBuilder.create()
.mirror() .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); PartPose.ZERO);
return LayerDefinition.create(modelData, 48, 48); return LayerDefinition.create(modelData, 48, 48);

View file

@ -22,16 +22,27 @@ public class CrystaliteBootsModel extends HumanoidModel<LivingEntity> {
final float scale = 1.0f; final float scale = 1.0f;
MeshDefinition modelData = new MeshDefinition(); MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot(); 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() 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)); PartPose.offset(1.9f, 12.0f, 0.0f));
modelPartData.addOrReplaceChild("rightBoot", CubeListBuilder.create() 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)); PartPose.offset(-1.9f, 12.0f, 0.0f));
return LayerDefinition.create(modelData, 64, 48); 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) { private static LayerDefinition getTexturedModelData(float scale, boolean thinArms) {
MeshDefinition modelData = new MeshDefinition(); MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot(); 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); CubeDeformation deformation = new CubeDeformation(scale + 0.25F);
PartDefinition body = modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create() 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); PartPose.ZERO);
if (thinArms) { if (thinArms) {
deformation = new CubeDeformation(scale + 0.45F); deformation = new CubeDeformation(scale + 0.45F);
PartDefinition leftShoulder = modelPartData.addOrReplaceChild("leftShoulder", CubeListBuilder.create() PartDefinition leftShoulder = modelPartData.addOrReplaceChild("leftShoulder", CubeListBuilder.create()
.mirror() .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)); PartPose.offset(5.0f, 2.0f, 0.0f));
PartDefinition rightShoulder = modelPartData.addOrReplaceChild("rightShoulder", CubeListBuilder.create() 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)); PartPose.offset(-5.0f, 2.0f, 10.0f));
} else { } else {
deformation = new CubeDeformation(scale + 0.45F); deformation = new CubeDeformation(scale + 0.45F);
PartDefinition leftShoulder = modelPartData.addOrReplaceChild("leftShoulder", CubeListBuilder.create() PartDefinition leftShoulder = modelPartData.addOrReplaceChild("leftShoulder", CubeListBuilder.create()
.mirror() .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)); PartPose.offset(5.0f, 2.0f, 0.0f));
PartDefinition rightShoulder = modelPartData.addOrReplaceChild("rightShoulder", CubeListBuilder.create() 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)); PartPose.offset(-5.0f, 2.0f, 10.0f));
} }
return LayerDefinition.create(modelData, 64, 48); 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.client.renderer.RenderType;
import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.LivingEntity;
import ru.betterend.registry.EndEntitiesRenders; import ru.betterend.registry.EndEntitiesRenders;
import shadow.fabric.impl.client.rendering.ArmorProviderExtensions;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public class CrystaliteHelmetModel extends HumanoidModel<LivingEntity> { public class CrystaliteHelmetModel extends HumanoidModel<LivingEntity> {
@ -23,10 +24,22 @@ public class CrystaliteHelmetModel extends HumanoidModel<LivingEntity> {
final float scale = 1.0f; final float scale = 1.0f;
MeshDefinition modelData = new MeshDefinition(); MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot(); 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); CubeDeformation deformation_hat = new CubeDeformation(scale + 0.5f);
PartDefinition hat = modelPartData.addOrReplaceChild(PartNames.HAT, CubeListBuilder.create() 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); PartPose.ZERO);
return LayerDefinition.create(modelData, 64, 48); return LayerDefinition.create(modelData, 64, 48);

View file

@ -19,20 +19,32 @@ public class CrystaliteLeggingsModel extends HumanoidModel<LivingEntity> {
float scale = 1.0f; float scale = 1.0f;
MeshDefinition modelData = new MeshDefinition(); MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot(); 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); CubeDeformation deformation = new CubeDeformation(scale);
modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create() 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); PartPose.ZERO);
modelPartData.addOrReplaceChild(PartNames.LEFT_LEG, CubeListBuilder.create() 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)); PartPose.offset(1.9f, 12.0f, 0.0f));
modelPartData.addOrReplaceChild(PartNames.RIGHT_LEG, CubeListBuilder.create() 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)); PartPose.offset(-1.9f, 12.0f, 0.0f));
return LayerDefinition.create(modelData, 64, 48); return LayerDefinition.create(modelData, 64, 48);