diff --git a/src/main/java/com/lambda/mixin/baritone/BaritonePlayerContextMixin.java b/src/main/java/com/lambda/mixin/baritone/BaritonePlayerContextMixin.java index fc31a8015..9c0161660 100644 --- a/src/main/java/com/lambda/mixin/baritone/BaritonePlayerContextMixin.java +++ b/src/main/java/com/lambda/mixin/baritone/BaritonePlayerContextMixin.java @@ -22,12 +22,11 @@ import baritone.utils.player.BaritonePlayerContext; import com.lambda.interaction.BaritoneManager; import com.lambda.interaction.managers.rotating.RotationManager; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(value = BaritonePlayerContext.class, remap = false) // fix compileJava warning public class BaritonePlayerContextMixin { @@ -36,13 +35,11 @@ public class BaritonePlayerContextMixin { private Baritone baritone; // Let baritone know the actual rotation - @Inject(method = "playerRotations", at = @At("HEAD"), cancellable = true, remap = false) - void syncRotationWithBaritone(CallbackInfoReturnable cir) { - if (baritone != BaritoneManager.getPrimary()) return; + @ModifyReturnValue(method = "playerRotations", at = @At("RETURN"), remap = false) + Rotation syncRotationWithBaritone(Rotation original) { + if (baritone != BaritoneManager.getPrimary()) + return original; - RotationManager rm = RotationManager.INSTANCE; - cir.setReturnValue(new Rotation( - (float) rm.getActiveRotation().getYaw(), (float) rm.getActiveRotation().getPitch()) - ); + return new Rotation((float) RotationManager.getActiveRotation().getYaw(), (float) RotationManager.getActiveRotation().getPitch()); } } diff --git a/src/main/java/com/lambda/mixin/client/sound/SoundSystemMixin.java b/src/main/java/com/lambda/mixin/client/sound/SoundSystemMixin.java index 0df20004e..eaedb7ef0 100644 --- a/src/main/java/com/lambda/mixin/client/sound/SoundSystemMixin.java +++ b/src/main/java/com/lambda/mixin/client/sound/SoundSystemMixin.java @@ -24,7 +24,6 @@ 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; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(SoundSystem.class) diff --git a/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java b/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java index 752cd235a..2f9fefe31 100644 --- a/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java +++ b/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java @@ -32,6 +32,7 @@ import com.llamalad7.mixinextras.expression.Definition; import com.llamalad7.mixinextras.expression.Expression; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; @@ -46,13 +47,13 @@ import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; import net.minecraft.util.Hand; import net.minecraft.util.math.Vec3d; +import org.objectweb.asm.Opcodes; 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; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import java.util.Objects; @@ -140,13 +141,13 @@ boolean modifyIsSprinting(boolean original) { return EventFlow.post(new MovementEvent.Sprint(original)).getSprint(); } - @Inject(method = "isSneaking", at = @At(value = "HEAD"), cancellable = true) - void injectSneakingInput(CallbackInfoReturnable cir) { + @ModifyReturnValue(method = "isSneaking", at = @At("RETURN")) + boolean injectSneakingInput(boolean original) { ClientPlayerEntity self = (ClientPlayerEntity) (Object) this; - if (self != Lambda.getMc().player) return; + if (self != Lambda.getMc().player || + self.input == null) return original; - if (self.input == null) return; - cir.setReturnValue(EventFlow.post(new MovementEvent.Sneak(self.input.playerInput.sneak())).getSneak()); + return EventFlow.post(new MovementEvent.Sneak(self.input.playerInput.sneak())).getSneak(); } @WrapMethod(method = "tick") @@ -204,7 +205,7 @@ public void injectUpdateHealth(float health, CallbackInfo ci) { * } * } */ - @ModifyExpressionValue(method = "tickNausea", at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;")) + @ModifyExpressionValue(method = "tickNausea", at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;", opcode = Opcodes.GETFIELD)) Screen modifyCurrentScreen(Screen original) { if (PortalGui.INSTANCE.isEnabled()) return null; else return original; diff --git a/src/main/java/com/lambda/mixin/entity/EntityMixin.java b/src/main/java/com/lambda/mixin/entity/EntityMixin.java index 7b1e48152..bb116af94 100644 --- a/src/main/java/com/lambda/mixin/entity/EntityMixin.java +++ b/src/main/java/com/lambda/mixin/entity/EntityMixin.java @@ -25,10 +25,10 @@ import com.lambda.module.modules.render.NoRender; import com.lambda.util.math.Vec2d; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityPose; import net.minecraft.entity.MovementType; @@ -39,7 +39,6 @@ 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; import static com.lambda.Lambda.getMc; @@ -160,18 +159,26 @@ private boolean wrapSetPitch(Entity instance, float yaw) { return RotationManager.getLockPitch() == null; } - @Inject(method = "isSprinting()Z", at = @At("HEAD"), cancellable = true) - private void injectIsSprinting(CallbackInfoReturnable cir) { + @ModifyReturnValue(method = "isSprinting()Z", at = @At("RETURN")) + private boolean injectIsSprinting(boolean original) { var player = getMc().player; - if ((Object) this != getMc().player) return; - if (ElytraFly.INSTANCE.isEnabled() && ElytraFly.getMode() == ElytraFly.FlyMode.Bounce && player.isGliding()) cir.setReturnValue(true); + if ((Object) this != getMc().player) return original; + + if (ElytraFly.INSTANCE.isEnabled() && ElytraFly.getMode() == ElytraFly.FlyMode.Bounce && player.isGliding()) + return true; + + return original; } - @Inject(method = "getPose", at = @At("HEAD"), cancellable = true) - private void injectGetPose(CallbackInfoReturnable cir) { - var entity = (Entity) (Object) this; - if (!(entity instanceof ClientPlayerEntity player)) return; - if (ElytraFly.INSTANCE.isEnabled() && ElytraFly.getMode() == ElytraFly.FlyMode.Bounce && player.isGliding()) cir.setReturnValue(EntityPose.GLIDING); + @ModifyReturnValue(method = "getPose", at = @At("RETURN")) + private EntityPose injectGetPose(EntityPose original) { + var player = getMc().player; + if ((Object) this != getMc().player) return original; + + if (ElytraFly.INSTANCE.isDisabled() || + ElytraFly.getMode() != ElytraFly.FlyMode.Bounce || !player.isGliding()) return original; + + return EntityPose.GLIDING; } @ModifyExpressionValue(method = "getHorizontalFacing", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getYaw()F")) diff --git a/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java b/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java index 02ba9ed72..1c3d40f66 100644 --- a/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java +++ b/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java @@ -24,6 +24,7 @@ import com.lambda.module.modules.movement.ElytraFly; import com.lambda.module.modules.movement.Velocity; import com.lambda.module.modules.render.ViewModel; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; @@ -38,7 +39,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Slice; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(LivingEntity.class) public abstract class LivingEntityMixin extends EntityMixin { @@ -185,9 +185,11 @@ private void wrapPushAwayFrom(Entity entity, Operation original) { original.call(entity); } - @Inject(method = "isGliding", at = @At("HEAD"), cancellable = true) - private void injectIsGliding(CallbackInfoReturnable cir) { - if (lambda$instance != Lambda.getMc().player) return; - cir.setReturnValue(ElytraFly.isGliding()); + @SuppressWarnings("ConstantConditions") + @ModifyReturnValue(method = "isGliding", at = @At("RETURN")) + private boolean injectIsGliding(boolean original) { + if (lambda$instance != Lambda.getMc().player) return original; + + return ElytraFly.isGliding(); } } diff --git a/src/main/java/com/lambda/mixin/entity/PlayerEntityMixin.java b/src/main/java/com/lambda/mixin/entity/PlayerEntityMixin.java index 15acd2497..d8aaeece9 100644 --- a/src/main/java/com/lambda/mixin/entity/PlayerEntityMixin.java +++ b/src/main/java/com/lambda/mixin/entity/PlayerEntityMixin.java @@ -46,14 +46,4 @@ private float wrapHeadYaw(PlayerEntity instance, Operation original) { Float yaw = RotationManager.getHeadYaw(); return (yaw != null) ? yaw : original.call(instance); } - -// @WrapOperation(method = "attack", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;getYaw()F")) -// private float wrapAttackYaw(PlayerEntity instance, Operation original) { -// if ((Object) this != Lambda.getMc().player) { -// return original.call(instance); -// } -// -// Float yaw = RotationManager.getMovementYaw(); -// return (yaw != null) ? yaw : original.call(instance); -// } } diff --git a/src/main/java/com/lambda/mixin/input/KeyboardMixin.java b/src/main/java/com/lambda/mixin/input/KeyboardMixin.java index 8e913469d..78394287d 100644 --- a/src/main/java/com/lambda/mixin/input/KeyboardMixin.java +++ b/src/main/java/com/lambda/mixin/input/KeyboardMixin.java @@ -28,27 +28,13 @@ import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.InputUtil; 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; -/** - * Mixin to intercept keyboard input events. - * - * Note: In 1.21.11, onKey/onChar methods were refactored to use KeyInput/CharInput records. - * - onKey(long window, int action, KeyInput input) where KeyInput has key, scancode, modifiers - * - onChar(long window, CharInput input) where CharInput has codepoint, modifiers - */ @Mixin(Keyboard.class) public class KeyboardMixin { @WrapMethod(method = "onKey") private void onKey(long window, int action, KeyInput input, Operation original) { EventFlow.post(new ButtonEvent.Keyboard.Press(input.key(), input.scancode(), action, input.modifiers())); original.call(window, action, input); - } - - @Inject(method = "onKey", at = @At("RETURN")) - private void onKeyTail(long window, int action, KeyInput input, CallbackInfo ci) { int key = input.key(); if (!InventoryMove.getShouldMove() || !InventoryMove.isKeyMovementRelated(key)) return; InputUtil.Key fromCode = InputUtil.fromKeyCode(input); diff --git a/src/main/java/com/lambda/mixin/input/MouseMixin.java b/src/main/java/com/lambda/mixin/input/MouseMixin.java index c78c2aa73..01968c908 100644 --- a/src/main/java/com/lambda/mixin/input/MouseMixin.java +++ b/src/main/java/com/lambda/mixin/input/MouseMixin.java @@ -26,6 +26,7 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.Mouse; import net.minecraft.client.input.MouseInput; +import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -60,7 +61,7 @@ private void onCursorPos(long window, double x, double y, Operation origin original.call(window, x, y); } - @ModifyExpressionValue(method = "updateMouse", at = @At(value = "FIELD", target = "Lnet/minecraft/client/option/GameOptions;smoothCameraEnabled:Z")) + @ModifyExpressionValue(method = "updateMouse", at = @At(value = "FIELD", target = "Lnet/minecraft/client/option/GameOptions;smoothCameraEnabled:Z", opcode = Opcodes.GETFIELD)) private boolean modifySmoothCameraEnabled(boolean original) { if (Zoom.INSTANCE.isEnabled() && Zoom.getSmoothMovement()) return true; else return original; diff --git a/src/main/java/com/lambda/mixin/network/ClientConnectionMixin.java b/src/main/java/com/lambda/mixin/network/ClientConnectionMixin.java index d9eb35860..1fd6e1f02 100644 --- a/src/main/java/com/lambda/mixin/network/ClientConnectionMixin.java +++ b/src/main/java/com/lambda/mixin/network/ClientConnectionMixin.java @@ -34,7 +34,6 @@ import org.spongepowered.asm.mixin.Final; 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; diff --git a/src/main/java/com/lambda/mixin/network/ClientLoginNetworkMixin.java b/src/main/java/com/lambda/mixin/network/ClientLoginNetworkMixin.java index 3fd1f32cc..bd173062d 100644 --- a/src/main/java/com/lambda/mixin/network/ClientLoginNetworkMixin.java +++ b/src/main/java/com/lambda/mixin/network/ClientLoginNetworkMixin.java @@ -28,7 +28,6 @@ @Mixin(ClientLoginNetworkHandler.class) public class ClientLoginNetworkMixin { - @Inject(method = "onSuccess(Lnet/minecraft/network/packet/s2c/login/LoginSuccessS2CPacket;)V", at = @At("HEAD")) private void onSuccess(LoginSuccessS2CPacket packet, CallbackInfo ci) { EventFlow.post(new ConnectionEvent.Connect.Post(packet.profile())); diff --git a/src/main/java/com/lambda/mixin/network/ClientPlayNetworkHandlerMixin.java b/src/main/java/com/lambda/mixin/network/ClientPlayNetworkHandlerMixin.java index 758a17444..a449c4380 100644 --- a/src/main/java/com/lambda/mixin/network/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/com/lambda/mixin/network/ClientPlayNetworkHandlerMixin.java @@ -74,8 +74,6 @@ private void onScreenHandlerSlotUpdate(ScreenHandlerSlotUpdateS2CPacket packet, * this.seenInsecureChatWarning = true; * } * } - * - * Note: In 1.21.11, displayedUnsecureChatWarning was renamed to seenInsecureChatWarning. */ @ModifyExpressionValue(method = "onGameJoin(Lnet/minecraft/network/packet/s2c/play/GameJoinS2CPacket;)V", at = @At(value = "FIELD", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;seenInsecureChatWarning:Z", ordinal = 0)) public boolean onServerMetadata(boolean original) { @@ -107,7 +105,7 @@ public boolean onServerMetadata(boolean original) { */ @Inject(method = "onExplosion(Lnet/minecraft/network/packet/s2c/play/ExplosionS2CPacket;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/packet/s2c/play/ExplosionS2CPacket;playerKnockback()Ljava/util/Optional;"), cancellable = true) void injectVelocity(ExplosionS2CPacket packet, CallbackInfo ci) { - if (Velocity.getExplosion() && Velocity.INSTANCE.isEnabled()) ci.cancel(); + if (Velocity.INSTANCE.isEnabled() && Velocity.getExplosion()) ci.cancel(); } @WrapMethod(method = "onScreenHandlerSlotUpdate") diff --git a/src/main/java/com/lambda/mixin/render/ArmorFeatureRendererMixin.java b/src/main/java/com/lambda/mixin/render/ArmorFeatureRendererMixin.java index 77ca02496..ac7bd7810 100644 --- a/src/main/java/com/lambda/mixin/render/ArmorFeatureRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/ArmorFeatureRendererMixin.java @@ -18,10 +18,8 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.NoRender; -import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.feature.ArmorFeatureRenderer; -import net.minecraft.client.render.entity.state.BipedEntityRenderState; import net.minecraft.client.render.entity.state.EntityRenderState; import net.minecraft.client.util.math.MatrixStack; import org.spongepowered.asm.mixin.Mixin; diff --git a/src/main/java/com/lambda/mixin/render/BackgroundRendererMixin.java b/src/main/java/com/lambda/mixin/render/BackgroundRendererMixin.java deleted file mode 100644 index 887ca3b6b..000000000 --- a/src/main/java/com/lambda/mixin/render/BackgroundRendererMixin.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2025 Lambda - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.lambda.mixin.render; - -import com.lambda.module.modules.render.NoRender; -import net.minecraft.client.render.fog.BlindnessEffectFogModifier; -import net.minecraft.client.render.fog.DarknessEffectFogModifier; -import net.minecraft.block.enums.CameraSubmersionType; -import net.minecraft.entity.Entity; -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; - -/** - * Mixins to disable blindness and darkness fog effects when NoRender is enabled. - * - * Note: The fog system was completely rewritten in 1.21.11. - * BackgroundRenderer was replaced with FogRenderer and fog modifiers are now separate classes. - */ -@Mixin(BlindnessEffectFogModifier.class) -public class BackgroundRendererMixin { - - @Inject(method = "applyDarknessModifier", at = @At("HEAD"), cancellable = true) - private void injectShouldApplyBlindness(LivingEntity cameraEntity, float darkness, float tickProgress, CallbackInfoReturnable cir) { - if (NoRender.getNoBlindness() && NoRender.INSTANCE.isEnabled()) { - cir.setReturnValue(0.0f); - } - } -} diff --git a/src/main/java/com/lambda/mixin/render/CameraMixin.java b/src/main/java/com/lambda/mixin/render/CameraMixin.java index 13ee986f3..f067351b4 100644 --- a/src/main/java/com/lambda/mixin/render/CameraMixin.java +++ b/src/main/java/com/lambda/mixin/render/CameraMixin.java @@ -48,10 +48,10 @@ public abstract class CameraMixin { public abstract float getYaw(); @Shadow - public float yaw; + private float yaw; @Shadow - public float pitch; + private float pitch; @Inject(method = "update", at = @At("TAIL")) private void onUpdate(World area, Entity focusedEntity, boolean thirdPerson, boolean inverseView, float tickProgress, CallbackInfo ci) { diff --git a/src/main/java/com/lambda/mixin/render/CapeFeatureRendererMixin.java b/src/main/java/com/lambda/mixin/render/CapeFeatureRendererMixin.java index 07be67e4a..e421cb8d5 100644 --- a/src/main/java/com/lambda/mixin/render/CapeFeatureRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/CapeFeatureRendererMixin.java @@ -31,9 +31,6 @@ /** * Mixin to override cape textures with Lambda capes. - * - * Note: In 1.21.11, render method uses OrderedRenderCommandQueue instead of VertexConsumerProvider. - * Cape texture is now accessed via skinTextures.cape().texturePath() instead of capeTexture(). */ @Mixin(CapeFeatureRenderer.class) public class CapeFeatureRendererMixin { diff --git a/src/main/java/com/lambda/mixin/render/ChatInputSuggestorMixin.java b/src/main/java/com/lambda/mixin/render/ChatInputSuggestorMixin.java index 1978e42a7..f0a1bceba 100644 --- a/src/main/java/com/lambda/mixin/render/ChatInputSuggestorMixin.java +++ b/src/main/java/com/lambda/mixin/render/ChatInputSuggestorMixin.java @@ -18,13 +18,13 @@ package com.lambda.mixin.render; import com.lambda.command.CommandManager; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.mojang.brigadier.CommandDispatcher; import net.minecraft.client.gui.screen.ChatInputSuggestor; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.command.CommandSource; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; diff --git a/src/main/java/com/lambda/mixin/render/DarknessEffectFogMixin.java b/src/main/java/com/lambda/mixin/render/DarknessEffectFogMixin.java deleted file mode 100644 index af0c941e7..000000000 --- a/src/main/java/com/lambda/mixin/render/DarknessEffectFogMixin.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2025 Lambda - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.lambda.mixin.render; - -import com.lambda.module.modules.render.NoRender; -import net.minecraft.client.render.fog.DarknessEffectFogModifier; -import net.minecraft.block.enums.CameraSubmersionType; -import net.minecraft.entity.Entity; -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; - -/** - * Mixin to disable darkness fog effect when NoRender is enabled. - */ -@Mixin(DarknessEffectFogModifier.class) -public class DarknessEffectFogMixin { - - @Inject(method = "applyDarknessModifier", at = @At("HEAD"), cancellable = true) - private void injectShouldApplyDarkness(LivingEntity cameraEntity, float darkness, float tickProgress, CallbackInfoReturnable cir) { - if (NoRender.getNoDarkness() && NoRender.INSTANCE.isEnabled()) { - cir.setReturnValue(0.0f); - } - } -} diff --git a/src/main/java/com/lambda/mixin/render/DebugHudMixin.java b/src/main/java/com/lambda/mixin/render/DebugHudMixin.java deleted file mode 100644 index 3c0a42c54..000000000 --- a/src/main/java/com/lambda/mixin/render/DebugHudMixin.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2025 Lambda - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.lambda.mixin.render; - -import net.minecraft.client.gui.hud.DebugHud; -import org.spongepowered.asm.mixin.Mixin; - -@Mixin(DebugHud.class) -public class DebugHudMixin { -// @Inject(method = "getRightText", at = @At("TAIL")) -// private void onGetRightText(CallbackInfoReturnable> cir) { -// DebugInfoHud.addDebugInfo(cir.getReturnValue()); -// } -} diff --git a/src/main/java/com/lambda/mixin/render/DebugRendererMixin.java b/src/main/java/com/lambda/mixin/render/DebugRendererMixin.java deleted file mode 100644 index 8b703e194..000000000 --- a/src/main/java/com/lambda/mixin/render/DebugRendererMixin.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2025 Lambda - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.lambda.mixin.render; - -import com.lambda.module.modules.debug.DebugRendererModule; -import net.minecraft.client.render.Frustum; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.debug.*; -import net.minecraft.client.util.math.MatrixStack; -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; - -@Mixin(DebugRenderer.class) -public class DebugRendererMixin { -// @Inject(method = "render", at = @At("TAIL")) -// private void onRender(MatrixStack matrices, Frustum frustum, VertexConsumerProvider.Immediate vertexConsumers, double cameraX, double cameraY, double cameraZ, CallbackInfo ci) { -// DebugRendererModule.render(matrices, vertexConsumers, cameraX, cameraY, cameraZ); -// } -} diff --git a/src/main/java/com/lambda/mixin/render/ElytraFeatureRendererMixin.java b/src/main/java/com/lambda/mixin/render/ElytraFeatureRendererMixin.java index 72dc2c384..f4a556f84 100644 --- a/src/main/java/com/lambda/mixin/render/ElytraFeatureRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/ElytraFeatureRendererMixin.java @@ -35,9 +35,6 @@ /** * Mixin to override elytra textures with Lambda capes and disable elytra rendering. - * - * Note: In 1.21.11, render method uses OrderedRenderCommandQueue instead of VertexConsumerProvider. - * getTexture is now a private static method. */ @Mixin(ElytraFeatureRenderer.class) public class ElytraFeatureRendererMixin { diff --git a/src/main/java/com/lambda/mixin/render/HeadFeatureRendererMixin.java b/src/main/java/com/lambda/mixin/render/HeadFeatureRendererMixin.java index bb8416614..b4858d336 100644 --- a/src/main/java/com/lambda/mixin/render/HeadFeatureRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/HeadFeatureRendererMixin.java @@ -18,11 +18,9 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.NoRender; -import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.feature.HeadFeatureRenderer; import net.minecraft.client.render.entity.state.EntityRenderState; -import net.minecraft.client.render.entity.state.LivingEntityRenderState; import net.minecraft.client.util.math.MatrixStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/main/java/com/lambda/mixin/render/InGameHudMixin.java b/src/main/java/com/lambda/mixin/render/InGameHudMixin.java index d6ca4f2ca..3fc01c204 100644 --- a/src/main/java/com/lambda/mixin/render/InGameHudMixin.java +++ b/src/main/java/com/lambda/mixin/render/InGameHudMixin.java @@ -17,7 +17,6 @@ package com.lambda.mixin.render; -import com.lambda.gui.DearImGui; import com.lambda.module.modules.render.NoRender; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import net.minecraft.client.gui.DrawContext; diff --git a/src/main/java/com/lambda/mixin/render/LightmapTextureManagerMixin.java b/src/main/java/com/lambda/mixin/render/LightmapTextureManagerMixin.java index 48dec03ed..5e663aec8 100644 --- a/src/main/java/com/lambda/mixin/render/LightmapTextureManagerMixin.java +++ b/src/main/java/com/lambda/mixin/render/LightmapTextureManagerMixin.java @@ -33,8 +33,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.util.OptionalInt; - /** * Mixin to override lightmap for Fullbright/XRay and disable darkness effect. * @@ -54,7 +52,7 @@ private void injectUpdate(float tickProgress, CallbackInfo ci) { @ModifyReturnValue(method = "getDarkness", at = @At("RETURN")) private float modifyGetDarkness(float original, LivingEntity entity, float factor, float tickProgress) { - if (NoRender.getNoDarkness() && NoRender.INSTANCE.isEnabled()) return 0.0f; + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoDarkness()) return 0.0f; return original; } } diff --git a/src/main/java/com/lambda/mixin/render/SplashOverlayMixin.java b/src/main/java/com/lambda/mixin/render/SplashOverlayMixin.java index 59702b7a1..a9a2e15d6 100644 --- a/src/main/java/com/lambda/mixin/render/SplashOverlayMixin.java +++ b/src/main/java/com/lambda/mixin/render/SplashOverlayMixin.java @@ -18,13 +18,13 @@ package com.lambda.mixin.render; import com.lambda.util.LambdaResourceKt; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.client.gui.screen.SplashOverlay; import net.minecraft.client.texture.ReloadableTexture; import net.minecraft.resource.ResourceFactory; import net.minecraft.util.Identifier; import net.minecraft.util.math.ColorHelper; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; diff --git a/src/main/java/com/lambda/mixin/render/StatusEffectFogModifierMixin.java b/src/main/java/com/lambda/mixin/render/StatusEffectFogModifierMixin.java new file mode 100644 index 000000000..7e3c43460 --- /dev/null +++ b/src/main/java/com/lambda/mixin/render/StatusEffectFogModifierMixin.java @@ -0,0 +1,45 @@ +/* + * Copyright 2026 Lambda + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.lambda.mixin.render; + +import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import net.minecraft.client.render.fog.StatusEffectFogModifier; +import net.minecraft.entity.effect.StatusEffect; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.registry.entry.RegistryEntry; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(StatusEffectFogModifier.class) +public abstract class StatusEffectFogModifierMixin { + @Shadow + public abstract RegistryEntry getStatusEffect(); + + @ModifyReturnValue(method = "shouldApply", at = @At("RETURN")) + boolean modifyShouldApply(boolean original) { + if (NoRender.INSTANCE.isDisabled()) return original; + + if ((NoRender.getNoBlindness() && getStatusEffect() == StatusEffects.BLINDNESS) || + (NoRender.getNoDarkness() && getStatusEffect() == StatusEffects.DARKNESS)) + return false; + + return original; + } +} diff --git a/src/main/java/com/lambda/mixin/render/WorldBorderRenderingMixin.java b/src/main/java/com/lambda/mixin/render/WorldBorderRenderingMixin.java index 9553a39a5..e26418940 100644 --- a/src/main/java/com/lambda/mixin/render/WorldBorderRenderingMixin.java +++ b/src/main/java/com/lambda/mixin/render/WorldBorderRenderingMixin.java @@ -21,7 +21,6 @@ import net.minecraft.client.render.WorldBorderRendering; import net.minecraft.client.render.state.WorldBorderRenderState; import net.minecraft.util.math.Vec3d; -import net.minecraft.world.border.WorldBorder; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java b/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java index 313cb6ddd..bfd3189fd 100644 --- a/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java @@ -21,6 +21,7 @@ import com.lambda.module.modules.render.CameraTweaks; import com.lambda.module.modules.render.NoRender; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import net.minecraft.client.render.Camera; import net.minecraft.client.render.WorldRenderer; import net.minecraft.entity.Entity; @@ -53,4 +54,12 @@ private boolean renderSetupTerrainModifyArg(boolean spectator) { private boolean modifyIsThirdPerson(boolean original) { return Freecam.INSTANCE.isEnabled() || original; } + + @ModifyReturnValue(method = "hasBlindnessOrDarkness", at = @At("RETURN")) + boolean modHasBlindnessOrDarkness(boolean original) { + if (NoRender.INSTANCE.isEnabled() && (NoRender.getNoBlindness() || NoRender.getNoDarkness())) + return false; + + return original; + } } diff --git a/src/main/java/com/lambda/mixin/render/blockentity/BlockEntityRenderDispatcherMixin.java b/src/main/java/com/lambda/mixin/render/blockentity/BlockEntityRenderDispatcherMixin.java index 784faeee0..b2da13422 100644 --- a/src/main/java/com/lambda/mixin/render/blockentity/BlockEntityRenderDispatcherMixin.java +++ b/src/main/java/com/lambda/mixin/render/blockentity/BlockEntityRenderDispatcherMixin.java @@ -22,11 +22,11 @@ import net.minecraft.client.render.block.entity.BlockEntityRenderManager; import net.minecraft.client.render.block.entity.state.BlockEntityRenderState; import net.minecraft.client.render.command.ModelCommandRenderer; +import org.jspecify.annotations.Nullable; 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 org.jspecify.annotations.Nullable; /** * Mixin to disable block entity rendering when NoRender is enabled. diff --git a/src/main/java/com/lambda/mixin/world/AbstractBlockMixin.java b/src/main/java/com/lambda/mixin/world/AbstractBlockMixin.java index b01c654a2..fddcbc1d0 100644 --- a/src/main/java/com/lambda/mixin/world/AbstractBlockMixin.java +++ b/src/main/java/com/lambda/mixin/world/AbstractBlockMixin.java @@ -20,9 +20,6 @@ import com.lambda.module.modules.render.XRay; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import net.minecraft.block.AbstractBlock; -import net.minecraft.block.BlockState; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.BlockView; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/main/java/com/lambda/mixin/world/BlockCollisionSpliteratorMixin.java b/src/main/java/com/lambda/mixin/world/BlockCollisionSpliteratorMixin.java index fbe3ee240..548f56e5e 100644 --- a/src/main/java/com/lambda/mixin/world/BlockCollisionSpliteratorMixin.java +++ b/src/main/java/com/lambda/mixin/world/BlockCollisionSpliteratorMixin.java @@ -20,12 +20,12 @@ import com.google.common.collect.AbstractIterator; import com.lambda.event.EventFlow; import com.lambda.event.events.WorldEvent; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.block.BlockState; import net.minecraft.block.ShapeContext; import net.minecraft.util.math.BlockPos; import net.minecraft.util.shape.VoxelShape; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.world.BlockCollisionSpliterator; import net.minecraft.world.CollisionView; import org.spongepowered.asm.mixin.Mixin; diff --git a/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java b/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java index 5b86cf797..9a0106fd8 100644 --- a/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java +++ b/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java @@ -20,13 +20,10 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.EntityEvent; import com.lambda.event.events.WorldEvent; -import com.lambda.module.modules.render.WorldColors; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; import net.minecraft.block.BlockState; import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/src/main/resources/lambda.mixins.json b/src/main/resources/lambda.mixins.json index 4c1ec3587..0326b21f6 100644 --- a/src/main/resources/lambda.mixins.json +++ b/src/main/resources/lambda.mixins.json @@ -31,7 +31,6 @@ "network.LoginKeyC2SPacketMixin", "render.AbstractTerrainRenderContextMixin", "render.ArmorFeatureRendererMixin", - "render.BackgroundRendererMixin", "render.BlockMixin", "render.BlockModelRendererMixin", "render.BlockRenderManagerMixin", @@ -42,9 +41,6 @@ "render.ChatInputSuggestorMixin", "render.ChatScreenMixin", "render.ChunkOcclusionDataBuilderMixin", - "render.DarknessEffectFogMixin", - "render.DebugHudMixin", - "render.DebugRendererMixin", "render.DrawContextMixin", "render.ElytraFeatureRendererMixin", "render.EntityRendererMixin", @@ -70,6 +66,7 @@ "render.SodiumWorldRendererMixin", "render.SplashOverlayMixin", "render.SplashOverlayMixin$LogoTextureMixin", + "render.StatusEffectFogModifierMixin", "render.TooltipComponentMixin", "render.WeatherRenderingMixin", "render.WorldBorderRenderingMixin", @@ -96,5 +93,6 @@ "overwrites": { "conformVisibility": true }, - "mixinextras": {"minVersion": "0.5.0"} + "mixinextras": { + "minVersion": "0.5.0"} }