Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import meteordevelopment.meteorclient.utils.render.color.Color;
import net.minecraft.client.render.Frustum;
import net.minecraft.client.render.entity.EntityRenderer;
import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.client.render.entity.state.EntityHitbox;
import net.minecraft.client.render.entity.state.EntityHitboxAndView;
import net.minecraft.client.render.entity.state.EntityRenderState;
Expand All @@ -37,20 +38,34 @@

@Mixin(EntityRenderer.class)
public abstract class EntityRendererMixin<T extends Entity, S extends EntityRenderState> {

@Unique private ESP esp;
@Unique private NoRender noRender;

// meteor is already initialised at this point
@Inject(method = "<init>", at = @At("TAIL"))
private void onInit(EntityRendererFactory.Context context, CallbackInfo ci) {
esp = Modules.get().get(ESP.class);
noRender = Modules.get().get(NoRender.class);
}

@Inject(method = "getDisplayName", at = @At("HEAD"), cancellable = true)
private void onRenderLabel(T entity, CallbackInfoReturnable<Text> cir) {
if (Modules.get().get(NoRender.class).noNametags()) cir.setReturnValue(null);
if (noRender.noNametags()) cir.setReturnValue(null);
if (!(entity instanceof PlayerEntity player)) return;
if (Modules.get().get(Nametags.class).playerNametags() && !(EntityUtils.getGameMode(player) == null && Modules.get().get(Nametags.class).excludeBots()))
cir.setReturnValue(null);
}

@Inject(method = "shouldRender", at = @At("HEAD"), cancellable = true)
private void shouldRender(T entity, Frustum frustum, double x, double y, double z, CallbackInfoReturnable<Boolean> cir) {
if (Modules.get().get(NoRender.class).noEntity(entity)) cir.setReturnValue(false);
if (Modules.get().get(NoRender.class).noFallingBlocks() && entity instanceof FallingBlockEntity) cir.setReturnValue(false);
if (noRender.noEntity(entity)) cir.setReturnValue(false);
if (noRender.noFallingBlocks() && entity instanceof FallingBlockEntity) cir.setReturnValue(false);
}

@Inject(method = "canBeCulled", at = @At("HEAD"), cancellable = true)
void canBeCulled(T entity, CallbackInfoReturnable<Boolean> cir) {
if (esp.forceRender()) cir.setReturnValue(false);
}

@ModifyReturnValue(method = "getSkyLight", at = @At("RETURN"))
Expand All @@ -70,8 +85,8 @@ private int onGetLightLevel(int original) {

@Inject(method = "updateRenderState", at = @At(value = "FIELD", target = "Lnet/minecraft/client/render/entity/state/EntityRenderState;outlineColor:I", shift = At.Shift.AFTER))
private void onGetOutlineColor(T entity, S state, float tickProgress, CallbackInfo ci) {
if (getESP().isGlow() && !getESP().shouldSkip(entity)) {
Color color = getESP().getColor(entity);
if (esp.isGlow() && !esp.shouldSkip(entity)) {
Color color = esp.getColor(entity);

if (color == null) return;
state.outlineColor = color.getPacked();
Expand All @@ -80,23 +95,14 @@ private void onGetOutlineColor(T entity, S state, float tickProgress, CallbackIn

@Inject(method = "updateShadow(Lnet/minecraft/entity/Entity;Lnet/minecraft/client/render/entity/state/EntityRenderState;)V", at = @At("HEAD"), cancellable = true)
private void updateShadow(Entity entity, EntityRenderState renderState, CallbackInfo ci) {
if (Modules.get().get(NoRender.class).noDeadEntities() &&
if (noRender.noDeadEntities() &&
entity instanceof LivingEntity &&
renderState instanceof LivingEntityRenderState livingEntityRenderState &&
livingEntityRenderState.deathTime > 0) {
ci.cancel();
}
}

@Unique
private ESP getESP() {
if (esp == null) {
esp = Modules.get().get(ESP.class);
}

return esp;
}

// Hitboxes

@ModifyReturnValue(method = "createHitbox", at = @At("TAIL"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package meteordevelopment.meteorclient.mixin;

import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
import com.mojang.blaze3d.buffers.GpuBufferSlice;
import it.unimi.dsi.fastutil.Stack;
Expand Down Expand Up @@ -35,6 +36,7 @@
import net.minecraft.client.util.Handle;
import net.minecraft.client.util.ObjectAllocator;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.Vec3d;
import org.joml.Matrix4f;
Expand All @@ -55,6 +57,17 @@

@Mixin(WorldRenderer.class)
public abstract class WorldRendererMixin implements IWorldRenderer {

@Unique private NoRender noRender;
@Unique private ESP esp;

// if a world exists, meteor is initialised
@Inject(method = "setWorld", at = @At("TAIL"))
private void onSetWorld(ClientWorld world, CallbackInfo ci) {
esp = Modules.get().get(ESP.class);
noRender = Modules.get().get(NoRender.class);
}

@Inject(method = "checkEmpty", at = @At("HEAD"), cancellable = true)
private void onCheckEmpty(MatrixStack matrixStack, CallbackInfo info) {
info.cancel();
Expand All @@ -74,17 +87,17 @@ private boolean renderSetupTerrainModifyArg(boolean spectator) {

@WrapWithCondition(method = "method_62216", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WeatherRendering;renderPrecipitation(Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/util/math/Vec3d;Lnet/minecraft/client/render/state/WeatherRenderState;)V"))
private boolean shouldRenderPrecipitation(WeatherRendering instance, VertexConsumerProvider vertexConsumers, Vec3d pos, WeatherRenderState weatherRenderState) {
return !Modules.get().get(NoRender.class).noWeather();
return !noRender.noWeather();
}

@WrapWithCondition(method = "method_62216", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldBorderRendering;render(Lnet/minecraft/client/render/state/WorldBorderRenderState;Lnet/minecraft/util/math/Vec3d;DD)V"))
private boolean shouldRenderWorldBorder(WorldBorderRendering instance, WorldBorderRenderState state, Vec3d cameraPos, double viewDistanceBlocks, double farPlaneDistance) {
return !Modules.get().get(NoRender.class).noWorldBorder();
return !noRender.noWorldBorder();
}

@Inject(method = "hasBlindnessOrDarkness(Lnet/minecraft/client/render/Camera;)Z", at = @At("HEAD"), cancellable = true)
private void hasBlindnessOrDarkness(Camera camera, CallbackInfoReturnable<Boolean> info) {
if (Modules.get().get(NoRender.class).noBlindness() || Modules.get().get(NoRender.class).noDarkness()) info.setReturnValue(null);
if (noRender.noBlindness() || noRender.noDarkness()) info.setReturnValue(null);
}

// Entity Shaders
Expand Down Expand Up @@ -128,7 +141,7 @@ private void onPushEntityRenders(MatrixStack matrices, WorldRenderState worldSta
}

draw(worldState, matrices, PostProcessShaders.CHAMS, entity -> Color.WHITE);
draw(worldState, matrices, PostProcessShaders.ENTITY_OUTLINE, entity -> Modules.get().get(ESP.class).getColor(entity));
draw(worldState, matrices, PostProcessShaders.ENTITY_OUTLINE, entity -> esp.getColor(entity));
}

@Unique
Expand Down Expand Up @@ -170,6 +183,12 @@ private void draw(WorldRenderState worldState, MatrixStack matrices, EntityShade
meteor$popEntityOutlineFramebuffer();
}

@ModifyExpressionValue(method = "fillEntityRenderStates", at = @At(value= "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;isRenderingReady(Lnet/minecraft/util/math/BlockPos;)Z"))
boolean fillEntityRenderStatesIsRenderingReady(boolean original) {
if (esp.forceRender()) return true;
return original;
}

@Inject(method = "method_62214", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/OutlineVertexConsumerProvider;draw()V"))
private void onRender(CallbackInfo ci) {
PostProcessShaders.endRender();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,10 @@ private void onRender2D(Render2DEvent event) {
Renderer2D.COLOR.render();
}

public boolean forceRender() {
return isActive() && (mode.get() == Mode.Shader || mode.get() == Mode.Glow);
}

private boolean checkCorner(double x, double y, double z, Vector3d min, Vector3d max) {
pos.set(x, y, z);
if (!NametagUtils.to2D(pos, 1)) return true;
Expand Down