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

@ -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,62 +64,62 @@ 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));

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);