From 4d88961f0b0936ab9d591803a68ea35a7078e079 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sat, 1 Mar 2025 16:11:36 +0100 Subject: [PATCH] name tags --- .../auraclient/auraclient/auth/AuraApi.java | 2 +- .../AbstractClientPlayerEntityMixin.java | 3 +- .../auraclient/mixin/EntityRendererMixin.java | 124 ++++++++++++++++++ src/main/resources/assets/auraclient/icon.png | Bin 3838 -> 12828 bytes .../textures/{capes => cloaks}/glitch.gif | Bin .../assets/auraclient/textures/player.png | Bin 0 -> 9940 bytes src/main/resources/auraclient.mixins.json | 2 +- 7 files changed, 128 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/auraclient/auraclient/mixin/EntityRendererMixin.java rename src/main/resources/assets/auraclient/textures/{capes => cloaks}/glitch.gif (100%) create mode 100644 src/main/resources/assets/auraclient/textures/player.png diff --git a/src/main/java/org/auraclient/auraclient/auth/AuraApi.java b/src/main/java/org/auraclient/auraclient/auth/AuraApi.java index 7a2b978..2921468 100644 --- a/src/main/java/org/auraclient/auraclient/auth/AuraApi.java +++ b/src/main/java/org/auraclient/auraclient/auth/AuraApi.java @@ -50,7 +50,7 @@ public class AuraApi { JsonObject jsonResponse = JsonParser.parseString(response.toString()).getAsJsonObject(); boolean success = jsonResponse.get("success").getAsBoolean(); - uuid = jsonResponse.get("uuid").getAsString(); + uuid = jsonResponse.get("uuid").getAsString().replace("-", ""); if (success) { AuraClient.LOGGER.info("Successfully authenticated"); diff --git a/src/main/java/org/auraclient/auraclient/mixin/AbstractClientPlayerEntityMixin.java b/src/main/java/org/auraclient/auraclient/mixin/AbstractClientPlayerEntityMixin.java index 7ea92d2..6d8550a 100644 --- a/src/main/java/org/auraclient/auraclient/mixin/AbstractClientPlayerEntityMixin.java +++ b/src/main/java/org/auraclient/auraclient/mixin/AbstractClientPlayerEntityMixin.java @@ -5,6 +5,7 @@ import net.fabricmc.api.Environment; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.util.SkinTextures; import net.minecraft.util.Identifier; + import org.auraclient.auraclient.cloaks.Cloaks; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -24,7 +25,7 @@ public abstract class AbstractClientPlayerEntityMixin { @Inject(method = "getSkinTextures", at = @At("RETURN"), cancellable = true) private void injectCustomTextures(CallbackInfoReturnable cir) { AbstractClientPlayerEntity player = (AbstractClientPlayerEntity) (Object) this; - String uuid = player.getUuid().toString(); + String uuid = player.getUuidAsString().replace("-", ""); Identifier cloakTexture = Cloaks.getCurrentCloakTexture(uuid); if (cloakTexture != null) { diff --git a/src/main/java/org/auraclient/auraclient/mixin/EntityRendererMixin.java b/src/main/java/org/auraclient/auraclient/mixin/EntityRendererMixin.java new file mode 100644 index 0000000..0b57e2b --- /dev/null +++ b/src/main/java/org/auraclient/auraclient/mixin/EntityRendererMixin.java @@ -0,0 +1,124 @@ +package org.auraclient.auraclient.mixin; + +import net.minecraft.client.MinecraftClient; +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.EntityRenderDispatcher; +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.entity.state.EntityRenderState; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.minecraft.client.render.LightmapTextureManager; + +import org.joml.Matrix4f; +import org.joml.Quaternionf; +import org.joml.Vector3f; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(EntityRenderer.class) +public abstract class EntityRendererMixin { + private static final Identifier BADGE_TEXTURE = Identifier.of("auraclient", "textures/player.png"); + + @Shadow + public EntityRenderDispatcher dispatcher; + + @Overwrite + public void renderLabelIfPresent(S state, Text text, MatrixStack matrices, + VertexConsumerProvider vertexConsumers, int light) { + + matrices.push(); + + matrices.translate(0.0f, 0.0f, 0.0f); + + int textWidth = MinecraftClient.getInstance().textRenderer.getWidth(text); + + double y = state.nameLabelPos.y; + + renderTextAtOrigin(y, text, matrices, vertexConsumers, light); + + if (state instanceof net.minecraft.client.render.entity.state.PlayerEntityRenderState) { + float yawAngle = 0.0f; + Quaternionf yawRotation = new Quaternionf().rotateY((float) Math.toRadians(yawAngle)); + matrices.multiply(yawRotation); + + Quaternionf cameraRotation = dispatcher.camera.getRotation(); + Vector3f leftVector = new Vector3f(-1, 0, 0).rotate(cameraRotation); + + float xOffset = textWidth * 0.018f; + + matrices.translate(leftVector.x * xOffset, y + 0.4f, leftVector.z * xOffset); + + matrices.scale(0.25F, 0.25F, 0.25F); + + renderBadgeIcon(matrices, vertexConsumers, light); + } + + matrices.pop(); + } + + private void renderTextAtOrigin(double y, Text text, MatrixStack matrices, + VertexConsumerProvider vertexConsumers, + int light) { + // Push the current matrix stack + matrices.push(); + + // Translate to the origin (0, 0, 0) and adjust the vertical position slightly + matrices.translate(0.0f, y + 0.5f, 0.0f); + + // Apply the camera's rotation to face the text towards the camera + matrices.multiply(dispatcher.getRotation()); + + // Scale the text to a readable size + matrices.scale(0.025F, -0.025F, 0.025F); + + // Get the position matrix for rendering + Matrix4f matrix4f = matrices.peek().getPositionMatrix(); + + // Obtain the text renderer + net.minecraft.client.font.TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; + + // Calculate the horizontal offset to center the text + float textWidth = (float) (-textRenderer.getWidth(text)) / 2.0F; + + // Determine the background opacity + int backgroundOpacity = (int) (MinecraftClient.getInstance().options.getTextBackgroundOpacity(0.25F) + * 255.0F) << 24; + + // Render the text with a background + textRenderer.draw(text, textWidth, 0, -2130706433, false, matrix4f, vertexConsumers, + net.minecraft.client.font.TextRenderer.TextLayerType.SEE_THROUGH, backgroundOpacity, light); + + // Render the text without a background if not sneaking + textRenderer.draw(text, textWidth, 0, -1, false, matrix4f, vertexConsumers, + net.minecraft.client.font.TextRenderer.TextLayerType.NORMAL, 0, + LightmapTextureManager.applyEmission(light, 2)); + + // Pop the matrix stack to restore the previous state + matrices.pop(); + } + + private void renderBadgeIcon(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light) { + float size = .5f; + Matrix4f matrix = matrices.peek().getPositionMatrix(); + VertexConsumer vertexConsumer = vertexConsumers + .getBuffer(RenderLayer.getEntityTranslucent(BADGE_TEXTURE)); + + // Apply rotation to make the icon face the camera + Quaternionf rotation = dispatcher.camera.getRotation(); + matrices.multiply(rotation); + + vertexConsumer.vertex(matrix, -size, -size, 0).color(255, 255, 255, 255).texture(0, 0).light(light) + .overlay(OverlayTexture.DEFAULT_UV).normal(0, 0, 1); + vertexConsumer.vertex(matrix, size, -size, 0).color(255, 255, 255, 255).texture(1, 0).light(light) + .overlay(OverlayTexture.DEFAULT_UV).normal(0, 0, 1); + vertexConsumer.vertex(matrix, size, size, 0).color(255, 255, 255, 255).texture(1, 1).light(light) + .overlay(OverlayTexture.DEFAULT_UV).normal(0, 0, 1); + vertexConsumer.vertex(matrix, -size, size, 0).color(255, 255, 255, 255).texture(0, 1).light(light) + .overlay(OverlayTexture.DEFAULT_UV).normal(0, 0, 1); + } +} \ No newline at end of file diff --git a/src/main/resources/assets/auraclient/icon.png b/src/main/resources/assets/auraclient/icon.png index dc3cbab3a9031840850059b5dc768bd4ad3123f6..4961827a81bfdfd5457ffae650e905324cc44970 100644 GIT binary patch literal 12828 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 UHf0KHDoK*SH1uv2tJ%K%UnJxgc>n+a literal 3838 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 z