From a962488fae08cd7c878bbeea3519042632f3b3e0 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Wed, 5 Mar 2025 19:09:36 +0100 Subject: [PATCH] better name tags and tablist --- .../auraclient/mixin/NameTagMixin.java | 173 +++--------------- .../auraclient/mixin/TabListMixin.java | 22 +++ .../minecraft/font/include/default.json | 11 ++ .../minecraft/textures/font/custom/saturn.png | Bin 0 -> 4589 bytes src/main/resources/auraclient.mixins.json | 2 +- 5 files changed, 55 insertions(+), 153 deletions(-) create mode 100644 src/main/java/org/auraclient/auraclient/mixin/TabListMixin.java create mode 100644 src/main/resources/assets/minecraft/font/include/default.json create mode 100644 src/main/resources/assets/minecraft/textures/font/custom/saturn.png diff --git a/src/main/java/org/auraclient/auraclient/mixin/NameTagMixin.java b/src/main/java/org/auraclient/auraclient/mixin/NameTagMixin.java index 63311ee..16518ef 100644 --- a/src/main/java/org/auraclient/auraclient/mixin/NameTagMixin.java +++ b/src/main/java/org/auraclient/auraclient/mixin/NameTagMixin.java @@ -3,9 +3,6 @@ package org.auraclient.auraclient.mixin; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.font.TextRenderer.TextLayerType; -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; @@ -13,7 +10,6 @@ import net.minecraft.client.render.entity.state.EntityRenderState; import net.minecraft.client.render.entity.state.PlayerEntityRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; -import net.minecraft.util.Identifier; import net.minecraft.util.math.Vec3d; import net.minecraft.client.render.LightmapTextureManager; @@ -23,166 +19,39 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; -import com.mojang.blaze3d.systems.RenderSystem; - @Mixin(EntityRenderer.class) public abstract class NameTagMixin { - private static final Identifier BADGE_TEXTURE = Identifier.of("auraclient", "icon.png"); - @Shadow public EntityRenderDispatcher dispatcher; @Overwrite - public void renderLabelIfPresent(S state, Text text, MatrixStack matrices, + public void renderLabelIfPresent(S state, Text text_o, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light) { - if (isAura(state)) { + Text text = isAura(state) ? Text.literal("" + "HexLeo") : text_o; + + Vec3d vec3d = state.nameLabelPos; + if (vec3d != null) { + boolean bl = !state.sneaking; + int i = "deadmau5".equals(text.getString()) ? -10 : 0; matrices.push(); - matrices.translate(0.0f, 0.0f, 0.0f); - double y = state.nameLabelPos.y; - renderTextAtOrigin(state, y, text, matrices, vertexConsumers, light); - matrices.pop(); - } else { - Vec3d vec3d = state.nameLabelPos; - if (vec3d != null) { - boolean bl = !state.sneaking; - int i = "deadmau5".equals(text.getString()) ? -10 : 0; - matrices.push(); - matrices.translate(vec3d.x, vec3d.y + 0.5, vec3d.z); - matrices.multiply(this.dispatcher.getRotation()); - matrices.scale(0.025F, -0.025F, 0.025F); - Matrix4f matrix4f = matrices.peek().getPositionMatrix(); - TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - float f = (float) (-textRenderer.getWidth(text)) / 2.0F; - int j = (int) (MinecraftClient.getInstance().options.getTextBackgroundOpacity(0.25F) - * 255.0F) << 24; - textRenderer.draw(text, f, (float) i, -2130706433, false, matrix4f, vertexConsumers, - bl ? TextLayerType.SEE_THROUGH : TextLayerType.NORMAL, j, light); - if (bl) { - textRenderer.draw(text, f, (float) i, -1, false, matrix4f, vertexConsumers, - TextLayerType.NORMAL, 0, - LightmapTextureManager.applyEmission(light, 2)); - } - - matrices.pop(); + matrices.translate(vec3d.x, vec3d.y + 0.5, vec3d.z); + matrices.multiply(this.dispatcher.getRotation()); + matrices.scale(0.025F, -0.025F, 0.025F); + Matrix4f matrix4f = matrices.peek().getPositionMatrix(); + TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; + float f = (float) (-textRenderer.getWidth(text)) / 2.0F; + int j = (int) (MinecraftClient.getInstance().options.getTextBackgroundOpacity(0.25F) * 255.0F) << 24; + textRenderer.draw(text, f, (float) i, -2130706433, false, matrix4f, vertexConsumers, + bl ? TextLayerType.SEE_THROUGH : TextLayerType.NORMAL, j, light); + if (bl) { + textRenderer.draw(text, f, (float) i, -1, false, matrix4f, vertexConsumers, TextLayerType.NORMAL, 0, + LightmapTextureManager.applyEmission(light, 2)); } + + matrices.pop(); } } - private void renderTextAtOrigin(S state, double y, Text text, MatrixStack matrices, - VertexConsumerProvider vertexConsumers, int light) { - matrices.push(); - - // Move up slightly - matrices.translate(0.0f, y + 0.5f, 0.0f); - - // Apply rotation to face the camera - matrices.multiply(dispatcher.getRotation()); - - // Scale text and badge to a readable size - matrices.scale(0.025F, -0.025F, 0.025F); - - // Offset the text to avoid Z-fighting - matrices.translate(0.0F, 0.0F, -0.01F); - - Matrix4f matrix4f = matrices.peek().getPositionMatrix(); - net.minecraft.client.font.TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - - float textWidth = textRenderer.getWidth(text); - float badgeSize = textWidth * 0.20f; - float totalWidth = textWidth + badgeSize + 4; - - // Adjust text position to make space for badge - float xStart = -totalWidth / 2 + badgeSize; - - float backgroundX = -totalWidth / 2 - 3.9f; - - int j = (int) (MinecraftClient.getInstance().options.getTextBackgroundOpacity(0.25F) - * 255.0F) << 24; - boolean bl = !state.sneaking; - - if (bl) { - drawBackground(state, matrices, vertexConsumers, backgroundX, -1.5f, totalWidth, 10, j); - } - - renderBadgeIcon(matrices, vertexConsumers, xStart - badgeSize + 1, 3.4f, badgeSize); - - textRenderer.draw(text, xStart, 0, -2130706433, false, matrix4f, vertexConsumers, - bl ? TextLayerType.SEE_THROUGH : TextLayerType.NORMAL, 0, light); - if (bl) { - textRenderer.draw(text, xStart, 0, -1, false, matrix4f, vertexConsumers, - TextLayerType.NORMAL, 0, - LightmapTextureManager.applyEmission(light, 2)); - } - - matrices.pop(); - } - - /** - * Draws a single background behind both text and badge. - */ - private void drawBackground(S state, MatrixStack matrices, VertexConsumerProvider vertexConsumers, - float x, float y, float width, float height, int color) { - Matrix4f matrix = matrices.peek().getPositionMatrix(); - VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderLayer.getTextBackgroundSeeThrough()); - - int a = (color >> 24) & 255; // Alpha - int r = (color >> 16) & 255; // Red - int g = (color >> 8) & 255; // Green - int b = color & 255; // Blue - - float z = 0; - - vertexConsumer.vertex(matrix, x, y + height, z).color(r, g, b, a).texture(0, 1).light(0xF000F0) - .overlay(OverlayTexture.DEFAULT_UV).normal(0, 0, 1); - vertexConsumer.vertex(matrix, x + width, y + height, z).color(r, g, b, a).texture(1, 1).light(0xF000F0) - .overlay(OverlayTexture.DEFAULT_UV).normal(0, 0, 1); - vertexConsumer.vertex(matrix, x + width, y, z).color(r, g, b, a).texture(1, 0).light(0xF000F0) - .overlay(OverlayTexture.DEFAULT_UV).normal(0, 0, 1); - vertexConsumer.vertex(matrix, x, y, z).color(r, g, b, a).texture(0, 0).light(0xF000F0) - .overlay(OverlayTexture.DEFAULT_UV).normal(0, 0, 1); - } - - private void renderBadgeIcon(MatrixStack matrices, VertexConsumerProvider vertexConsumers, float x, float y, - float size) { - // Push the current matrix to stack - matrices.push(); - - // Set the position and scale for the badge - matrices.translate(x, y, 0); - matrices.scale(size, size, size); - - // Ensure the texture is binded for the badge - RenderSystem.setShaderTexture(0, BADGE_TEXTURE); // Bind your badge texture here - - // Disable depth testing to always render on top - RenderSystem.disableDepthTest(); - // Enable blending for transparency - RenderSystem.enableBlend(); - RenderSystem.defaultBlendFunc(); // Standard alpha blending - - // Set up the vertex consumer for the texture rendering - VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderLayer.getEntityAlpha(BADGE_TEXTURE)); - Matrix4f matrix = matrices.peek().getPositionMatrix(); - int light = LightmapTextureManager.MAX_LIGHT_COORDINATE; - - // Render the badge icon (a quad with your badge texture) - vertexConsumer.vertex(matrix, -0.5f, -0.5f, 0).color(255, 255, 255, 255).texture(0, 0).light(light) - .overlay(OverlayTexture.DEFAULT_UV).normal(0, 0, 1); - vertexConsumer.vertex(matrix, 0.5f, -0.5f, 0).color(255, 255, 255, 255).texture(1, 0).light(light) - .overlay(OverlayTexture.DEFAULT_UV).normal(0, 0, 1); - vertexConsumer.vertex(matrix, 0.5f, 0.5f, 0).color(255, 255, 255, 255).texture(1, 1).light(light) - .overlay(OverlayTexture.DEFAULT_UV).normal(0, 0, 1); - vertexConsumer.vertex(matrix, -0.5f, 0.5f, 0).color(255, 255, 255, 255).texture(0, 1).light(light) - .overlay(OverlayTexture.DEFAULT_UV).normal(0, 0, 1); - - // Restore OpenGL states - RenderSystem.enableDepthTest(); - RenderSystem.disableBlend(); - - // Pop the matrix stack after rendering - matrices.pop(); - } - private boolean isAura(S state) { if (state instanceof PlayerEntityRenderState) { String name = ((PlayerEntityRenderState) state).name; diff --git a/src/main/java/org/auraclient/auraclient/mixin/TabListMixin.java b/src/main/java/org/auraclient/auraclient/mixin/TabListMixin.java new file mode 100644 index 0000000..b4fb7a4 --- /dev/null +++ b/src/main/java/org/auraclient/auraclient/mixin/TabListMixin.java @@ -0,0 +1,22 @@ +package org.auraclient.auraclient.mixin; + +import org.auraclient.auraclient.auth.AuraApi; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +@Mixin(PlayerListEntry.class) +public abstract class TabListMixin { + @Shadow + private Text displayName; + + @Overwrite + @Nullable + public Text getDisplayName() { + String name = displayName.getString(); + return Text.literal(AuraApi.playerNames.containsKey(name) ? "" + name : name); + } +} diff --git a/src/main/resources/assets/minecraft/font/include/default.json b/src/main/resources/assets/minecraft/font/include/default.json new file mode 100644 index 0000000..e88f241 --- /dev/null +++ b/src/main/resources/assets/minecraft/font/include/default.json @@ -0,0 +1,11 @@ +{ + "providers": [ + { + "type": "bitmap", + "file": "minecraft:font/custom/saturn.png", + "ascent": 7, + "height": 8, + "chars": ["\uE002"] + } + ] +} diff --git a/src/main/resources/assets/minecraft/textures/font/custom/saturn.png b/src/main/resources/assets/minecraft/textures/font/custom/saturn.png new file mode 100644 index 0000000000000000000000000000000000000000..6e42bc2d7b279d41d5f52bcd174d81154ffa2cb6 GIT binary patch literal 4589 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 Xy$iB!6xka(00000NkvXXu0mjfPfHE* literal 0 HcmV?d00001 diff --git a/src/main/resources/auraclient.mixins.json b/src/main/resources/auraclient.mixins.json index 532c496..63a46f0 100644 --- a/src/main/resources/auraclient.mixins.json +++ b/src/main/resources/auraclient.mixins.json @@ -3,7 +3,7 @@ "minVersion": "0.8", "package": "org.auraclient.auraclient.mixin", "compatibilityLevel": "JAVA_17", - "client": ["CapeRenderer", "NameTagMixin"], + "client": ["CapeRenderer", "TabListMixin", "NameTagMixin"], "injectors": { "defaultRequire": 1 }