From 019730c756cd16f28599a3d2bbb45e9410122176 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Wed, 8 Apr 2026 20:23:58 +0200 Subject: [PATCH] Nametags 1.21.10 and color fix --- .../saturnclient/SaturnRenderState.java | 10 +++ .../saturnclient/mixin/NameTagMixin.java | 67 ------------------- .../mixin/PlayerEntityRendererMixin.java | 31 +++++++++ .../mixin/PlayerEntityRendererMixin.java | 8 ++- 4 files changed, 47 insertions(+), 69 deletions(-) create mode 100644 versions/1.21.10/src/main/java/org/saturnclient/saturnclient/SaturnRenderState.java delete mode 100644 versions/1.21.10/src/main/java/org/saturnclient/saturnclient/mixin/NameTagMixin.java diff --git a/versions/1.21.10/src/main/java/org/saturnclient/saturnclient/SaturnRenderState.java b/versions/1.21.10/src/main/java/org/saturnclient/saturnclient/SaturnRenderState.java new file mode 100644 index 0000000..e34af31 --- /dev/null +++ b/versions/1.21.10/src/main/java/org/saturnclient/saturnclient/SaturnRenderState.java @@ -0,0 +1,10 @@ +package org.saturnclient.saturnclient; + +import org.saturnclient.client.player.SaturnPlayer; + +import net.fabricmc.fabric.api.client.rendering.v1.RenderStateDataKey; + +public class SaturnRenderState { + public static RenderStateDataKey saturnDataKey = RenderStateDataKey + .create(() -> "saturn-client-player"); +} diff --git a/versions/1.21.10/src/main/java/org/saturnclient/saturnclient/mixin/NameTagMixin.java b/versions/1.21.10/src/main/java/org/saturnclient/saturnclient/mixin/NameTagMixin.java deleted file mode 100644 index 453eae1..0000000 --- a/versions/1.21.10/src/main/java/org/saturnclient/saturnclient/mixin/NameTagMixin.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.saturnclient.saturnclient.mixin; - -import net.minecraft.client.render.command.OrderedRenderCommandQueue; -import net.minecraft.client.render.entity.EntityRenderManager; -import net.minecraft.client.render.entity.EntityRenderer; -import net.minecraft.client.render.entity.state.EntityRenderState; -import net.minecraft.client.render.entity.state.PlayerEntityRenderState; -import net.minecraft.client.render.state.CameraRenderState; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; - -import org.saturnclient.client.player.Roles; -import org.saturnclient.client.player.SaturnPlayer; - -import java.util.UUID; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = EntityRenderer.class, priority = 1800) -public abstract class NameTagMixin { - @Shadow - public EntityRenderManager dispatcher; - - /** - * @author HexLeo - * @reason Adds the Saturn Client icon to the player's name if they are online - * with Saturn Client - */ - @Inject(method = "renderLabelIfPresent", at = @At("HEAD"), cancellable = true) - protected void renderLabelIfPresent(S state, MatrixStack matrices, OrderedRenderCommandQueue queue, - CameraRenderState cameraRenderState, CallbackInfo ci) { - if (state.displayName == null) - return; - - UUID uuid = isSaturn(state); - - if (uuid != null) { - MutableText iconText = Text.literal(Roles.getSaturnIndicator()) - .styled(style -> style.withColor(Roles.getIconColor(uuid))); - - Text nameText = state.displayName.copy().styled(style -> style.withColor(Formatting.WHITE)); - - queue.submitLabel(matrices, state.nameLabelPos, 0, iconText.append(nameText), !state.sneaking, state.light, - state.squaredDistanceToCamera, cameraRenderState); - - ci.cancel(); - } - } - - private UUID isSaturn(S state) { - if (state instanceof PlayerEntityRenderState) { - String name = ((PlayerEntityRenderState) state).displayName.getString(); - SaturnPlayer player = SaturnPlayer.get(name); - if (player != null) { - return player.uuid; - } - } - - return null; - } -} diff --git a/versions/1.21.10/src/main/java/org/saturnclient/saturnclient/mixin/PlayerEntityRendererMixin.java b/versions/1.21.10/src/main/java/org/saturnclient/saturnclient/mixin/PlayerEntityRendererMixin.java index 0363dad..6da5ccb 100644 --- a/versions/1.21.10/src/main/java/org/saturnclient/saturnclient/mixin/PlayerEntityRendererMixin.java +++ b/versions/1.21.10/src/main/java/org/saturnclient/saturnclient/mixin/PlayerEntityRendererMixin.java @@ -1,14 +1,22 @@ package org.saturnclient.saturnclient.mixin; +import net.minecraft.client.network.ClientPlayerLikeEntity; import net.minecraft.client.render.entity.EntityRendererFactory; import net.minecraft.client.render.entity.LivingEntityRenderer; import net.minecraft.client.render.entity.PlayerEntityRenderer; import net.minecraft.client.render.entity.model.PlayerEntityModel; import net.minecraft.client.render.entity.state.PlayerEntityRenderState; +import net.minecraft.entity.PlayerLikeEntity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import org.saturnclient.client.player.Roles; +import org.saturnclient.client.player.SaturnPlayer; import org.saturnclient.impl.cosmetics.CloakFeatureRenderer; import org.saturnclient.impl.cosmetics.HatFeatureRenderer; +import org.saturnclient.saturnclient.SaturnRenderState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -27,4 +35,27 @@ public abstract class PlayerEntityRendererMixin this.addFeature(new HatFeatureRenderer(this)); this.addFeature(new CloakFeatureRenderer(this, ctx.getEquipmentModelLoader())); } + + @Inject(method = "updateRenderState", at = @At("TAIL")) + public void updateRenderState( + A entity, PlayerEntityRenderState state, + float f, CallbackInfo ci) { + if (entity == null) { + return; + } + + SaturnPlayer player = SaturnPlayer.get(entity.getUuid()); + + state.setData(SaturnRenderState.saturnDataKey, player); + + if (player != null) { + MutableText iconText = Text.literal(Roles.getSaturnIndicator()) + .styled(style -> style.withColor(Roles.getIconColor(player.uuid))); + + state.displayName = Text.empty() + .append(iconText.copy()) + .append(Text.empty().formatted(Formatting.RESET)) + .append(state.displayName.copy()); + } + } } \ No newline at end of file diff --git a/versions/1.21.11/src/main/java/org/saturnclient/saturnclient/mixin/PlayerEntityRendererMixin.java b/versions/1.21.11/src/main/java/org/saturnclient/saturnclient/mixin/PlayerEntityRendererMixin.java index b6dce94..f165cfc 100644 --- a/versions/1.21.11/src/main/java/org/saturnclient/saturnclient/mixin/PlayerEntityRendererMixin.java +++ b/versions/1.21.11/src/main/java/org/saturnclient/saturnclient/mixin/PlayerEntityRendererMixin.java @@ -10,6 +10,7 @@ import net.minecraft.entity.PlayerLikeEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.text.MutableText; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; import org.saturnclient.client.player.Roles; import org.saturnclient.client.player.SaturnPlayer; @@ -47,11 +48,14 @@ public abstract class PlayerEntityRendererMixin state.setData(SaturnRenderState.saturnDataKey, player); - if (player != null) { + if (player != null && state.displayName != null) { MutableText iconText = Text.literal(Roles.getSaturnIndicator()) .styled(style -> style.withColor(Roles.getIconColor(player.uuid))); - state.displayName = iconText.append(state.displayName); + state.displayName = Text.empty() + .append(iconText.copy()) + .append(Text.empty().formatted(Formatting.RESET)) + .append(state.displayName.copy()); } } } \ No newline at end of file