From 0ea74e473c740fc8949142d0ce5a662da2a6e4f2 Mon Sep 17 00:00:00 2001 From: IMS212 Date: Thu, 27 Jun 2024 17:26:04 -0700 Subject: [PATCH] Add name tag entity ID --- .../MixinEntityRenderer.java | 48 +++++++++++++++++++ src/main/resources/mixins.iris.json | 1 + 2 files changed, 49 insertions(+) create mode 100644 src/main/java/net/irisshaders/iris/mixin/entity_render_context/MixinEntityRenderer.java diff --git a/src/main/java/net/irisshaders/iris/mixin/entity_render_context/MixinEntityRenderer.java b/src/main/java/net/irisshaders/iris/mixin/entity_render_context/MixinEntityRenderer.java new file mode 100644 index 0000000000..15da2555d7 --- /dev/null +++ b/src/main/java/net/irisshaders/iris/mixin/entity_render_context/MixinEntityRenderer.java @@ -0,0 +1,48 @@ +package net.irisshaders.iris.mixin.entity_render_context; + +import com.mojang.blaze3d.vertex.PoseStack; +import it.unimi.dsi.fastutil.objects.Object2IntFunction; +import net.irisshaders.iris.shaderpack.materialmap.NamespacedId; +import net.irisshaders.iris.shaderpack.materialmap.WorldRenderingSettings; +import net.irisshaders.iris.uniforms.CapturedRenderingState; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(EntityRenderer.class) +public class MixinEntityRenderer { + @Unique + private static final NamespacedId NAME_TAG_ID = new NamespacedId("minecraft", "name_tag"); + + @Unique + private int lastId = -100; + + @Inject(method = "renderNameTag", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getNameTagOffsetY()F")) + private void setNameTagId(T entity, Component component, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, CallbackInfo ci) { + Object2IntFunction entityIds = WorldRenderingSettings.INSTANCE.getEntityIds(); + + if (entityIds == null) { + return; + } + + this.lastId = CapturedRenderingState.INSTANCE.getCurrentRenderedEntity(); + + int intId = entityIds.applyAsInt(NAME_TAG_ID); + + CapturedRenderingState.INSTANCE.setCurrentEntity(intId); + } + + @Inject(method = "renderNameTag", at = @At("RETURN")) + private void resetId(T entity, Component component, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, CallbackInfo ci) { + if (lastId != -100) { + CapturedRenderingState.INSTANCE.setCurrentEntity(lastId); + lastId = -100 ; + } + } +} diff --git a/src/main/resources/mixins.iris.json b/src/main/resources/mixins.iris.json index be847e36a4..30c462cdac 100644 --- a/src/main/resources/mixins.iris.json +++ b/src/main/resources/mixins.iris.json @@ -60,6 +60,7 @@ "entity_render_context.MixinElytraLayer", "entity_render_context.MixinEnderDragonRenderer", "entity_render_context.MixinEntityRenderDispatcher", + "entity_render_context.MixinEntityRenderer", "entity_render_context.MixinHorseArmorLayer", "entity_render_context.MixinHumanoidArmorLayer", "entity_render_context.MixinItemRenderer",