diff --git a/versions/1.21/src/main/java/org/saturnclient/saturnclient/mixin/NameTagMixin.java b/versions/1.21/src/main/java/org/saturnclient/saturnclient/mixin/NameTagMixin.java index 518494c..f23190c 100644 --- a/versions/1.21/src/main/java/org/saturnclient/saturnclient/mixin/NameTagMixin.java +++ b/versions/1.21/src/main/java/org/saturnclient/saturnclient/mixin/NameTagMixin.java @@ -5,9 +5,10 @@ import net.minecraft.client.font.TextRenderer.TextLayerType; 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.render.entity.state.PlayerEntityRenderState; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAttachmentType; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -27,20 +28,23 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.Shadow; @Mixin(value = EntityRenderer.class, priority = 1800) -public abstract class NameTagMixin { +public abstract class NameTagMixin { @Shadow public EntityRenderDispatcher dispatcher; + @Shadow + private TextRenderer textRenderer; + /** * @author HexLeo * @reason Adds the Saturn Client icon to the player's name if they are online * with Saturn Client */ @Inject(method = "renderLabelIfPresent(Lnet/minecraft/client/render/entity/state/EntityRenderState;Lnet/minecraft/text/Text;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At("HEAD"), cancellable = true) - private void onRenderLabelIfPresent(S state, Text text, MatrixStack matrices, - VertexConsumerProvider vertexConsumers, int light, CallbackInfo ci) { + protected void renderLabelIfPresent(T entity, Text text, MatrixStack matrices, + VertexConsumerProvider vertexConsumers, int light, float tickDelta, CallbackInfo ci) { - UUID uuid = isSaturn(state); + UUID uuid = isSaturn(entity); if (uuid != null) { MutableText iconText = Text.literal(Roles.getSaturnIndicator()) @@ -48,17 +52,15 @@ public abstract class NameTagMixin { Text nameText = text.copy().styled(style -> style.withColor(Formatting.WHITE)); - renderLabel(state, iconText.append(nameText), matrices, - vertexConsumers, light); + renderLabel(entity, iconText.append(nameText), matrices, vertexConsumers, light, tickDelta); ci.cancel(); } } - private UUID isSaturn(S state) { - if (state instanceof PlayerEntityRenderState) { - String name = ((PlayerEntityRenderState) state).name; - SaturnPlayer player = SaturnPlayer.get(name); + private UUID isSaturn(T entity) { + if (entity instanceof PlayerEntity playerEntity) { + SaturnPlayer player = SaturnPlayer.get(playerEntity.getUuid()); if (player != null) { return player.uuid; } @@ -67,27 +69,33 @@ public abstract class NameTagMixin { return null; } - private void renderLabel(S state, Text text, MatrixStack matrices, - VertexConsumerProvider vertexConsumers, int light) { - 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 = SaturnClient.client.textRenderer; - float f = (float) (-textRenderer.getWidth(text)) / 2.0F; - int j = (int) (SaturnClient.client.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, - light); + private void renderLabel(T entity, Text text, MatrixStack matrices, + VertexConsumerProvider vertexConsumers, int light, float tickDelta) { + double d = this.dispatcher.getSquaredDistanceToCamera(entity); + if (!(d > (double) 4096.0F)) { + Vec3d vec3d = entity.getAttachments().getPointNullable(EntityAttachmentType.NAME_TAG, 0, + entity.getYaw(tickDelta)); + if (vec3d != null) { + boolean bl = !entity.isSneaky(); + int i = "deadmau5".equals(text.getString()) ? -10 : 0; + matrices.push(); + matrices.translate(vec3d.x, vec3d.y + (double) 0.5F, vec3d.z); + matrices.multiply(this.dispatcher.getRotation()); + matrices.scale(0.025F, -0.025F, 0.025F); + Matrix4f matrix4f = matrices.peek().getPositionMatrix(); + float f = SaturnClient.client.options.getTextBackgroundOpacity(0.25F); + int j = (int) (f * 255.0F) << 24; + TextRenderer textRenderer = this.textRenderer; + float g = (float) (-textRenderer.getWidth(text) / 2); + textRenderer.draw(text, g, (float) i, 553648127, false, matrix4f, vertexConsumers, + bl ? TextLayerType.SEE_THROUGH : TextLayerType.NORMAL, j, light); + if (bl) { + textRenderer.draw(text, g, (float) i, -1, false, matrix4f, vertexConsumers, TextLayerType.NORMAL, 0, + light); + } + + matrices.pop(); } - matrices.pop(); } } } diff --git a/versions/1.21/src/main/java/org/saturnclient/saturnclient/mixin/PlayerEntityRendererMixin.java b/versions/1.21/src/main/java/org/saturnclient/saturnclient/mixin/PlayerEntityRendererMixin.java index 0363dad..f0e169d 100644 --- a/versions/1.21/src/main/java/org/saturnclient/saturnclient/mixin/PlayerEntityRendererMixin.java +++ b/versions/1.21/src/main/java/org/saturnclient/saturnclient/mixin/PlayerEntityRendererMixin.java @@ -1,11 +1,10 @@ package org.saturnclient.saturnclient.mixin; +import net.minecraft.client.network.AbstractClientPlayerEntity; 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.player.PlayerEntity; import org.saturnclient.impl.cosmetics.CloakFeatureRenderer; import org.saturnclient.impl.cosmetics.HatFeatureRenderer; @@ -16,7 +15,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(PlayerEntityRenderer.class) public abstract class PlayerEntityRendererMixin - extends LivingEntityRenderer { + extends LivingEntityRenderer> { protected PlayerEntityRendererMixin() { super(null, null, 0.0f); @@ -25,6 +24,6 @@ public abstract class PlayerEntityRendererMixin @Inject(method = "", at = @At("TAIL")) private void addCustomFeatureRenderer(EntityRendererFactory.Context ctx, boolean slim, CallbackInfo ci) { this.addFeature(new HatFeatureRenderer(this)); - this.addFeature(new CloakFeatureRenderer(this, ctx.getEquipmentModelLoader())); + this.addFeature(new CloakFeatureRenderer(this)); } } \ No newline at end of file