diff options
author | 2024-05-18 01:24:05 -0400 | |
---|---|---|
committer | 2024-05-18 01:24:05 -0400 | |
commit | 04b4941e65693f8d6b55f924781d7dd7cd26b1d5 (patch) | |
tree | c78ff16924c246c3c0073c0f880a5582689c4a37 /src/main/java/org/chrisoft/trashyaddon/mixin/WorldRendererMixin.java | |
parent | 2b0c0f25b9e9ca690bb334479f798794fec6dd38 (diff) | |
download | meteor-trashy-addon-dev.tar.xz |
Diffstat (limited to 'src/main/java/org/chrisoft/trashyaddon/mixin/WorldRendererMixin.java')
-rw-r--r-- | src/main/java/org/chrisoft/trashyaddon/mixin/WorldRendererMixin.java | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/main/java/org/chrisoft/trashyaddon/mixin/WorldRendererMixin.java b/src/main/java/org/chrisoft/trashyaddon/mixin/WorldRendererMixin.java new file mode 100644 index 0000000..f953e7e --- /dev/null +++ b/src/main/java/org/chrisoft/trashyaddon/mixin/WorldRendererMixin.java @@ -0,0 +1,48 @@ +package org.chrisoft.trashyaddon.mixin; + +import meteordevelopment.meteorclient.utils.render.color.Color; +import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders; +import net.minecraft.client.gl.Framebuffer; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.WorldRenderer; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.Entity; +import meteordevelopment.meteorclient.utils.render.postprocess.EntityShader; +import org.chrisoft.trashyaddon.commands.EntityHighlightCommand; +import org.chrisoft.trashyaddon.misc.AddonPostProcessingShaders; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +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(value = WorldRenderer.class, priority = 999) +public abstract class WorldRendererMixin { + @Shadow + private Framebuffer entityOutlinesFramebuffer; + @Shadow + protected abstract void renderEntity(Entity entity, double cameraX, double cameraY, double cameraZ, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers); + + @Inject(method = "renderEntity", at = @At("HEAD")) + private void renderEntity(Entity entity, double cameraX, double cameraY, double cameraZ, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, CallbackInfo info) { + for (EntityShader es : AddonPostProcessingShaders.entityShaders) { + drawShaded(entity, cameraX, cameraY, cameraZ, tickDelta, vertexConsumers, matrices, es, EntityHighlightCommand.getEntityColor(entity)); + } + } + + @Unique + private void drawShaded(Entity entity, double cameraX, double cameraY, double cameraZ, float tickDelta, VertexConsumerProvider vertexConsumers, MatrixStack matrices, EntityShader shader, Color color) { + if (shader.shouldDraw(entity) && !PostProcessShaders.isCustom(vertexConsumers) && color != null) { + Framebuffer prevBuffer = this.entityOutlinesFramebuffer; + this.entityOutlinesFramebuffer = shader.framebuffer; + PostProcessShaders.rendering = true; + + shader.vertexConsumerProvider.setColor(color.r, color.g, color.b, color.a); + renderEntity(entity, cameraX, cameraY, cameraZ, tickDelta, matrices, shader.vertexConsumerProvider); + + PostProcessShaders.rendering = false; + this.entityOutlinesFramebuffer = prevBuffer; + } + } +} |