better name tags and tablist
This commit is contained in:
@@ -3,9 +3,6 @@ package org.auraclient.auraclient.mixin;
|
|||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.font.TextRenderer;
|
import net.minecraft.client.font.TextRenderer;
|
||||||
import net.minecraft.client.font.TextRenderer.TextLayerType;
|
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.VertexConsumerProvider;
|
||||||
import net.minecraft.client.render.entity.EntityRenderDispatcher;
|
import net.minecraft.client.render.entity.EntityRenderDispatcher;
|
||||||
import net.minecraft.client.render.entity.EntityRenderer;
|
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.render.entity.state.PlayerEntityRenderState;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.client.render.LightmapTextureManager;
|
import net.minecraft.client.render.LightmapTextureManager;
|
||||||
|
|
||||||
@@ -23,25 +19,16 @@ import org.spongepowered.asm.mixin.Mixin;
|
|||||||
import org.spongepowered.asm.mixin.Overwrite;
|
import org.spongepowered.asm.mixin.Overwrite;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
|
||||||
|
|
||||||
@Mixin(EntityRenderer.class)
|
@Mixin(EntityRenderer.class)
|
||||||
public abstract class NameTagMixin<S extends EntityRenderState> {
|
public abstract class NameTagMixin<S extends EntityRenderState> {
|
||||||
private static final Identifier BADGE_TEXTURE = Identifier.of("auraclient", "icon.png");
|
|
||||||
|
|
||||||
@Shadow
|
@Shadow
|
||||||
public EntityRenderDispatcher dispatcher;
|
public EntityRenderDispatcher dispatcher;
|
||||||
|
|
||||||
@Overwrite
|
@Overwrite
|
||||||
public void renderLabelIfPresent(S state, Text text, MatrixStack matrices,
|
public void renderLabelIfPresent(S state, Text text_o, MatrixStack matrices,
|
||||||
VertexConsumerProvider vertexConsumers, int light) {
|
VertexConsumerProvider vertexConsumers, int light) {
|
||||||
if (isAura(state)) {
|
Text text = isAura(state) ? Text.literal("" + "HexLeo") : text_o;
|
||||||
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;
|
Vec3d vec3d = state.nameLabelPos;
|
||||||
if (vec3d != null) {
|
if (vec3d != null) {
|
||||||
boolean bl = !state.sneaking;
|
boolean bl = !state.sneaking;
|
||||||
@@ -53,135 +40,17 @@ public abstract class NameTagMixin<S extends EntityRenderState> {
|
|||||||
Matrix4f matrix4f = matrices.peek().getPositionMatrix();
|
Matrix4f matrix4f = matrices.peek().getPositionMatrix();
|
||||||
TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
|
TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
|
||||||
float f = (float) (-textRenderer.getWidth(text)) / 2.0F;
|
float f = (float) (-textRenderer.getWidth(text)) / 2.0F;
|
||||||
int j = (int) (MinecraftClient.getInstance().options.getTextBackgroundOpacity(0.25F)
|
int j = (int) (MinecraftClient.getInstance().options.getTextBackgroundOpacity(0.25F) * 255.0F) << 24;
|
||||||
* 255.0F) << 24;
|
|
||||||
textRenderer.draw(text, f, (float) i, -2130706433, false, matrix4f, vertexConsumers,
|
textRenderer.draw(text, f, (float) i, -2130706433, false, matrix4f, vertexConsumers,
|
||||||
bl ? TextLayerType.SEE_THROUGH : TextLayerType.NORMAL, j, light);
|
bl ? TextLayerType.SEE_THROUGH : TextLayerType.NORMAL, j, light);
|
||||||
if (bl) {
|
if (bl) {
|
||||||
textRenderer.draw(text, f, (float) i, -1, false, matrix4f, vertexConsumers,
|
textRenderer.draw(text, f, (float) i, -1, false, matrix4f, vertexConsumers, TextLayerType.NORMAL, 0,
|
||||||
TextLayerType.NORMAL, 0,
|
|
||||||
LightmapTextureManager.applyEmission(light, 2));
|
LightmapTextureManager.applyEmission(light, 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
matrices.pop();
|
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) {
|
private boolean isAura(S state) {
|
||||||
if (state instanceof PlayerEntityRenderState) {
|
if (state instanceof PlayerEntityRenderState) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"providers": [
|
||||||
|
{
|
||||||
|
"type": "bitmap",
|
||||||
|
"file": "minecraft:font/custom/saturn.png",
|
||||||
|
"ascent": 7,
|
||||||
|
"height": 8,
|
||||||
|
"chars": ["\uE002"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 4.5 KiB |
@@ -3,7 +3,7 @@
|
|||||||
"minVersion": "0.8",
|
"minVersion": "0.8",
|
||||||
"package": "org.auraclient.auraclient.mixin",
|
"package": "org.auraclient.auraclient.mixin",
|
||||||
"compatibilityLevel": "JAVA_17",
|
"compatibilityLevel": "JAVA_17",
|
||||||
"client": ["CapeRenderer", "NameTagMixin"],
|
"client": ["CapeRenderer", "TabListMixin", "NameTagMixin"],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user