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 0000000..6e42bc2 Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/font/custom/saturn.png differ 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 }