From bb959991123c78903a21d6d113745d3a5d49563f Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Wed, 25 Feb 2026 04:34:57 +0100 Subject: [PATCH] Implementing cape curving --- .../cosmetics/CloakFeatureRenderer.java | 307 ++++-------------- 1 file changed, 63 insertions(+), 244 deletions(-) diff --git a/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java b/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java index 6dc23bd..b52aaa5 100644 --- a/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java +++ b/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java @@ -1,28 +1,19 @@ package org.saturnclient.saturnclient.cosmetics; import org.saturnclient.saturnclient.client.player.SaturnPlayer; -import org.saturnclient.saturnclient.config.Config; import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.entity.equipment.EquipmentModel; import net.minecraft.client.render.entity.equipment.EquipmentModelLoader; -import net.minecraft.client.render.entity.equipment.EquipmentModel.LayerType; import net.minecraft.client.render.entity.feature.FeatureRenderer; import net.minecraft.client.render.entity.feature.FeatureRendererContext; import net.minecraft.client.render.entity.model.PlayerEntityModel; import net.minecraft.client.render.entity.state.PlayerEntityRenderState; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.EquippableComponent; -import net.minecraft.item.ItemStack; -import net.minecraft.item.equipment.EquipmentAsset; -import net.minecraft.registry.RegistryKey; import net.minecraft.util.Identifier; -import net.minecraft.util.math.RotationAxis; import net.minecraft.util.math.Vec3d; /** @@ -35,44 +26,6 @@ import net.minecraft.util.math.Vec3d; public class CloakFeatureRenderer extends FeatureRenderer { private final EquipmentModelLoader equipmentModelLoader; private static final int PARTS = 16; - private float currentVelocity = 0.0f; - - private static final float TEX_W = 176f; - private static final float TEX_H = 138f; - - private static final class PxRect { - final int x, y, w, h; - - PxRect(int x, int y, int w, int h) { - this.x = x; - this.y = y; - this.w = w; - this.h = h; - } - - float u1() { - return x / TEX_W; - } - - float v1() { - return y / TEX_H; - } - - float u2() { - return (x + w) / TEX_W; - } - - float v2() { - return (y + h) / TEX_H; - } - } - - private static final PxRect FRONT_RECT = new PxRect(8, 8, 80, 128); - private static final PxRect BACK_RECT = new PxRect(96, 8, 80, 128); - private static final PxRect LEFT_EDGE_RECT = new PxRect(0, 8, 8, 128); - private static final PxRect RIGHT_EDGE_RECT = new PxRect(88, 8, 8, 128); - private static final PxRect TOP_RECT = new PxRect(8, 0, 80, 8); - private static final PxRect BOTTOM_RECT = new PxRect(88, 0, 80, 8); public CloakFeatureRenderer(FeatureRendererContext context, EquipmentModelLoader equipmentModelLoader) { @@ -80,18 +33,6 @@ public class CloakFeatureRenderer extends FeatureRenderer) equippableComponent.assetId().get()); - return !equipmentModel.getLayers(layerType).isEmpty(); - } else { - return false; - } - } - private void renderCapeQuad(VertexConsumer vertexConsumer, MatrixStack matrixStack, Vec3d bottomLeft, Vec3d bottomRight, Vec3d topRight, Vec3d topLeft, float u1, float v1, float u2, float v2, int light, int overlay, @@ -137,215 +78,93 @@ public class CloakFeatureRenderer extends FeatureRenderer> 4) & 0xF; - int skyLight = (light >> 20) & 0xF; - blockLight = Math.max(blockLight, minBrightness); - skyLight = Math.max(skyLight, minBrightness); - light = (skyLight << 20) | (blockLight << 4); + VertexConsumer consumer = providers.getBuffer(RenderLayer.getEntityTranslucent(cape)); - matrixStack.push(); - VertexConsumer vertexConsumer = vertexConsumerProvider - .getBuffer(RenderLayer.getEntityAlpha(customCape)); - - float targetVelocity = ((6.0F + playerEntityRenderState.field_53537 / 2.0F - + playerEntityRenderState.field_53536) * 0.02f); - targetVelocity = Math.max(0.0f, targetVelocity - 0.1f); - - float accelerationRate = 0.02f; - this.currentVelocity = this.currentVelocity - + (targetVelocity - this.currentVelocity) * accelerationRate; - - float rotation = this.currentVelocity * 72.0f; - float curve = this.currentVelocity * 0.4f; - - if (playerEntityRenderState.sneaking && playerEntityRenderState.isInSneakingPose) { - matrixStack.translate(0, 0.24f, 0); - matrixStack.multiply(RotationAxis.POSITIVE_X.rotationDegrees(27.0f)); - curve += 0.2f; - } - - matrixStack.translate(0.0f, -0.25f, 0.0f); - if (this.hasCustomModelForLayer(playerEntityRenderState.equippedChestStack, - LayerType.HUMANOID)) { - matrixStack.translate(0.0F, -0.053125F, 0.06875F); - } - - if (playerEntityRenderState.isSwimming) { - curve = 0.0f; - rotation = 0.0f; - } - - if (!Config.bendyCloaks.value) { - curve = 0.0f; - } - - renderCape(matrixStack, vertexConsumer, playerEntityRenderState, light, - OverlayTexture.DEFAULT_UV, Math.min(rotation, 60.0f), Math.min(curve, 0.5f)); - - matrixStack.pop(); + renderCape( + matrices, + consumer, + state, + light, + OverlayTexture.DEFAULT_UV); } }