Fixed Cloak Renderer

This commit is contained in:
2026-04-08 20:04:00 +02:00
parent 88db7a8383
commit b39b19f107
@@ -119,13 +119,10 @@ public class CloakFeatureRenderer extends FeatureRenderer<PlayerEntityRenderStat
n.x(), n.y(), n.z()); n.x(), n.y(), n.z());
} }
private void renderCapeQuad(VertexConsumer vertexConsumer, MatrixStack matrixStack, private void renderCapeQuad(VertexConsumer vertexConsumer, MatrixStack.Entry entry,
Vec3d bottomLeft, Vec3d bottomRight, Vec3d topRight, Vec3d topLeft, Vec3d bottomLeft, Vec3d bottomRight, Vec3d topRight, Vec3d topLeft,
float u1, float v1, float u2, float v2, int light, int overlay, float u1, float v1, float u2, float v2, int light, int overlay,
float normalX, float normalY, float normalZ, boolean flipWinding) { float normalX, float normalY, float normalZ, boolean flipWinding) {
MatrixStack.Entry entry = matrixStack.peek();
// Extract matrix (you must transform positions manually now) // Extract matrix (you must transform positions manually now)
Matrix4f pos = entry.getPositionMatrix(); Matrix4f pos = entry.getPositionMatrix();
Matrix3f normalMat = entry.getNormalMatrix(); Matrix3f normalMat = entry.getNormalMatrix();
@@ -151,8 +148,8 @@ public class CloakFeatureRenderer extends FeatureRenderer<PlayerEntityRenderStat
} }
} }
private void renderCape(MatrixStack matrixStack, VertexConsumer vertexConsumer, PlayerEntityRenderState playerState, private void renderCape(MatrixStack.Entry entry, VertexConsumer vertexConsumer,
int light, int overlay) { PlayerEntityRenderState playerState, int light, int overlay) {
float capeWidth = 10.0f / 16.0f; float capeWidth = 10.0f / 16.0f;
float capeHeight = 16.0f / 16.0f; float capeHeight = 16.0f / 16.0f;
float capeDepth = 1.0f / 16.0f; float capeDepth = 1.0f / 16.0f;
@@ -226,39 +223,39 @@ public class CloakFeatureRenderer extends FeatureRenderer<PlayerEntityRenderStat
Vec3d outerBotRight = new Vec3d(x1, nextY - thickYEnd, nextZ - thickZEnd); Vec3d outerBotRight = new Vec3d(x1, nextY - thickYEnd, nextZ - thickZEnd);
// FRONT (facing camera) // FRONT (facing camera)
this.renderCapeQuad(vertexConsumer, matrixStack, this.renderCapeQuad(vertexConsumer, entry,
outerBotRight, outerBotLeft, outerTopLeft, outerTopRight, outerBotRight, outerBotLeft, outerTopLeft, outerTopRight,
frontU2, frontV1 + (frontPartV * i), frontU1, frontV1 + (frontPartV * (i + 1)), frontU2, frontV1 + (frontPartV * i), frontU1, frontV1 + (frontPartV * (i + 1)),
light, overlay, 0, 0, 1, false); light, overlay, 0, 0, 1, false);
// BACK (Facing player) // BACK (Facing player)
this.renderCapeQuad(vertexConsumer, matrixStack, this.renderCapeQuad(vertexConsumer, entry,
innerBotLeft, innerBotRight, innerTopRight, innerTopLeft, innerBotLeft, innerBotRight, innerTopRight, innerTopLeft,
backU2, backV1 + (backPartV * i), backU1, backV1 + (backPartV * (i + 1)), backU2, backV1 + (backPartV * i), backU1, backV1 + (backPartV * (i + 1)),
light, overlay, 0, 0, -1, false); light, overlay, 0, 0, -1, false);
// LEFT EDGE // LEFT EDGE
this.renderCapeQuad(vertexConsumer, matrixStack, this.renderCapeQuad(vertexConsumer, entry,
innerBotLeft, outerBotLeft, outerTopLeft, innerTopLeft, innerBotLeft, outerBotLeft, outerTopLeft, innerTopLeft,
leftU1, leftV1 + (leftPartV * i), leftU2, leftV1 + (leftPartV * (i + 1)), leftU1, leftV1 + (leftPartV * i), leftU2, leftV1 + (leftPartV * (i + 1)),
light, overlay, 1, 0, 0, false); light, overlay, 1, 0, 0, false);
// RIGHT EDGE // RIGHT EDGE
this.renderCapeQuad(vertexConsumer, matrixStack, this.renderCapeQuad(vertexConsumer, entry,
outerBotRight, innerBotRight, innerTopRight, outerTopRight, outerBotRight, innerBotRight, innerTopRight, outerTopRight,
rightU1, rightV1 + (rightPartV * i), rightU2, rightV1 + (rightPartV * (i + 1)), rightU1, rightV1 + (rightPartV * i), rightU2, rightV1 + (rightPartV * (i + 1)),
light, overlay, -1, 0, 0, false); light, overlay, -1, 0, 0, false);
// TOP FACE (Only on first segment) // TOP FACE (Only on first segment)
if (i == 0) { if (i == 0) {
this.renderCapeQuad(vertexConsumer, matrixStack, this.renderCapeQuad(vertexConsumer, entry,
outerTopLeft, outerTopRight, innerTopRight, innerTopLeft, outerTopLeft, outerTopRight, innerTopRight, innerTopLeft,
topU1, topV1, topU2, topV2, light, overlay, 0, 1, 0, false); topU1, topV1, topU2, topV2, light, overlay, 0, 1, 0, false);
} }
// BOTTOM FACE (Only on last segment) // BOTTOM FACE (Only on last segment)
if (i == PARTS - 1) { if (i == PARTS - 1) {
this.renderCapeQuad(vertexConsumer, matrixStack, this.renderCapeQuad(vertexConsumer, entry,
innerBotLeft, innerBotRight, outerBotRight, outerBotLeft, innerBotLeft, innerBotRight, outerBotRight, outerBotLeft,
bottomU1, bottomV1, bottomU2, bottomV2, light, overlay, 0, -1, 0, false); bottomU1, bottomV1, bottomU2, bottomV2, light, overlay, 0, -1, 0, false);
} }
@@ -291,8 +288,6 @@ public class CloakFeatureRenderer extends FeatureRenderer<PlayerEntityRenderStat
SaturnPlayer player = state.getData(SaturnRenderState.saturnDataKey); SaturnPlayer player = state.getData(SaturnRenderState.saturnDataKey);
player = null;
if (player == null) { if (player == null) {
return; return;
} }
@@ -342,7 +337,7 @@ public class CloakFeatureRenderer extends FeatureRenderer<PlayerEntityRenderStat
final int l = light; final int l = light;
queue.submitCustom(matrices, ShaderUtils.getRenderLayer(customCape), (entry, vertexConsumer) -> { queue.submitCustom(matrices, ShaderUtils.getRenderLayer(customCape), (entry, vertexConsumer) -> {
renderCape(matrices, vertexConsumer, state, l, OverlayTexture.DEFAULT_UV); renderCape(entry, vertexConsumer, state, l, OverlayTexture.DEFAULT_UV);
}); });
matrices.pop(); matrices.pop();