Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
3e266b0
depth test / block outline start / immediate region esp where you upd…
beanbag44 Jan 12, 2026
5622e6e
Merge branch '1.21.11' into improvement/renders
beanbag44 Jan 12, 2026
ad88469
fix static and dynamic render events
beanbag44 Jan 12, 2026
0aec9f4
remove shape caching
beanbag44 Jan 13, 2026
1efc938
initial working standard and sdf text world rendering
beanbag44 Jan 15, 2026
05e3c61
remove per render region origin
beanbag44 Jan 15, 2026
9edbe8f
move font rendering into RenderBuilder and fix dashed lines.
beanbag44 Jan 17, 2026
88ef317
Merge branch '1.21.11' into improvement/renders
beanbag44 Jan 17, 2026
f4980a9
cleanup
beanbag44 Jan 17, 2026
1c16e88
screen rendering
beanbag44 Jan 18, 2026
811efe0
render dash animation through end caps and fix antialiasing on dash ends
beanbag44 Jan 18, 2026
8d8a49e
fix glow rendering under outline and store a map of text style to tex…
beanbag44 Jan 18, 2026
8f82a34
improved line anti-aliasing
beanbag44 Jan 19, 2026
0e9eff8
fix zoom not affecting tracers
beanbag44 Jan 19, 2026
f0bbefd
have tracers go off-screen when a target is behind the camera
beanbag44 Jan 20, 2026
900a5e2
tracer improvements
beanbag44 Jan 20, 2026
a6e6a6f
item screen rendering
beanbag44 Jan 20, 2026
69038ea
vertex attribute based text sdf info
beanbag44 Jan 20, 2026
7aee494
Merge branch '1.21.11' into improvement/renders
beanbag44 Jan 20, 2026
0bf9d34
custom depth buffer layer indexing for the performance of batched ren…
beanbag44 Jan 21, 2026
30af1c2
world line rendering improvements
beanbag44 Jan 21, 2026
fbb6c52
more tracer improvements
beanbag44 Jan 21, 2026
ea9aefc
nametags
beanbag44 Jan 22, 2026
8708ad3
nametags improvements
beanbag44 Jan 23, 2026
d3653b0
fix world lines not rotating to face the camera
beanbag44 Jan 23, 2026
f329011
Merge branch '1.21.11' into improvement/renders
beanbag44 Jan 24, 2026
e3ce66a
Merge branch '1.21.11' into improvement/renders
beanbag44 Jan 27, 2026
7ee3e58
merge bug
beanbag44 Jan 27, 2026
63f3765
Merge remote-tracking branch 'NeoLambda/improvement/renders' into imp…
beanbag44 Jan 28, 2026
f762d5f
threaded font atlas generation
beanbag44 Jan 28, 2026
f05599c
image rendering
beanbag44 Jan 31, 2026
954f7ef
text and line setting groups
beanbag44 Feb 1, 2026
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
3 changes: 3 additions & 0 deletions src/main/java/com/lambda/mixin/entity/EntityMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

package com.lambda.mixin.entity;

import com.lambda.Lambda;
import com.lambda.event.EventFlow;
import com.lambda.event.events.EntityEvent;
import com.lambda.event.events.PlayerEvent;
Expand Down Expand Up @@ -151,11 +152,13 @@ private boolean modifyGetFlagGlowing(boolean original) {

@WrapWithCondition(method = "changeLookDirection", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;setYaw(F)V"))
private boolean wrapSetYaw(Entity instance, float yaw) {
if ((Object) this != getMc().player) return true;
return RotationManager.getLockYaw() == null;
}

@WrapWithCondition(method = "changeLookDirection", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;setPitch(F)V"))
private boolean wrapSetPitch(Entity instance, float yaw) {
if ((Object) this != Lambda.getMc().player) return true;
return RotationManager.getLockPitch() == null;
}

Expand Down
8 changes: 4 additions & 4 deletions src/main/java/com/lambda/mixin/items/BarrierBlockMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

package com.lambda.mixin.items;

import com.lambda.module.modules.render.BlockESP;
import com.lambda.module.modules.render.Search;
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
import net.minecraft.block.BarrierBlock;
import net.minecraft.block.BlockRenderType;
Expand All @@ -29,12 +29,12 @@
@Mixin(BarrierBlock.class)
public class BarrierBlockMixin {
/**
* Modifies barrier block render type to {@link BlockRenderType#MODEL} when {@link BlockESP} is enabled and {@link BlockESP#getBarrier()} is true
* Modifies barrier block render type to {@link BlockRenderType#MODEL} when {@link Search} is enabled and {@link Search#getBarrier()} is true
*/
@ModifyReturnValue(method = "getRenderType", at = @At("RETURN"))
private BlockRenderType modifyGetRenderType(BlockRenderType original, BlockState state) {
if (BlockESP.INSTANCE.isEnabled()
&& BlockESP.getBarrier()
if (Search.INSTANCE.isEnabled()
&& Search.getBarrier()
&& state.getBlock() == Blocks.BARRIER
) return BlockRenderType.MODEL;
return original;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

package com.lambda.mixin.render;

import com.lambda.module.modules.render.BlockESP;
import com.lambda.module.modules.render.Search;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.client.render.block.BlockRenderManager;
Expand All @@ -31,9 +31,9 @@
public abstract class BlockRenderManagerMixin {
@Inject(method = "getModel", at = @At("HEAD"), cancellable = true)
private void getModel(BlockState state, CallbackInfoReturnable<BlockStateModel> cir) {
if (BlockESP.INSTANCE.isEnabled()
&& BlockESP.getBarrier()
if (Search.INSTANCE.isEnabled()
&& Search.getBarrier()
&& state.getBlock() == Blocks.BARRIER
) cir.setReturnValue(BlockESP.getModel());
) cir.setReturnValue(Search.getModel());
}
}
22 changes: 20 additions & 2 deletions src/main/java/com/lambda/mixin/render/GameRendererMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.lambda.event.events.RenderEvent;
import com.lambda.graphics.RenderMain;
import com.lambda.gui.DearImGui;
import com.lambda.module.modules.render.BlockOutline;
import com.lambda.module.modules.render.NoRender;
import com.lambda.module.modules.render.Zoom;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
Expand All @@ -40,6 +41,7 @@
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(GameRenderer.class)
public class GameRendererMixin {
Expand All @@ -53,8 +55,7 @@ private void updateTargetedEntityInvoke(float tickDelta, CallbackInfo info) {
@WrapOperation(method = "renderWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;render(Lnet/minecraft/client/util/ObjectAllocator;Lnet/minecraft/client/render/RenderTickCounter;ZLnet/minecraft/client/render/Camera;Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;Lcom/mojang/blaze3d/buffers/GpuBufferSlice;Lorg/joml/Vector4f;Z)V"))
void onRenderWorld(WorldRenderer instance, ObjectAllocator allocator, RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera, Matrix4f positionMatrix, Matrix4f basicProjectionMatrix, Matrix4f projectionMatrix, GpuBufferSlice fogBuffer, Vector4f fogColor, boolean renderSky, Operation<Void> original) {
original.call(instance, allocator, tickCounter, renderBlockOutline, camera, positionMatrix, basicProjectionMatrix, projectionMatrix, fogBuffer, fogColor, renderSky);

RenderMain.render3D(positionMatrix, projectionMatrix);
RenderMain.render3D(positionMatrix, basicProjectionMatrix);
}

@ModifyExpressionValue(method = "renderWorld", at = @At(value = "INVOKE", target = "Ljava/lang/Math;max(FF)F", ordinal = 0))
Expand All @@ -69,11 +70,28 @@ private void injectShowFloatingItem(ItemStack floatingItem, CallbackInfo ci) {

@ModifyReturnValue(method = "getFov", at = @At("RETURN"))
private float modifyGetFov(float original) {
Zoom.updateCurrentZoom();
return original / Zoom.getLerpedZoom();
}

/**
* Inject screen rendering after InGameHud.render() but before overlays/screens.
* This makes Lambda's screen renders appear:
* - Above: hotbar, held items, health bars
* - Below: inventory GUI, chat, escape menu
*/
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/InGameHud;render(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/client/render/RenderTickCounter;)V", shift = At.Shift.AFTER))
private void onHudRenderComplete(RenderTickCounter tickCounter, boolean tick, CallbackInfo ci) {
RenderMain.renderScreen();
}

@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/render/GuiRenderer;render(Lcom/mojang/blaze3d/buffers/GpuBufferSlice;)V", shift = At.Shift.AFTER))
private void onGuiRenderComplete(RenderTickCounter tickCounter, boolean tick, CallbackInfo ci) {
DearImGui.INSTANCE.render();
}

@Inject(method = "shouldRenderBlockOutline()Z", at = @At("HEAD"), cancellable = true)
private void injectShouldRenderBlockOutline(CallbackInfoReturnable<Boolean> cir) {
if (BlockOutline.INSTANCE.isEnabled()) cir.setReturnValue(false);
}
}
11 changes: 11 additions & 0 deletions src/main/java/com/lambda/mixin/render/InGameHudMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@

package com.lambda.mixin.render;

import com.lambda.event.EventFlow;
import com.lambda.event.events.HudRenderEvent;
import com.lambda.module.modules.render.NoRender;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import net.minecraft.client.gui.DrawContext;
Expand Down Expand Up @@ -82,4 +84,13 @@ private void injectRenderScoreboardSidebar(DrawContext drawContext, ScoreboardOb
private void injectRenderCrosshair(DrawContext context, RenderTickCounter tickCounter, CallbackInfo ci) {
if (NoRender.INSTANCE.isEnabled() && NoRender.getNoCrosshair()) ci.cancel();
}

/**
* Fire HudRenderEvent at the end of HUD rendering to allow Lambda modules
* to render items and other GUI elements using the valid DrawContext.
*/
@Inject(method = "render", at = @At("RETURN"))
private void onRenderEnd(DrawContext context, RenderTickCounter tickCounter, CallbackInfo ci) {
EventFlow.post(new HudRenderEvent(context));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,15 @@

import com.lambda.Lambda;
import com.lambda.interaction.managers.rotating.RotationManager;
import com.lambda.module.modules.render.Nametags;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import net.minecraft.client.render.entity.LivingEntityRenderer;
import net.minecraft.entity.LivingEntity;
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.CallbackInfoReturnable;

import static com.lambda.util.math.LinearKt.lerp;

Expand Down Expand Up @@ -56,4 +59,10 @@ private float wrapGetLerpedPitch(LivingEntity livingEntity, float v, Operation<F

return lerp(v, RotationManager.getPrevServerRotation().getPitchF(), headPitch);
}

@Inject(method = "hasLabel(Lnet/minecraft/entity/LivingEntity;D)Z", at = @At("HEAD"), cancellable = true)
private void injectHasLabel(LivingEntity livingEntity, double d, CallbackInfoReturnable<Boolean> cir) {
if (Nametags.INSTANCE.isEnabled() && Nametags.shouldRenderNametag(livingEntity))
cir.setReturnValue(false);
}
}
7 changes: 5 additions & 2 deletions src/main/kotlin/com/lambda/config/Setting.kt
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,7 @@ import kotlin.reflect.KProperty
* ```
*
* @property defaultValue The default value of the setting.
* @property description A description of the setting.
* @property type The type reflection of the setting.
* @property visibility A function that determines whether the setting is visible.
*/
abstract class SettingCore<T>(
var defaultValue: T,
Expand Down Expand Up @@ -160,6 +158,7 @@ class Setting<T : SettingCore<R>, R>(
val originalCore = core
var disabled = { false }
var groups: MutableList<List<NamedEnum>> = mutableListOf()
var buttonMenu: NamedEnum? = null

var value by this

Expand Down Expand Up @@ -227,6 +226,10 @@ class Setting<T : SettingCore<R>, R>(
path?.let { groups.add(listOf(it)) }
}

fun buttonMenu(menu: NamedEnum) = apply {
buttonMenu = menu
}

fun trySetValue(newValue: R) {
if (newValue == value) {
ConfigCommand.info(notChangedMessage())
Expand Down
1 change: 1 addition & 0 deletions src/main/kotlin/com/lambda/config/SettingGroup.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package com.lambda.config

interface ISettingGroup {
val settings: MutableList<Setting<*, *>>
val visibility: () -> Boolean
}

abstract class SettingGroup(c: Configurable) : ISettingGroup {
Expand Down
Loading