Skip to content

Commit

Permalink
[OC-39] Add RenderLivingEntityEvent
Browse files Browse the repository at this point in the history
  • Loading branch information
Deftu committed Dec 25, 2024
1 parent 6c990e0 commit a0aedc6
Show file tree
Hide file tree
Showing 5 changed files with 193 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package org.polyfrost.oneconfig.api.event.v1.events;

public abstract class RenderLivingEntityEvent extends Event.Cancellable {

private final Object entity;
private final float partialTicks;
private final double x, y, z;

public RenderLivingEntityEvent(Object entity, float partialTicks, double x, double y, double z) {
this.entity = entity;
this.partialTicks = partialTicks;
this.x = x;
this.y = y;
this.z = z;
}

public Object getEntity() {
return entity;
}

public float getPartialTicks() {
return partialTicks;
}

public double getX() {
return x;
}

public double getY() {
return y;
}

public double getZ() {
return z;
}

public static class Pre extends RenderLivingEntityEvent {
public Pre(Object entity, float partialTicks, double x, double y, double z) {
super(entity, partialTicks, x, y, z);
}
}

public static class Post extends RenderLivingEntityEvent {
public Post(Object entity, float partialTicks, double x, double y, double z) {
super(entity, partialTicks, x, y, z);
}
}

}
2 changes: 2 additions & 0 deletions versions/mappings/forge-1.16.5-1.12.2.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ net.minecraft.client.shader.ShaderInstance net.minecraft.client.shader.ShaderMan
net.minecraft.client.renderer.GameRenderer net.minecraft.client.renderer.EntityRenderer
net.minecraft.client.renderer.GameRenderer renderWorld() renderWorldPass()

net.minecraft.entity.LivingEntity net.minecraft.entity.EntityLivingBase

net.minecraft.client.world.ClientWorld net.minecraft.client.multiplayer.WorldClient

net.minecraft.network.IPacket net.minecraft.network.Packet
Expand Down
10 changes: 10 additions & 0 deletions versions/mappings/forge-1.17.1-1.16.5.txt
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,16 @@ net.minecraft.client.multiplayer.ClientPacketListener send() sendPacket()
net.minecraft.client.multiplayer.ClientPacketListener suggestionsProvider clientSuggestionProvider
net.minecraft.client.multiplayer.ClientSuggestionProvider minecraft mc

net.minecraft.client.renderer.MultiBufferSource net.minecraft.client.renderer.IRenderTypeBuffer

net.minecraft.world.entity.Entity getX() getPosX()
net.minecraft.world.entity.Entity getY() getPosY()
net.minecraft.world.entity.Entity getZ() getPosZ()

net.minecraft.client.renderer.entity.LivingEntityRenderer net.minecraft.client.renderer.entity.LivingRenderer

net.minecraft.world.entity.LivingEntity net.minecraft.entity.LivingEntity

net.minecraft.client.player.LocalPlayer chat() sendChatMessage()
net.minecraft.client.player.LocalPlayer net.minecraft.client.entity.player.ClientPlayerEntity

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
package org.polyfrost.oneconfig.internal.mixin;

//#if MC >= 1.16.5
//$$ import com.mojang.blaze3d.matrix.MatrixStack;
//$$ import net.minecraft.client.renderer.IRenderTypeBuffer;
//$$ import net.minecraft.client.renderer.entity.LivingRenderer;
//#else
import net.minecraft.client.renderer.entity.RendererLivingEntity;
//#endif

import net.minecraft.entity.EntityLivingBase;
import net.minecraft.profiler.Profiler;
import org.polyfrost.oneconfig.api.event.v1.EventManager;
import org.polyfrost.oneconfig.api.event.v1.events.RenderLivingEntityEvent;
import org.polyfrost.universal.UMinecraft;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

//#if MC >= 1.16.5
//$$ @Mixin(LivingRenderer.class)
//#else
@Mixin(RendererLivingEntity.class)
//#endif
public class RendererLivingEntityMixin<T extends EntityLivingBase> {

@Inject(
//#if MC >= 1.17.1
//#if FABRIC
//$$ method = "render(Lnet/minecraft/entity/LivingEntity;FFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V",
//#else
//$$ method = "render(Lnet/minecraft/world/entity/LivingEntity;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V",
//#endif
//#elseif MC >= 1.16.5
//$$ method = "render(Lnet/minecraft/entity/LivingEntity;FFLcom/mojang/blaze3d/matrix/MatrixStack;Lnet/minecraft/client/renderer/IRenderTypeBuffer;I)V",
//#else
method = "doRender(Lnet/minecraft/entity/EntityLivingBase;DDDFF)V",
//#endif
at = @At("HEAD"),
cancellable = true
)
private void onPreEntityRenderCallback(
T entity,
//#if MC <= 1.12.2
double x,
double y,
double z,
//#endif
float entityYaw,
float partialTicks,
//#if MC >= 1.16.5
//$$ MatrixStack matrixStack,
//$$ IRenderTypeBuffer buffer,
//$$ int packedLight,
//#endif
CallbackInfo ci
) {
Profiler profiler = UMinecraft.getMinecraft()
//#if MC >= 1.16.5
//$$ .getProfiler();
//#else
.mcProfiler;
//#endif
profiler.startSection("oneconfig_renderlivingentity_event_pre");

//#if MC >= 1.16.5
//$$ double x = entity.getPosX();
//$$ double y = entity.getPosY();
//$$ double z = entity.getPosZ();
//#endif
RenderLivingEntityEvent event = new RenderLivingEntityEvent.Pre(entity, partialTicks, x, y, z);
EventManager.INSTANCE.post(event);
if (event.cancelled) {
ci.cancel();
}

profiler.endSection();
}

@Inject(
//#if MC >= 1.17.1
//#if FABRIC
//$$ method = "render(Lnet/minecraft/entity/LivingEntity;FFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V",
//#else
//$$ method = "render(Lnet/minecraft/world/entity/LivingEntity;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V",
//#endif
//#elseif MC >= 1.16.5
//$$ method = "render(Lnet/minecraft/entity/LivingEntity;FFLcom/mojang/blaze3d/matrix/MatrixStack;Lnet/minecraft/client/renderer/IRenderTypeBuffer;I)V",
//#else
method = "doRender(Lnet/minecraft/entity/EntityLivingBase;DDDFF)V",
//#endif
at = @At("TAIL")
)
private void onPostEntityRenderCallback(
T entity,
//#if MC <= 1.12.2
double x,
double y,
double z,
//#endif
float entityYaw,
float partialTicks,
//#if MC >= 1.16.5
//$$ MatrixStack matrixStack,
//$$ IRenderTypeBuffer buffer,
//$$ int packedLight,
//#endif
CallbackInfo ci
) {
Profiler profiler = UMinecraft.getMinecraft()
//#if MC >= 1.16.5
//$$ .getProfiler();
//#else
.mcProfiler;
//#endif
profiler.startSection("oneconfig_renderlivingentity_event_post");

//#if MC >= 1.16.5
//$$ double x = entity.getPosX();
//$$ double y = entity.getPosY();
//$$ double z = entity.getPosZ();
//#endif
RenderLivingEntityEvent event = new RenderLivingEntityEvent.Post(entity, partialTicks, x, y, z);
EventManager.INSTANCE.post(event);
// Can't cancel when the method has already returned lol

profiler.endSection();
}

}
1 change: 1 addition & 0 deletions versions/src/main/resources/mixins.oneconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"ShaderGroupAccessor",
"SoundManagerMixin",
"EntityRendererMixin",
"RendererLivingEntityMixin",
"WorldClientMixin",
"SoundManagerMixin",
"compat.OptifineConfigMixin",
Expand Down

0 comments on commit a0aedc6

Please sign in to comment.