From 4d0eac6d03b005f5756257909848849e897d09e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emy=20=F0=9F=92=9C?= Date: Mon, 26 Jan 2026 15:41:54 -0500 Subject: [PATCH 1/3] Changes most of Inject by WrapMethod and WrapOperation --- .../com/lambda/mixin/CrashReportMixin.java | 3 +- .../lambda/mixin/MinecraftClientMixin.java | 17 ++-- .../baritone/BaritonePlayerContextMixin.java | 17 ++-- .../mixin/baritone/LookBehaviourMixin.java | 31 +++---- .../mixin/client/sound/SoundSystemMixin.java | 17 ++-- .../ClientPlayInteractionManagerMixin.java | 85 +++++++++++-------- .../mixin/entity/ClientPlayerEntityMixin.java | 32 ++++--- .../com/lambda/mixin/entity/EntityMixin.java | 45 ++++++---- .../mixin/entity/HandledScreensMixin.java | 18 ++-- .../mixin/entity/LivingEntityMixin.java | 35 ++++---- .../com/lambda/mixin/input/KeyboardMixin.java | 13 --- .../mixin/network/ClientConnectionMixin.java | 71 +++++----------- .../network/ClientLoginNetworkMixin.java | 11 ++- .../ClientPlayNetworkHandlerMixin.java | 22 ++--- .../network/HandshakeC2SPacketMixin.java | 12 +-- .../network/LoginHelloC2SPacketMixin.java | 10 +-- .../mixin/network/LoginKeyC2SPacketMixin.java | 10 +-- .../AbstractTerrainRenderContextMixin.java | 18 ++-- .../render/ArmorFeatureRendererMixin.java | 2 - .../mixin/render/BackgroundRendererMixin.java | 3 - .../mixin/render/BlockModelRendererMixin.java | 16 ++-- .../mixin/render/BlockRenderManagerMixin.java | 13 +-- .../lambda/mixin/render/BossBarHudMixin.java | 12 +-- .../com/lambda/mixin/render/CameraMixin.java | 27 +++--- .../mixin/render/ChatInputSuggestorMixin.java | 4 +- .../lambda/mixin/render/ChatScreenMixin.java | 14 +-- .../ChunkOcclusionDataBuilderMixin.java | 12 +-- .../mixin/render/DarknessEffectFogMixin.java | 17 ++-- .../lambda/mixin/render/DebugHudMixin.java | 29 ------- .../mixin/render/DebugRendererMixin.java | 36 -------- .../lambda/mixin/render/DrawContextMixin.java | 31 +++---- .../mixin/render/EntityRendererMixin.java | 24 +++--- .../mixin/render/FluidRendererMixin.java | 26 +++--- .../lambda/mixin/render/FogRendererMixin.java | 13 +-- .../mixin/render/GameRendererMixin.java | 18 ++-- .../mixin/render/HandledScreenMixin.java | 31 +++---- .../render/HeadFeatureRendererMixin.java | 14 ++- .../lambda/mixin/render/InGameHudMixin.java | 55 ++++++------ .../render/LightmapTextureManagerMixin.java | 2 - .../mixin/render/PlayerListHudMixin.java | 30 +++---- .../mixin/render/RenderLayersMixin.java | 27 +++--- .../mixin/render/ScreenHandlerMixin.java | 10 +-- .../com/lambda/mixin/render/ScreenMixin.java | 22 ++--- .../SodiumBlockOcclusionCacheMixin.java | 1 + .../render/SodiumFluidRendererImplMixin.java | 13 ++- .../mixin/render/SplashOverlayMixin.java | 4 +- .../mixin/render/TooltipComponentMixin.java | 29 +++---- .../mixin/render/WeatherRenderingMixin.java | 30 ++++--- .../render/WorldBorderRenderingMixin.java | 13 ++- .../mixin/render/WorldRendererMixin.java | 12 +-- .../AbstractSignBlockEntityRendererMixin.java | 12 +-- .../BeaconBlockEntityRendererMixin.java | 12 +-- .../BlockEntityRenderDispatcherMixin.java | 22 +++-- ...chantingTableBlockEntityRendererMixin.java | 12 +-- .../MobSpawnerBlockEntityRendererMixin.java | 12 +-- .../particle/BillboardParticleMixin.java | 12 +-- .../ElderGuardianParticleRendererMixin.java | 14 +-- .../ItemPickupParticleRendererMixin.java | 14 +-- .../mixin/world/AbstractBlockMixin.java | 3 - .../world/BlockCollisionSpliteratorMixin.java | 4 +- .../mixin/world/ClientChunkManagerMixin.java | 51 +++-------- .../lambda/mixin/world/ClientWorldMixin.java | 32 +++---- .../mixin/world/StructureTemplateMixin.java | 15 ++-- .../com/lambda/mixin/world/WorldMixin.java | 46 +++++----- src/main/resources/lambda.mixins.json | 2 - 65 files changed, 598 insertions(+), 722 deletions(-) delete mode 100644 src/main/java/com/lambda/mixin/render/DebugHudMixin.java delete mode 100644 src/main/java/com/lambda/mixin/render/DebugRendererMixin.java diff --git a/src/main/java/com/lambda/mixin/CrashReportMixin.java b/src/main/java/com/lambda/mixin/CrashReportMixin.java index d0d144c8f..fd7b04371 100644 --- a/src/main/java/com/lambda/mixin/CrashReportMixin.java +++ b/src/main/java/com/lambda/mixin/CrashReportMixin.java @@ -46,9 +46,8 @@ public class CrashReportMixin { @Inject(method = "(Ljava/lang/String;Ljava/lang/Throwable;)V", at = @At("TAIL")) void injectConstructor(String message, Throwable cause, CallbackInfo ci) { - if (!Lambda.INSTANCE.isDebug() && MinecraftClient.getInstance() != null) { + if (!Lambda.INSTANCE.isDebug() && MinecraftClient.getInstance() != null) this.cause = DynamicExceptionKt.dynamicException(cause); - } } @WrapMethod(method = "asString(Lnet/minecraft/util/crash/ReportType;Ljava/util/List;)Ljava/lang/String;") diff --git a/src/main/java/com/lambda/mixin/MinecraftClientMixin.java b/src/main/java/com/lambda/mixin/MinecraftClientMixin.java index a0e5c5b47..73362e122 100644 --- a/src/main/java/com/lambda/mixin/MinecraftClientMixin.java +++ b/src/main/java/com/lambda/mixin/MinecraftClientMixin.java @@ -67,9 +67,10 @@ public class MinecraftClientMixin { @Shadow public int itemUseCooldown; - @Inject(method = "close", at = @At("HEAD")) - void closeImGui(CallbackInfo ci) { + @WrapMethod(method = "close") + void closeImGui(Operation original) { DearImGui.INSTANCE.destroy(); + original.call(); } @WrapMethod(method = "render") @@ -175,7 +176,6 @@ boolean redirectMultiActon(boolean original) { @Inject(method = "doItemUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isRiding()Z")) void injectFastPlace(CallbackInfo ci) { if (!Interact.INSTANCE.isEnabled()) return; - itemUseCooldown = Interact.getPlaceDelay(); } @@ -201,10 +201,13 @@ float getTargetMillisPerTick(float millis, Operation original) { return (float) TimerManager.INSTANCE.getLength(); } - @Inject(method = "updateWindowTitle", at = @At("HEAD"), cancellable = true) - void updateWindowTitle(CallbackInfo ci) { - if (!ClickGuiLayout.getSetLambdaWindowTitle()) return; + @WrapMethod(method = "updateWindowTitle") + void updateWindowTitle(Operation original) { + if (!ClickGuiLayout.getSetLambdaWindowTitle()) { + original.call(); + return; + } + WindowUtils.setLambdaTitle(); - ci.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/baritone/BaritonePlayerContextMixin.java b/src/main/java/com/lambda/mixin/baritone/BaritonePlayerContextMixin.java index fc31a8015..c1386e1b3 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.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; 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; + @WrapMethod(method = "playerRotations", remap = false) + Rotation syncRotationWithBaritone(Operation original) { + if (baritone != BaritoneManager.getPrimary()) + return original.call(); - 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/baritone/LookBehaviourMixin.java b/src/main/java/com/lambda/mixin/baritone/LookBehaviourMixin.java index f71fb7276..b1fe49ae0 100644 --- a/src/main/java/com/lambda/mixin/baritone/LookBehaviourMixin.java +++ b/src/main/java/com/lambda/mixin/baritone/LookBehaviourMixin.java @@ -23,11 +23,10 @@ import baritone.behavior.LookBehavior; import com.lambda.interaction.BaritoneManager; import com.lambda.interaction.managers.rotating.RotationManager; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import org.spongepowered.asm.mixin.Mixin; 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 = LookBehavior.class, remap = false) public class LookBehaviourMixin { @@ -35,25 +34,23 @@ public class LookBehaviourMixin { LookBehavior instance = ((LookBehavior) (Object) this); // Redirect baritone's rotations into our rotation engine - @Inject(method = "updateTarget", at = @At("HEAD"), cancellable = true) - void onTargetUpdate(Rotation rotation, boolean blockInteract, CallbackInfo ci) { - if (instance.baritone != BaritoneManager.getPrimary()) return; + @WrapMethod(method = "updateTarget") + void onTargetUpdate(Rotation rotation, boolean blockInteract, Operation original) { + if (instance.baritone != BaritoneManager.getPrimary()) + original.call(rotation, blockInteract); RotationManager.handleBaritoneRotation(rotation.getYaw(), rotation.getPitch()); - ci.cancel(); } - @Inject(method = "onPlayerUpdate", at = @At("HEAD"), cancellable = true) - void onUpdate(PlayerUpdateEvent event, CallbackInfo ci) { - if (instance.baritone != BaritoneManager.getPrimary()) return; - - ci.cancel(); + @WrapMethod(method = "onPlayerUpdate") + void onUpdate(PlayerUpdateEvent event, Operation original) { + if (instance.baritone != BaritoneManager.getPrimary()) + original.call(event); } - @Inject(method = "onPlayerRotationMove", at = @At("HEAD"), cancellable = true) - void onMovementUpdate(RotationMoveEvent event, CallbackInfo ci) { - if (instance.baritone != BaritoneManager.getPrimary()) return; - - ci.cancel(); + @WrapMethod(method = "onPlayerRotationMove") + void onMovementUpdate(RotationMoveEvent event, Operation original) { + if (instance.baritone != BaritoneManager.getPrimary()) + original.call(event); } } 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..5f3b3fde3 100644 --- a/src/main/java/com/lambda/mixin/client/sound/SoundSystemMixin.java +++ b/src/main/java/com/lambda/mixin/client/sound/SoundSystemMixin.java @@ -19,20 +19,19 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.ClientEvent; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.sound.SoundInstance; import net.minecraft.client.sound.SoundSystem; 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) public class SoundSystemMixin { - @Inject(method = "play(Lnet/minecraft/client/sound/SoundInstance;)Lnet/minecraft/client/sound/SoundSystem$PlayResult;", at = @At("HEAD"), cancellable = true) - public void onPlay(SoundInstance sound, CallbackInfoReturnable cir) { - if (EventFlow.post(new ClientEvent.Sound(sound)).isCanceled()) { - cir.setReturnValue(SoundSystem.PlayResult.NOT_STARTED); - } + @WrapMethod(method = "play(Lnet/minecraft/client/sound/SoundInstance;)Lnet/minecraft/client/sound/SoundSystem$PlayResult;") + public SoundSystem.PlayResult onPlay(SoundInstance sound, Operation original) { + if (EventFlow.post(new ClientEvent.Sound(sound)).isCanceled()) + return SoundSystem.PlayResult.NOT_STARTED; + + return original.call(sound); } } diff --git a/src/main/java/com/lambda/mixin/entity/ClientPlayInteractionManagerMixin.java b/src/main/java/com/lambda/mixin/entity/ClientPlayInteractionManagerMixin.java index 7a660a139..5690cb7ec 100644 --- a/src/main/java/com/lambda/mixin/entity/ClientPlayInteractionManagerMixin.java +++ b/src/main/java/com/lambda/mixin/entity/ClientPlayInteractionManagerMixin.java @@ -42,7 +42,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; @Mixin(ClientPlayerInteractionManager.class) public class ClientPlayInteractionManagerMixin { @@ -52,44 +51,55 @@ public class ClientPlayInteractionManagerMixin { @Shadow public int lastSelectedSlot; - @Inject(method = "interactBlock", at = @At("HEAD"), cancellable = true) - public void interactBlockHead(final ClientPlayerEntity player, final Hand hand, final BlockHitResult hitResult, final CallbackInfoReturnable cir) { - if (EventFlow.post(new PlayerEvent.Interact.Block(hand, hitResult)).isCanceled()) { - cir.setReturnValue(ActionResult.FAIL); - } + @WrapMethod(method = "interactBlock") + public ActionResult interactBlockHead(ClientPlayerEntity player, Hand hand, BlockHitResult hitResult, Operation original) { + if (EventFlow.post(new PlayerEvent.Interact.Block(hand, hitResult)).isCanceled()) + return ActionResult.FAIL; + + return original.call(player, hand, hitResult); } - @Inject(method = "interactEntityAtLocation", at = @At("HEAD"), cancellable = true) - public void interactEntityAtLocation(PlayerEntity player, Entity entity, EntityHitResult hitResult, Hand hand, CallbackInfoReturnable cir) { - if (EventFlow.post(new PlayerEvent.Interact.Entity(hand, entity, hitResult)).isCanceled()) { - cir.setReturnValue(ActionResult.FAIL); - } + @WrapMethod(method = "interactEntityAtLocation") + public ActionResult interactEntityAtLocation(PlayerEntity player, Entity entity, EntityHitResult hitResult, Hand hand, Operation original) { + if (EventFlow.post(new PlayerEvent.Interact.Entity(hand, entity, hitResult)).isCanceled()) + return ActionResult.FAIL; + + return original.call(player, entity, hitResult, hand); } - @Inject(method = "interactItem", at = @At("HEAD"), cancellable = true) - public void interactItemHead(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { - if (EventFlow.post(new PlayerEvent.Interact.Item(hand)).isCanceled()) { - cir.setReturnValue(ActionResult.FAIL); - } + @WrapMethod(method = "interactItem") + public ActionResult interactItemHead(PlayerEntity player, Hand hand, Operation original) { + if (EventFlow.post(new PlayerEvent.Interact.Item(hand)).isCanceled()) + return ActionResult.FAIL; + + return original.call(player, hand); } - @Inject(method = "attackBlock", at = @At("HEAD"), cancellable = true) - public void onAttackBlock(BlockPos pos, Direction side, CallbackInfoReturnable cir) { - if (EventFlow.post(new PlayerEvent.Attack.Block(pos, side)).isCanceled()) { - cir.setReturnValue(false); - } + @WrapMethod(method = "attackBlock") + public boolean onAttackBlock(BlockPos pos, Direction direction, Operation original) { + if (EventFlow.post(new PlayerEvent.Attack.Block(pos, direction)).isCanceled()) + return false; + + return original.call(pos, direction); } - @Inject(method = "attackEntity", at = @At("HEAD"), cancellable = true) - void onAttackPre(PlayerEntity player, Entity target, CallbackInfo ci) { - if (EventFlow.post(new PlayerEvent.Attack.Entity(target)).isCanceled()) ci.cancel(); + @WrapMethod(method = "attackEntity") + void onAttackPre(PlayerEntity player, Entity target, Operation original) { + if (EventFlow.post(new PlayerEvent.Attack.Entity(target)).isCanceled()) + return; + + original.call(player, target); } - @Inject(method = "clickSlot", at = @At("HEAD"), cancellable = true) - public void clickSlotHead(int syncId, int slotId, int button, SlotActionType actionType, PlayerEntity player, CallbackInfo ci) { - if (syncId != player.currentScreenHandler.syncId) return; + @WrapMethod(method = "clickSlot") + public void clickSlotHead(int syncId, int slotId, int button, SlotActionType actionType, PlayerEntity player, Operation original) { var click = new PlayerEvent.SlotClick(syncId, slotId, button, actionType, player.currentScreenHandler); - if (EventFlow.post(click).isCanceled()) ci.cancel(); + + if (EventFlow.post(click).isCanceled()) + return; + + if (syncId != player.currentScreenHandler.syncId) + original.call(syncId, slotId, button, actionType, player); } /** @@ -109,17 +119,22 @@ public void overrideSelectedSlotSync(CallbackInfo ci) { EventFlow.post(new InventoryEvent.HotbarSlot.Update(lastSelectedSlot)); } - @Inject(method = "updateBlockBreakingProgress", at = @At("HEAD"), cancellable = true) - private void updateBlockBreakingProgressPre(BlockPos pos, Direction side, CallbackInfoReturnable cir) { - var event = EventFlow.post(new PlayerEvent.Breaking.Update(pos, side, currentBreakingProgress)); - if (event.isCanceled()) cir.setReturnValue(false); + @WrapMethod(method = "updateBlockBreakingProgress") + private boolean updateBlockBreakingProgressPre(BlockPos pos, Direction direction, Operation original) { + var event = EventFlow.post(new PlayerEvent.Breaking.Update(pos, direction, currentBreakingProgress)); + + if (event.isCanceled()) + return false; currentBreakingProgress = event.getProgress(); + + return original.call(pos, direction); } - @Inject(method = "cancelBlockBreaking", at = @At("HEAD"), cancellable = true) - private void cancelBlockBreakingPre(CallbackInfo ci) { - if (EventFlow.post(new PlayerEvent.Breaking.Cancel(currentBreakingProgress)).isCanceled()) ci.cancel(); + @WrapMethod(method = "cancelBlockBreaking") + private void cancelBlockBreakingPre(Operation original) { + if (!EventFlow.post(new PlayerEvent.Breaking.Cancel(currentBreakingProgress)).isCanceled()) + original.call(); } @WrapMethod(method = "createPlayer(Lnet/minecraft/client/world/ClientWorld;Lnet/minecraft/stat/StatHandler;Lnet/minecraft/client/recipebook/ClientRecipeBook;)Lnet/minecraft/client/network/ClientPlayerEntity;") diff --git a/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java b/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java index 752cd235a..6824448ba 100644 --- a/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java +++ b/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java @@ -52,7 +52,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 org.spongepowered.asm.mixin.injection.callback.LocalCapture; import java.util.Objects; @@ -90,9 +89,13 @@ private void injectTickMovement(CallbackInfo ci) { if (NoJumpCooldown.INSTANCE.isEnabled() || (ElytraFly.INSTANCE.isEnabled() && ElytraFly.getMode() == ElytraFly.FlyMode.Bounce)) jumpingCooldown = 0; } - @Inject(method = "sendMovementPackets", at = @At("HEAD")) - private void injectSendMovementPacketsHead(CallbackInfo ci) { - moveEvent = EventFlow.post(new PlayerPacketEvent.Pre(pos, RotationManager.getActiveRotation(), isOnGround(), isSprinting(), horizontalCollision)); + @WrapMethod(method = "sendMovementPackets") + private void injectSendMovementPacketsHead(Operation original) { + moveEvent = EventFlow.post( + new PlayerPacketEvent.Pre(pos, RotationManager.getActiveRotation(), isOnGround(), isSprinting(), horizontalCollision) + ); + + original.call(); } @Definition(id = "g", local = @Local(type = double.class, ordinal = 3)) @@ -129,8 +132,9 @@ private PlayerMoveC2SPacket.OnGroundOnly wrapOnGroundOnly(boolean onGround, bool return original.call(moveEvent.getOnGround(), moveEvent.isCollidingHorizontally()); } - @Inject(method = "sendMovementPackets", at = @At("TAIL")) - private void injectSendMovementPacketsReturn(CallbackInfo ci) { + @WrapMethod(method = "sendMovementPackets") + private void injectSendMovementPacketsReturn(Operation original) { + original.call(); RotationManager.onRotationSend(); EventFlow.post(new PlayerPacketEvent.Post()); } @@ -140,13 +144,14 @@ 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) { + @WrapMethod(method = "isSneaking") + boolean injectSneakingInput(Operation original) { ClientPlayerEntity self = (ClientPlayerEntity) (Object) this; - if (self != Lambda.getMc().player) return; - if (self.input == null) return; - cir.setReturnValue(EventFlow.post(new MovementEvent.Sneak(self.input.playerInput.sneak())).getSneak()); + if (self != Lambda.getMc().player) return false; + if (self.input == null) return false; + + return EventFlow.post(new MovementEvent.Sneak(self.input.playerInput.sneak())).getSneak(); } @WrapMethod(method = "tick") @@ -183,9 +188,10 @@ private void wrapSwingHand(ClientPlayerEntity instance, Hand hand, Operation original) { EventFlow.post(new PlayerEvent.Health(health)); + original.call(health); } /** diff --git a/src/main/java/com/lambda/mixin/entity/EntityMixin.java b/src/main/java/com/lambda/mixin/entity/EntityMixin.java index 7b1e48152..2470894f5 100644 --- a/src/main/java/com/lambda/mixin/entity/EntityMixin.java +++ b/src/main/java/com/lambda/mixin/entity/EntityMixin.java @@ -26,9 +26,9 @@ import com.lambda.util.math.Vec2d; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; 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; @@ -37,9 +37,6 @@ 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.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import static com.lambda.Lambda.getMc; @@ -129,13 +126,15 @@ float fixDirectionPitch2(Entity entity, Operation original) { return (float) rot.getY(); } - @Inject(method = "changeLookDirection", at = @At("HEAD"), cancellable = true) - private void changeLookDirection(double cursorDeltaX, double cursorDeltaY, CallbackInfo ci) { - if (EventFlow.post(new PlayerEvent.ChangeLookDirection(cursorDeltaX, cursorDeltaY)).isCanceled()) ci.cancel(); + @WrapMethod(method = "changeLookDirection") + private void changeLookDirection(double cursorDeltaX, double cursorDeltaY, Operation original) { + if (!EventFlow.post(new PlayerEvent.ChangeLookDirection(cursorDeltaX, cursorDeltaY)).isCanceled()) + original.call(cursorDeltaX, cursorDeltaY); } - @Inject(method = "onTrackedDataSet(Lnet/minecraft/entity/data/TrackedData;)V", at = @At("TAIL")) - public void onTrackedDataSet(TrackedData data, CallbackInfo ci) { + @WrapMethod(method = "onTrackedDataSet(Lnet/minecraft/entity/data/TrackedData;)V") + public void onTrackedDataSet(TrackedData data, Operation original) { + original.call(data); Entity entity = (Entity) (Object) this; EventFlow.post(new EntityEvent.Update(entity, data)); } @@ -160,18 +159,28 @@ 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) { + @WrapMethod(method = "isSprinting()Z") + private boolean injectIsSprinting(Operation 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) + original.call(); + + if (ElytraFly.INSTANCE.isEnabled() && ElytraFly.getMode() == ElytraFly.FlyMode.Bounce && player.isGliding()) + return true; + + return original.call(); } - @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); + @WrapMethod(method = "getPose") + private EntityPose injectGetPose(Operation original) { + var player = getMc().player; + if ((Object) this != getMc().player) + original.call(); + + if (ElytraFly.INSTANCE.isEnabled() && ElytraFly.getMode() == ElytraFly.FlyMode.Bounce && player.isGliding()) + return EntityPose.GLIDING; + + return original.call(); } @ModifyExpressionValue(method = "getHorizontalFacing", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getYaw()F")) diff --git a/src/main/java/com/lambda/mixin/entity/HandledScreensMixin.java b/src/main/java/com/lambda/mixin/entity/HandledScreensMixin.java index 30e1e64c8..8a711ebf8 100644 --- a/src/main/java/com/lambda/mixin/entity/HandledScreensMixin.java +++ b/src/main/java/com/lambda/mixin/entity/HandledScreensMixin.java @@ -18,21 +18,21 @@ package com.lambda.mixin.entity; import com.lambda.interaction.managers.inventory.InventoryManager; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreens; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.text.Text; 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(HandledScreens.Provider.class) public interface HandledScreensMixin { - @Inject(method = "open", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;setScreen(Lnet/minecraft/client/gui/screen/Screen;)V")) - private void injectOpen(Text name, ScreenHandlerType type, MinecraftClient client, int id, CallbackInfo ci) { - if (client.player == null) return; - InventoryManager.onSetScreenHandler(client.player.currentScreenHandler); + @WrapOperation(method = "open", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;setScreen(Lnet/minecraft/client/gui/screen/Screen;)V")) + private void injectOpen(MinecraftClient instance, Screen screen, Operation original) { + if (instance.player == null) + original.call(instance, screen); + + InventoryManager.onSetScreenHandler(instance.player.currentScreenHandler); } } diff --git a/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java b/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java index 02ba9ed72..e7a288d16 100644 --- a/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java +++ b/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java @@ -35,10 +35,7 @@ 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.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 { @@ -62,11 +59,11 @@ public abstract class LivingEntityMixin extends EntityMixin { * } * } */ - @Inject(method = "jump", at = @At("HEAD"), cancellable = true) - void onJump(CallbackInfo ci) { + @WrapMethod(method = "jump") + void onJump(Operation original) { LivingEntity self = lambda$instance; - if (self != Lambda.getMc().player) return; - ci.cancel(); + if (self != Lambda.getMc().player) + original.call(); float height = this.getJumpVelocity(); MovementEvent.Jump event = EventFlow.post(new MovementEvent.Jump(height)); @@ -85,18 +82,14 @@ void onJump(CallbackInfo ci) { self.velocityDirty = true; } - @Inject(method = "travel", at = @At("HEAD"), cancellable = true) - void onTravelPre(Vec3d movementInput, CallbackInfo ci) { - if (EventFlow.post(new MovementEvent.Entity.Pre(lambda$instance, movementInput)).isCanceled()) { - ci.cancel(); + @WrapMethod(method = "travel") + void onTravelPre(Vec3d movementInput, Operation original) { + if (!EventFlow.post(new MovementEvent.Entity.Pre(lambda$instance, movementInput)).isCanceled()) { + original.call(movementInput); + EventFlow.post(new MovementEvent.Entity.Post(lambda$instance, movementInput)); } } - @Inject(method = "travel", at = @At("TAIL")) - void onTravelPost(Vec3d movementInput, CallbackInfo ci) { - EventFlow.post(new MovementEvent.Entity.Post(lambda$instance, movementInput)); - } - /** * Modifies the entity pitch with the current rotation when the entity is fall flying */ @@ -185,9 +178,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()); + @WrapMethod(method = "isGliding") + private boolean injectIsGliding(Operation original) { + if (lambda$instance != Lambda.getMc().player) + return original.call(); + + return ElytraFly.isGliding(); } } diff --git a/src/main/java/com/lambda/mixin/input/KeyboardMixin.java b/src/main/java/com/lambda/mixin/input/KeyboardMixin.java index 8e913469d..68683b776 100644 --- a/src/main/java/com/lambda/mixin/input/KeyboardMixin.java +++ b/src/main/java/com/lambda/mixin/input/KeyboardMixin.java @@ -28,27 +28,14 @@ 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/network/ClientConnectionMixin.java b/src/main/java/com/lambda/mixin/network/ClientConnectionMixin.java index d9eb35860..b51bb8a17 100644 --- a/src/main/java/com/lambda/mixin/network/ClientConnectionMixin.java +++ b/src/main/java/com/lambda/mixin/network/ClientConnectionMixin.java @@ -20,6 +20,8 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.ConnectionEvent; import com.lambda.event.events.PacketEvent; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import io.netty.channel.ChannelHandlerContext; import net.minecraft.network.ClientConnection; import net.minecraft.network.NetworkSide; @@ -34,10 +36,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; @Mixin(ClientConnection.class) public class ClientConnectionMixin { @@ -46,66 +44,37 @@ public class ClientConnectionMixin { private NetworkSide side; @SuppressWarnings("unchecked") - @Inject(method = "send(Lnet/minecraft/network/packet/Packet;)V", at = @At("HEAD"), cancellable = true) - private void sendingPacket(Packet packet, final CallbackInfo callbackInfo) { + @WrapMethod(method = "send(Lnet/minecraft/network/packet/Packet;)V") + private void sendingPacket(Packet packet, Operation original) { if (side != NetworkSide.CLIENTBOUND) return; - if (EventFlow.post(new PacketEvent.Send.Pre((Packet) packet)).isCanceled()) { - callbackInfo.cancel(); + if (!EventFlow.post(new PacketEvent.Send.Pre((Packet) packet)).isCanceled()) { + original.call(packet); + EventFlow.post(new PacketEvent.Send.Post((Packet) packet)); } } @SuppressWarnings("unchecked") - @Inject(method = "send(Lnet/minecraft/network/packet/Packet;)V", at = @At("RETURN")) - private void sendingPacketPost(Packet packet, final CallbackInfo callbackInfo) { + @WrapMethod(method = "channelRead0(Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/network/packet/Packet;)V", require = 1) + private void receivingPacket(ChannelHandlerContext channelHandlerContext, Packet packet, Operation original) { if (side != NetworkSide.CLIENTBOUND) return; - EventFlow.post(new PacketEvent.Send.Post((Packet) packet)); - } - - @SuppressWarnings("unchecked") - @Inject(method = "channelRead0(Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/network/packet/Packet;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;handlePacket(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;)V", shift = At.Shift.BEFORE), cancellable = true, require = 1) - private void receivingPacket( - ChannelHandlerContext channelHandlerContext, - Packet packet, - CallbackInfo callbackInfo - ) { - if (side != NetworkSide.CLIENTBOUND) return; - - if (EventFlow.post(new PacketEvent.Receive.Pre((Packet) packet)).isCanceled()) { - callbackInfo.cancel(); + if (!EventFlow.post(new PacketEvent.Receive.Pre((Packet) packet)).isCanceled()) { + original.call(channelHandlerContext, packet); + EventFlow.post(new PacketEvent.Receive.Post((Packet) packet)); } } - @SuppressWarnings("unchecked") - @Inject(method = "channelRead0(Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/network/packet/Packet;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;handlePacket(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;)V", shift = At.Shift.AFTER)) - private void receivingPacketPost( - ChannelHandlerContext channelHandlerContext, - Packet packet, - CallbackInfo callbackInfo - ) { - if (side != NetworkSide.CLIENTBOUND) return; - - EventFlow.post(new PacketEvent.Receive.Post((Packet) packet)); - } - - @Inject(method = "connect(Ljava/lang/String;ILnet/minecraft/network/state/NetworkState;Lnet/minecraft/network/state/NetworkState;Lnet/minecraft/network/listener/ClientPacketListener;Lnet/minecraft/network/packet/c2s/handshake/ConnectionIntent;)V", at = @At("HEAD"), cancellable = true) + @WrapMethod(method = "connect(Ljava/lang/String;ILnet/minecraft/network/state/NetworkState;Lnet/minecraft/network/state/NetworkState;Lnet/minecraft/network/listener/ClientPacketListener;Lnet/minecraft/network/packet/c2s/handshake/ConnectionIntent;)V") private - void onConnect( - String address, - int port, - NetworkState outboundState, - NetworkState inboundState, - C prePlayStateListener, - ConnectionIntent intent, - CallbackInfo ci - ) { - if (EventFlow.post(new ConnectionEvent.Connect.Pre(address, port, prePlayStateListener, intent)).isCanceled()) - ci.cancel(); + void onConnect(String address, int port, NetworkState outboundState, NetworkState inboundState, C prePlayStateListener, ConnectionIntent intent, Operation original) { + if (!EventFlow.post(new ConnectionEvent.Connect.Pre(address, port, prePlayStateListener, intent)).isCanceled()) + original.call(address, port, outboundState, inboundState, prePlayStateListener, intent); } - @Inject(method = "disconnect(Lnet/minecraft/text/Text;)V", at = @At("HEAD")) - private void onDisconnect(Text reason, CallbackInfo ci) { - EventFlow.post(new ConnectionEvent.Disconnect(reason)); + @WrapMethod(method = "disconnect(Lnet/minecraft/text/Text;)V") + private void onDisconnect(Text disconnectReason, Operation original) { + original.call(disconnectReason); + EventFlow.post(new ConnectionEvent.Disconnect(disconnectReason)); } } diff --git a/src/main/java/com/lambda/mixin/network/ClientLoginNetworkMixin.java b/src/main/java/com/lambda/mixin/network/ClientLoginNetworkMixin.java index 3fd1f32cc..33c547d16 100644 --- a/src/main/java/com/lambda/mixin/network/ClientLoginNetworkMixin.java +++ b/src/main/java/com/lambda/mixin/network/ClientLoginNetworkMixin.java @@ -19,18 +19,17 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.ConnectionEvent; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.network.ClientLoginNetworkHandler; import net.minecraft.network.packet.s2c.login.LoginSuccessS2CPacket; 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(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) { + @WrapMethod(method = "onSuccess(Lnet/minecraft/network/packet/s2c/login/LoginSuccessS2CPacket;)V") + private void onSuccess(LoginSuccessS2CPacket packet, Operation original) { + original.call(packet); 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..f2fd82474 100644 --- a/src/main/java/com/lambda/mixin/network/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/com/lambda/mixin/network/ClientPlayNetworkHandlerMixin.java @@ -37,21 +37,22 @@ @Mixin(ClientPlayNetworkHandler.class) public class ClientPlayNetworkHandlerMixin { - @Inject(method = "onGameJoin(Lnet/minecraft/network/packet/s2c/play/GameJoinS2CPacket;)V", at = @At("TAIL")) - void injectJoinPacket(GameJoinS2CPacket packet, CallbackInfo ci) { + @WrapMethod(method = "onGameJoin(Lnet/minecraft/network/packet/s2c/play/GameJoinS2CPacket;)V") + void injectJoinPacket(GameJoinS2CPacket packet, Operation original) { + original.call(packet); EventFlow.post(new WorldEvent.Join()); } - @Inject(method = "handlePlayerListAction(Lnet/minecraft/network/packet/s2c/play/PlayerListS2CPacket$Action;Lnet/minecraft/network/packet/s2c/play/PlayerListS2CPacket$Entry;Lnet/minecraft/client/network/PlayerListEntry;)V", at = @At("TAIL")) - void injectPlayerList(PlayerListS2CPacket.Action action, PlayerListS2CPacket.Entry receivedEntry, PlayerListEntry currentEntry, CallbackInfo ci) { - if (action != PlayerListS2CPacket.Action.UPDATE_LISTED) return; + @WrapMethod(method = "handlePlayerListAction(Lnet/minecraft/network/packet/s2c/play/PlayerListS2CPacket$Action;Lnet/minecraft/network/packet/s2c/play/PlayerListS2CPacket$Entry;Lnet/minecraft/client/network/PlayerListEntry;)V") + void injectPlayerList(PlayerListS2CPacket.Action action, PlayerListS2CPacket.Entry receivedEntry, PlayerListEntry currentEntry, Operation original) { + if (action != PlayerListS2CPacket.Action.UPDATE_LISTED) + original.call(action, receivedEntry, currentEntry); var name = currentEntry.getProfile().name(); var uuid = currentEntry.getProfile().id(); - if (receivedEntry.listed()) { - EventFlow.post(new WorldEvent.Player.Join(name, uuid, currentEntry)); - } else EventFlow.post(new WorldEvent.Player.Leave(name, uuid, currentEntry)); + if (receivedEntry.listed()) EventFlow.post(new WorldEvent.Player.Join(name, uuid, currentEntry)); + else EventFlow.post(new WorldEvent.Player.Leave(name, uuid, currentEntry)); } @Inject(method = "onUpdateSelectedSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/network/PacketApplyBatcher;)V", shift = At.Shift.AFTER), cancellable = true) @@ -59,8 +60,9 @@ private void onUpdateSelectedSlot(UpdateSelectedSlotS2CPacket packet, CallbackIn if (EventFlow.post(new InventoryEvent.HotbarSlot.Sync(packet.slot())).isCanceled()) ci.cancel(); } - @Inject(method = "onScreenHandlerSlotUpdate", at = @At("TAIL")) - private void onScreenHandlerSlotUpdate(ScreenHandlerSlotUpdateS2CPacket packet, CallbackInfo ci) { + @WrapMethod(method = "onScreenHandlerSlotUpdate") + private void onScreenHandlerSlotUpdate(ScreenHandlerSlotUpdateS2CPacket packet, Operation original) { + original.call(packet); EventFlow.post(new InventoryEvent.SlotUpdate(packet.getSyncId(), packet.getRevision(), packet.getSlot(), packet.getStack())); } diff --git a/src/main/java/com/lambda/mixin/network/HandshakeC2SPacketMixin.java b/src/main/java/com/lambda/mixin/network/HandshakeC2SPacketMixin.java index c041ab93a..5f16d90ec 100644 --- a/src/main/java/com/lambda/mixin/network/HandshakeC2SPacketMixin.java +++ b/src/main/java/com/lambda/mixin/network/HandshakeC2SPacketMixin.java @@ -19,17 +19,17 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.ConnectionEvent; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.network.packet.c2s.handshake.ConnectionIntent; import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket; 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(HandshakeC2SPacket.class) public class HandshakeC2SPacketMixin { - @Inject(method = "(ILjava/lang/String;ILnet/minecraft/network/packet/c2s/handshake/ConnectionIntent;)V", at = @At("TAIL")) - private void onHandshakeC2SPacket(int i, String string, int j, ConnectionIntent connectionIntent, CallbackInfo ci) { - EventFlow.post(new ConnectionEvent.Connect.Handshake(i, string, j, connectionIntent)); + @WrapMethod(method = "(ILjava/lang/String;ILnet/minecraft/network/packet/c2s/handshake/ConnectionIntent;)V") + private void onHandshakeC2SPacket(int protocolVersion, String address, int port, ConnectionIntent intendedState, Operation original) { + original.call(protocolVersion, address, port, intendedState); + EventFlow.post(new ConnectionEvent.Connect.Handshake(protocolVersion, address, port, intendedState)); } } diff --git a/src/main/java/com/lambda/mixin/network/LoginHelloC2SPacketMixin.java b/src/main/java/com/lambda/mixin/network/LoginHelloC2SPacketMixin.java index 2222fa305..91978cbc3 100644 --- a/src/main/java/com/lambda/mixin/network/LoginHelloC2SPacketMixin.java +++ b/src/main/java/com/lambda/mixin/network/LoginHelloC2SPacketMixin.java @@ -19,15 +19,14 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.ConnectionEvent; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.network.PacketByteBuf; import net.minecraft.network.encryption.NetworkEncryptionException; import net.minecraft.network.packet.s2c.login.LoginHelloS2CPacket; 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.CallbackInfo; import java.security.PublicKey; @@ -39,8 +38,9 @@ public abstract class LoginHelloC2SPacketMixin { @Shadow public abstract PublicKey getPublicKey() throws NetworkEncryptionException; - @Inject(method = "(Lnet/minecraft/network/PacketByteBuf;)V", at = @At("TAIL")) - private void onLoginHelloC2SPacket(PacketByteBuf buf, CallbackInfo ci) throws NetworkEncryptionException { + @WrapMethod(method = "(Lnet/minecraft/network/PacketByteBuf;)V") + private void onLoginHelloC2SPacket(PacketByteBuf buf, Operation original) throws NetworkEncryptionException { + original.call(buf); EventFlow.post(new ConnectionEvent.Connect.Login.EncryptionRequest(serverId, getPublicKey(), nonce)); } } diff --git a/src/main/java/com/lambda/mixin/network/LoginKeyC2SPacketMixin.java b/src/main/java/com/lambda/mixin/network/LoginKeyC2SPacketMixin.java index dfffef9be..3ba166d1d 100644 --- a/src/main/java/com/lambda/mixin/network/LoginKeyC2SPacketMixin.java +++ b/src/main/java/com/lambda/mixin/network/LoginKeyC2SPacketMixin.java @@ -19,19 +19,19 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.ConnectionEvent; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.network.packet.c2s.login.LoginKeyC2SPacket; 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 javax.crypto.SecretKey; import java.security.PublicKey; @Mixin(LoginKeyC2SPacket.class) public class LoginKeyC2SPacketMixin { - @Inject(method = "(Ljavax/crypto/SecretKey;Ljava/security/PublicKey;[B)V", at = @At("TAIL")) - private void onLoginKeyC2SPacket(SecretKey secretKey, PublicKey publicKey, byte[] nonce, CallbackInfo ci) { + @WrapMethod(method = "(Ljavax/crypto/SecretKey;Ljava/security/PublicKey;[B)V") + private void onLoginKeyC2SPacket(SecretKey secretKey, PublicKey publicKey, byte[] nonce, Operation original) { + original.call(secretKey, publicKey, nonce); EventFlow.post(new ConnectionEvent.Connect.Login.EncryptionResponse(secretKey, publicKey, nonce)); } } diff --git a/src/main/java/com/lambda/mixin/render/AbstractTerrainRenderContextMixin.java b/src/main/java/com/lambda/mixin/render/AbstractTerrainRenderContextMixin.java index f19cda820..6c40458b9 100644 --- a/src/main/java/com/lambda/mixin/render/AbstractTerrainRenderContextMixin.java +++ b/src/main/java/com/lambda/mixin/render/AbstractTerrainRenderContextMixin.java @@ -18,15 +18,16 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.XRay; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.fabricmc.fabric.impl.client.indigo.renderer.mesh.MutableQuadViewImpl; import net.fabricmc.fabric.impl.client.indigo.renderer.render.AbstractTerrainRenderContext; import net.fabricmc.fabric.impl.client.indigo.renderer.render.BlockRenderInfo; +import net.minecraft.client.render.VertexConsumer; 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.CallbackInfo; @Mixin(AbstractTerrainRenderContext.class) public class AbstractTerrainRenderContextMixin { @@ -34,16 +35,17 @@ public class AbstractTerrainRenderContextMixin { @Shadow(remap = false) protected BlockRenderInfo blockInfo; - @Inject(method = "bufferQuad", at = @At(value = "INVOKE", target = "Lnet/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractTerrainRenderContext;bufferQuad(Lnet/fabricmc/fabric/impl/client/indigo/renderer/mesh/MutableQuadViewImpl;Lnet/minecraft/client/render/VertexConsumer;)V"), cancellable = true) - private void injectBufferQuad(MutableQuadViewImpl quad, CallbackInfo ci) { - if (XRay.INSTANCE.isDisabled() || XRay.isSelected(blockInfo.blockState)) return; + @WrapOperation(method = "bufferQuad", at = @At(value = "INVOKE", target = "Lnet/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractTerrainRenderContext;bufferQuad(Lnet/fabricmc/fabric/impl/client/indigo/renderer/mesh/MutableQuadViewImpl;Lnet/minecraft/client/render/VertexConsumer;)V")) + private void injectBufferQuad(AbstractTerrainRenderContext instance, MutableQuadViewImpl mutableQuadView, VertexConsumer vertexConsumer, Operation original) { + if (XRay.INSTANCE.isDisabled() || XRay.isSelected(blockInfo.blockState)) + original.call(instance, mutableQuadView, vertexConsumer); + int opacity = XRay.getOpacity(); - if (opacity == 0) ci.cancel(); - else if (opacity < 100) { + if (opacity > 0) { int alpha = (int) (opacity * 2.55f); for (int i = 0; i < 4; i++) { - quad.color(i, ((alpha & 0xFF) << 24) | (quad.color(i) & 0x00FFFFFF)); + mutableQuadView.color(i, ((alpha & 0xFF) << 24) | (mutableQuadView.color(i) & 0x00FFFFFF)); } } } 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 index 887ca3b6b..7d5ef957f 100644 --- a/src/main/java/com/lambda/mixin/render/BackgroundRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/BackgroundRendererMixin.java @@ -19,9 +19,6 @@ 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; diff --git a/src/main/java/com/lambda/mixin/render/BlockModelRendererMixin.java b/src/main/java/com/lambda/mixin/render/BlockModelRendererMixin.java index f79546f8c..524baaac6 100644 --- a/src/main/java/com/lambda/mixin/render/BlockModelRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/BlockModelRendererMixin.java @@ -18,6 +18,8 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.XRay; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.BlockState; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.block.BlockModelRenderer; @@ -27,11 +29,8 @@ import net.minecraft.world.BlockRenderView; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Constant; -import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyConstant; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.List; @@ -39,16 +38,17 @@ public class BlockModelRendererMixin { @Unique private final ThreadLocal opacity = new ThreadLocal<>(); - @Inject(method = {"renderSmooth", "renderFlat"}, at = @At("HEAD"), cancellable = true) - private void injectRenderSmoothFlat(BlockRenderView world, List parts, BlockState state, BlockPos pos, MatrixStack matrices, VertexConsumer vertexConsumer, boolean cull, int overlay, CallbackInfo ci) { + @WrapMethod(method = {"renderSmooth", "renderFlat"}) + private void injectRenderSmoothFlat(BlockRenderView world, List parts, BlockState state, BlockPos pos, MatrixStack matrices, VertexConsumer vertexConsumer, boolean cull, int overlay, Operation original) { if (XRay.INSTANCE.isDisabled()) { this.opacity.set(-1); - return; + original.call(world, parts, state, pos, matrices, vertexConsumer, cull, overlay); } + int alpha = (int) (XRay.getOpacity() * 2.55); - if (alpha == 0) ci.cancel(); - else this.opacity.set(alpha); + if (alpha > 0) + this.opacity.set(alpha); } @ModifyConstant(method = "renderQuad", constant = @Constant(floatValue = 1, ordinal = 3)) diff --git a/src/main/java/com/lambda/mixin/render/BlockRenderManagerMixin.java b/src/main/java/com/lambda/mixin/render/BlockRenderManagerMixin.java index 49ff48b7f..7bfceea8f 100644 --- a/src/main/java/com/lambda/mixin/render/BlockRenderManagerMixin.java +++ b/src/main/java/com/lambda/mixin/render/BlockRenderManagerMixin.java @@ -18,22 +18,23 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.BlockESP; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.client.render.block.BlockRenderManager; import net.minecraft.client.render.model.BlockStateModel; 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(BlockRenderManager.class) public abstract class BlockRenderManagerMixin { - @Inject(method = "getModel", at = @At("HEAD"), cancellable = true) - private void getModel(BlockState state, CallbackInfoReturnable cir) { + @WrapMethod(method = "getModel") + private BlockStateModel getModel(BlockState state, Operation original) { if (BlockESP.INSTANCE.isEnabled() && BlockESP.getBarrier() && state.getBlock() == Blocks.BARRIER - ) cir.setReturnValue(BlockESP.getModel()); + ) return BlockESP.getModel(); + + return original.call(state); } } diff --git a/src/main/java/com/lambda/mixin/render/BossBarHudMixin.java b/src/main/java/com/lambda/mixin/render/BossBarHudMixin.java index 3b36abf94..20f7ed1c1 100644 --- a/src/main/java/com/lambda/mixin/render/BossBarHudMixin.java +++ b/src/main/java/com/lambda/mixin/render/BossBarHudMixin.java @@ -18,17 +18,17 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.BossBarHud; 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(BossBarHud.class) public class BossBarHudMixin { - @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void injectRender(DrawContext context, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoBossBar()) ci.cancel(); + @WrapMethod(method = "render") + private void injectRender(DrawContext context, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoBossBar()) + original.call(context); } } diff --git a/src/main/java/com/lambda/mixin/render/CameraMixin.java b/src/main/java/com/lambda/mixin/render/CameraMixin.java index 13ee986f3..719cd0415 100644 --- a/src/main/java/com/lambda/mixin/render/CameraMixin.java +++ b/src/main/java/com/lambda/mixin/render/CameraMixin.java @@ -22,6 +22,8 @@ import com.lambda.module.modules.render.CameraTweaks; import com.lambda.module.modules.render.FreeLook; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.enums.CameraSubmersionType; import net.minecraft.client.render.Camera; import net.minecraft.entity.Entity; @@ -33,7 +35,6 @@ import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.ModifyArgs; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.invoke.arg.Args; @Mixin(Camera.class) @@ -48,14 +49,15 @@ 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) { - if (!Freecam.INSTANCE.isEnabled()) return; + @WrapMethod(method = "update") + private void onUpdate(World area, Entity focusedEntity, boolean thirdPerson, boolean inverseView, float tickProgress, Operation original) { + if (Freecam.INSTANCE.isDisabled()) + original.call(area, focusedEntity, thirdPerson, inverseView, tickProgress); Freecam.updateCam(); } @@ -86,12 +88,12 @@ private void injectQuickPerspectiveSwap(World area, Entity focusedEntity, boolea /** * Allows the camera to clip through blocks in third person */ - @Inject(method = "clipToSpace", at = @At("HEAD"), cancellable = true) + /*@Inject(method = "clipToSpace", at = @At("HEAD"), cancellable = true) private void onClipToSpace(float distance, CallbackInfoReturnable cir) { if (CameraTweaks.INSTANCE.isEnabled() && CameraTweaks.getNoClipCam()) { cir.setReturnValue(distance); } - } + }*/ /** * Modifies the third person camera distance @@ -155,8 +157,11 @@ private void onUpdateSetRotationArgs(Args args) { } } - @Inject(method = "getSubmersionType", at = @At("HEAD"), cancellable = true) - private void injectGetSubmersionType(CallbackInfoReturnable cir) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoFluidOverlay()) cir.setReturnValue(CameraSubmersionType.NONE); + @WrapMethod(method = "getSubmersionType") + private CameraSubmersionType injectGetSubmersionType(Operation original) { + if (NoRender.INSTANCE.isDisabled() && !NoRender.getNoFluidOverlay()) + return original.call(); + + return CameraSubmersionType.NONE; } } 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/ChatScreenMixin.java b/src/main/java/com/lambda/mixin/render/ChatScreenMixin.java index 2ab906ce5..2d934731c 100644 --- a/src/main/java/com/lambda/mixin/render/ChatScreenMixin.java +++ b/src/main/java/com/lambda/mixin/render/ChatScreenMixin.java @@ -18,18 +18,18 @@ package com.lambda.mixin.render; import com.lambda.command.CommandManager; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.gui.screen.ChatScreen; 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(ChatScreen.class) public abstract class ChatScreenMixin { - @Inject(method = "sendMessage", at = @At("HEAD"), cancellable = true) - void sendMessageInject(String chatText, boolean addToHistory, CallbackInfo ci) { - if (!CommandManager.INSTANCE.isLambdaCommand(chatText)) return; + @WrapMethod(method = "sendMessage") + void sendMessageInject(String chatText, boolean addToHistory, Operation original) { + if (!CommandManager.INSTANCE.isLambdaCommand(chatText)) + original.call(chatText, addToHistory); + CommandManager.INSTANCE.executeCommand(chatText); - ci.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/render/ChunkOcclusionDataBuilderMixin.java b/src/main/java/com/lambda/mixin/render/ChunkOcclusionDataBuilderMixin.java index b0566718d..487e8d441 100644 --- a/src/main/java/com/lambda/mixin/render/ChunkOcclusionDataBuilderMixin.java +++ b/src/main/java/com/lambda/mixin/render/ChunkOcclusionDataBuilderMixin.java @@ -18,17 +18,17 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.XRay; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.chunk.ChunkOcclusionDataBuilder; import net.minecraft.util.math.BlockPos; 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(ChunkOcclusionDataBuilder.class) public class ChunkOcclusionDataBuilderMixin { - @Inject(method = "markClosed", at = @At("HEAD"), cancellable = true) - private void injectMarkClosed(BlockPos pos, CallbackInfo ci) { - if (XRay.INSTANCE.isEnabled()) ci.cancel(); + @WrapMethod(method = "markClosed") + private void injectMarkClosed(BlockPos pos, Operation original) { + if (XRay.INSTANCE.isDisabled()) + original.call(pos); } } diff --git a/src/main/java/com/lambda/mixin/render/DarknessEffectFogMixin.java b/src/main/java/com/lambda/mixin/render/DarknessEffectFogMixin.java index af0c941e7..0375c1bfd 100644 --- a/src/main/java/com/lambda/mixin/render/DarknessEffectFogMixin.java +++ b/src/main/java/com/lambda/mixin/render/DarknessEffectFogMixin.java @@ -18,25 +18,22 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; 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 { + @WrapMethod(method = "applyDarknessModifier") + private float injectShouldApplyDarkness(LivingEntity cameraEntity, float darkness, float tickProgress, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoDarkness()) + return original.call(cameraEntity, darkness, tickProgress); - @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); - } + return 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/DrawContextMixin.java b/src/main/java/com/lambda/mixin/render/DrawContextMixin.java index c7eca6b04..ac8f465d3 100644 --- a/src/main/java/com/lambda/mixin/render/DrawContextMixin.java +++ b/src/main/java/com/lambda/mixin/render/DrawContextMixin.java @@ -19,6 +19,8 @@ import com.lambda.module.modules.render.ContainerPreview; import com.lambda.module.modules.render.MapPreview; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; @@ -30,15 +32,11 @@ import net.minecraft.item.tooltip.TooltipData; import net.minecraft.text.Text; import net.minecraft.util.Identifier; -import org.jetbrains.annotations.Nullable; import org.joml.Matrix3x2fStack; 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; import java.util.List; import java.util.Optional; @@ -64,11 +62,10 @@ public abstract class DrawContextMixin { @Shadow public abstract void drawMap(MapRenderState mapRenderState); - @Inject(method = "drawStackOverlay(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At(value = "TAIL")) - private void injectDrawMap(TextRenderer textRenderer, ItemStack stack, int i, int j, String string, CallbackInfo ci) { - if (MapPreview.INSTANCE.isDisabled() || !MapPreview.getShowInSlot()) return; - - if (!stack.isOf(Items.FILLED_MAP)) return; + @WrapMethod(method = "drawStackOverlay(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V") + private void injectDrawMap(TextRenderer textRenderer, ItemStack stack, int x, int y, String stackCountText, Operation original) { + if (MapPreview.INSTANCE.isDisabled() || !MapPreview.getShowInSlot() || !stack.isOf(Items.FILLED_MAP)) + original.call(textRenderer, stack, x, y, stackCountText); var mapId = stack.get(DataComponentTypes.MAP_ID); var savedData = FilledMapItem.getMapState(mapId, client.world); @@ -76,7 +73,7 @@ private void injectDrawMap(TextRenderer textRenderer, ItemStack stack, int i, in if (savedData == null) return; this.getMatrices().pushMatrix(); - this.getMatrices().translate(i, j); + this.getMatrices().translate(x, y); this.getMatrices().scale(0.125F, 0.125F); client.getMapRenderer().update(mapId, savedData, this.mapRenderState); @@ -85,21 +82,17 @@ private void injectDrawMap(TextRenderer textRenderer, ItemStack stack, int i, in this.getMatrices().popMatrix(); } - @Inject(method = "drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;IILnet/minecraft/util/Identifier;)V", at = @At("HEAD"), cancellable = true) - private void onDrawTooltip(TextRenderer textRenderer, List text, Optional data, int x, int y, @Nullable Identifier texture, CallbackInfo ci) { - if (!ContainerPreview.INSTANCE.isEnabled()) return; - - if (ContainerPreview.isRenderingSubTooltip()) return; + @WrapMethod(method = "drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;IILnet/minecraft/util/Identifier;)V") + private void onDrawTooltip(TextRenderer textRenderer, List text, Optional data, int x, int y, @org.jspecify.annotations.Nullable Identifier texture, Operation original) { + if (ContainerPreview.INSTANCE.isDisabled() || ContainerPreview.isRenderingSubTooltip()) + original.call(textRenderer, text, data, x, y, texture); if (ContainerPreview.isLocked()) { - ci.cancel(); ContainerPreview.renderLockedTooltip((DrawContext)(Object)this, textRenderer); return; } - if (data.isPresent() && data.get() instanceof ContainerPreview.ContainerComponent component) { - ci.cancel(); + if (data.isPresent() && data.get() instanceof ContainerPreview.ContainerComponent component) ContainerPreview.renderShulkerTooltip((DrawContext)(Object)this, textRenderer, component, x, y); - } } } diff --git a/src/main/java/com/lambda/mixin/render/EntityRendererMixin.java b/src/main/java/com/lambda/mixin/render/EntityRendererMixin.java index b71234dce..7cd8723d2 100644 --- a/src/main/java/com/lambda/mixin/render/EntityRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/EntityRendererMixin.java @@ -18,6 +18,8 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.Frustum; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.EntityRenderer; @@ -26,20 +28,20 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; 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(EntityRenderer.class) -public class EntityRendererMixin { - @Inject(method = "shouldRender(Lnet/minecraft/entity/Entity;Lnet/minecraft/client/render/Frustum;DDD)Z", at = @At("HEAD"), cancellable = true) - private void injectShouldRender(Entity entity, Frustum frustum, double x, double y, double z, CallbackInfoReturnable cir) { - if (NoRender.shouldOmitEntity(entity)) cir.cancel(); +public class EntityRendererMixin { + @WrapMethod(method = "shouldRender(Lnet/minecraft/entity/Entity;Lnet/minecraft/client/render/Frustum;DDD)Z") + private boolean injectShouldRender(T entity, Frustum frustum, double x, double y, double z, Operation original) { + if (!NoRender.shouldOmitEntity(entity)) + original.call(entity, frustum, x, y, z); + + return false; } - @Inject(method = "renderLabelIfPresent", at = @At("HEAD"), cancellable = true) - private void injectRenderLabelIfPresent(EntityRenderState state, MatrixStack matrices, OrderedRenderCommandQueue queue, CameraRenderState cameraRenderState, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoNametags()) ci.cancel(); + @WrapMethod(method = "renderLabelIfPresent") + private void injectRenderLabelIfPresent(S state, MatrixStack matrices, OrderedRenderCommandQueue queue, CameraRenderState cameraRenderState, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoNametags()) + original.call(state, matrices, queue, cameraRenderState); } } diff --git a/src/main/java/com/lambda/mixin/render/FluidRendererMixin.java b/src/main/java/com/lambda/mixin/render/FluidRendererMixin.java index 874f0ede5..bfb1b00c2 100644 --- a/src/main/java/com/lambda/mixin/render/FluidRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/FluidRendererMixin.java @@ -18,6 +18,8 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.XRay; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.BlockState; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.block.FluidRenderer; @@ -26,34 +28,32 @@ import net.minecraft.world.BlockRenderView; import org.spongepowered.asm.mixin.Mixin; 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(FluidRenderer.class) public class FluidRendererMixin { @Unique private final ThreadLocal opacity = new ThreadLocal<>(); - @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void injectRender(BlockRenderView world, BlockPos pos, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState, CallbackInfo info) { + @WrapMethod(method = "render") + private void injectRender(BlockRenderView world, BlockPos pos, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState, Operation original) { if (XRay.INSTANCE.isDisabled()) { opacity.set(255); - return; + original.call(world, pos, vertexConsumer, blockState, fluidState); } + int alpha = (int) (XRay.getOpacity() * 2.55); - if (alpha == 0) info.cancel(); - else this.opacity.set(alpha); + if (alpha > 0) + this.opacity.set(alpha); } - @Inject(method = "vertex", at = @At("HEAD"), cancellable = true) - private void injectVertex(VertexConsumer vertexConsumer, float x, float y, float z, float red, float green, float blue, float u, float v, int light, CallbackInfo info) { + @WrapMethod(method = "vertex") + private void injectVertex(VertexConsumer vertexConsumer, float x, float y, float z, float red, float green, float blue, float u, float v, int light, Operation original) { int alpha = this.opacity.get(); - if (alpha != 255) { + if (alpha != 255) vertexConsumer.vertex(x, y, z).color((int) (red * 255), (int) (green * 255), (int) (blue * 255), alpha).texture(u, v).light(light).normal(0.0f, 1.0f, 0.0f); - info.cancel(); - } + + original.call(vertexConsumer, x, y, z, red, green, blue, u, v, light); } } diff --git a/src/main/java/com/lambda/mixin/render/FogRendererMixin.java b/src/main/java/com/lambda/mixin/render/FogRendererMixin.java index 98bdccacd..57ea17a96 100644 --- a/src/main/java/com/lambda/mixin/render/FogRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/FogRendererMixin.java @@ -18,15 +18,14 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.mojang.blaze3d.buffers.GpuBuffer; import com.mojang.blaze3d.buffers.GpuBufferSlice; import net.minecraft.client.render.fog.FogRenderer; 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; import static net.minecraft.client.render.fog.FogRenderer.FOG_UBO_SIZE; @@ -36,9 +35,11 @@ public class FogRendererMixin { @Shadow private GpuBuffer emptyBuffer; - @Inject(method = "getFogBuffer", at = @At("HEAD"), cancellable = true) - private void modify(FogRenderer.FogType fogType, CallbackInfoReturnable cir) { + @WrapMethod(method = "getFogBuffer") + private GpuBufferSlice modify(FogRenderer.FogType fogType, Operation original) { if (fogType == FogRenderer.FogType.WORLD && NoRender.INSTANCE.isEnabled() && NoRender.getNoTerrainFog()) - cir.setReturnValue(emptyBuffer.slice(0L, FOG_UBO_SIZE)); + return emptyBuffer.slice(0L, FOG_UBO_SIZE); + + return original.call(fogType); } } diff --git a/src/main/java/com/lambda/mixin/render/GameRendererMixin.java b/src/main/java/com/lambda/mixin/render/GameRendererMixin.java index 98cf293e7..54ed3e48a 100644 --- a/src/main/java/com/lambda/mixin/render/GameRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/GameRendererMixin.java @@ -25,6 +25,7 @@ import com.lambda.module.modules.render.Zoom; 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; import com.mojang.blaze3d.buffers.GpuBufferSlice; @@ -43,17 +44,15 @@ @Mixin(GameRenderer.class) public class GameRendererMixin { - @Inject(method = "updateCrosshairTarget(F)V", at = @At("HEAD"), cancellable = true) - private void updateTargetedEntityInvoke(float tickDelta, CallbackInfo info) { - if (EventFlow.post(new RenderEvent.UpdateTarget()).isCanceled()) { - info.cancel(); - } + @WrapMethod(method = "updateCrosshairTarget(F)V") + private void updateTargetedEntityInvoke(float tickProgress, Operation original) { + if (!EventFlow.post(new RenderEvent.UpdateTarget()).isCanceled()) + original.call(tickProgress); } @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 original) { original.call(instance, allocator, tickCounter, renderBlockOutline, camera, positionMatrix, basicProjectionMatrix, projectionMatrix, fogBuffer, fogColor, renderSky); - RenderMain.render3D(positionMatrix, projectionMatrix); } @@ -62,9 +61,10 @@ private float modifyMax(float original) { return (NoRender.INSTANCE.isEnabled() && NoRender.getNoNausea()) ? 0 : original; } - @Inject(method = "showFloatingItem", at = @At("HEAD"), cancellable = true) - private void injectShowFloatingItem(ItemStack floatingItem, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoFloatingItemAnimation()) ci.cancel(); + @WrapMethod(method = "showFloatingItem") + private void injectShowFloatingItem(ItemStack floatingItem, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoFloatingItemAnimation()) + original.call(floatingItem); } @ModifyReturnValue(method = "getFov", at = @At("RETURN")) diff --git a/src/main/java/com/lambda/mixin/render/HandledScreenMixin.java b/src/main/java/com/lambda/mixin/render/HandledScreenMixin.java index 3c66e9c53..48aa2671d 100644 --- a/src/main/java/com/lambda/mixin/render/HandledScreenMixin.java +++ b/src/main/java/com/lambda/mixin/render/HandledScreenMixin.java @@ -18,30 +18,27 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.ContainerPreview; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.gui.Click; import net.minecraft.client.gui.screen.ingame.HandledScreen; 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(HandledScreen.class) public class HandledScreenMixin { - @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - private void onMouseClicked(Click click, boolean doubled, CallbackInfoReturnable cir) { - if (ContainerPreview.INSTANCE.isEnabled() && ContainerPreview.isLocked()) { - if (ContainerPreview.isMouseOverLockedTooltip((int) click.x(), (int) click.y())) { - cir.setReturnValue(true); - } - } + @WrapMethod(method = "mouseClicked") + private boolean onMouseClicked(Click click, boolean doubled, Operation original) { + if (ContainerPreview.INSTANCE.isDisabled() || !ContainerPreview.isLocked()) + original.call(click, doubled); + + return ContainerPreview.isMouseOverLockedTooltip((int) click.x(), (int) click.y()); } - @Inject(method = "mouseReleased", at = @At("HEAD"), cancellable = true) - private void onMouseReleased(Click click, CallbackInfoReturnable cir) { - if (ContainerPreview.INSTANCE.isEnabled() && ContainerPreview.isLocked()) { - if (ContainerPreview.isMouseOverLockedTooltip((int) click.x(), (int) click.y())) { - cir.setReturnValue(true); - } - } + @WrapMethod(method = "mouseReleased") + private boolean onMouseReleased(Click click, Operation original) { + if (ContainerPreview.INSTANCE.isDisabled() || !ContainerPreview.isLocked()) + original.call(click); + + return ContainerPreview.isMouseOverLockedTooltip((int) click.x(), (int) click.y()); } } diff --git a/src/main/java/com/lambda/mixin/render/HeadFeatureRendererMixin.java b/src/main/java/com/lambda/mixin/render/HeadFeatureRendererMixin.java index bb8416614..b724b4603 100644 --- a/src/main/java/com/lambda/mixin/render/HeadFeatureRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/HeadFeatureRendererMixin.java @@ -18,21 +18,19 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.NoRender; -import net.minecraft.client.render.VertexConsumerProvider; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; 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; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(HeadFeatureRenderer.class) public class HeadFeatureRendererMixin { - @Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;ILnet/minecraft/client/render/entity/state/EntityRenderState;FF)V", at = @At("HEAD"), cancellable = true) - private void injectRender(MatrixStack matrices, OrderedRenderCommandQueue queue, int light, EntityRenderState state, float limbAngle, float limbDistance, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoArmor() && NoRender.getIncludeNoOtherHeadItems()) ci.cancel(); + @WrapMethod(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;ILnet/minecraft/client/render/entity/state/EntityRenderState;FF)V") + private void injectRender(MatrixStack matrices, OrderedRenderCommandQueue queue, int light, EntityRenderState state, float limbAngle, float limbDistance, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoArmor() || !NoRender.getIncludeNoOtherHeadItems()) + original.call(matrices, queue, light, state, limbAngle, limbDistance); } } diff --git a/src/main/java/com/lambda/mixin/render/InGameHudMixin.java b/src/main/java/com/lambda/mixin/render/InGameHudMixin.java index d6ca4f2ca..42e2d0640 100644 --- a/src/main/java/com/lambda/mixin/render/InGameHudMixin.java +++ b/src/main/java/com/lambda/mixin/render/InGameHudMixin.java @@ -17,9 +17,10 @@ package com.lambda.mixin.render; -import com.lambda.gui.DearImGui; import com.lambda.module.modules.render.NoRender; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.InGameHud; import net.minecraft.client.render.RenderTickCounter; @@ -28,37 +29,39 @@ import net.minecraft.util.Identifier; 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.ModifyArgs; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.invoke.arg.Args; @Mixin(InGameHud.class) public class InGameHudMixin { - - @Inject(method = "renderNauseaOverlay", at = @At("HEAD"), cancellable = true) - private void injectRenderNauseaOverlay(DrawContext context, float nauseaStrength, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoNausea()) ci.cancel(); + @WrapMethod(method = "renderNauseaOverlay") + private void injectRenderNauseaOverlay(DrawContext context, float nauseaStrength, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoNausea()) + original.call(context, nauseaStrength); } - @Inject(method = "renderPortalOverlay", at = @At("HEAD"), cancellable = true) - private void injectRenderPortalOverlay(DrawContext context, float nauseaStrength, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoPortalOverlay()) ci.cancel(); + @WrapMethod(method = "renderPortalOverlay") + private void injectRenderPortalOverlay(DrawContext context, float nauseaStrength, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoPortalOverlay()) + original.call(context, nauseaStrength); } - @Inject(method = "renderVignetteOverlay", at = @At("HEAD"), cancellable = true) - private void injectRenderVignetteOverlay(DrawContext context, Entity entity, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoVignette()) ci.cancel(); + @WrapMethod(method = "renderVignetteOverlay") + private void injectRenderVignetteOverlay(DrawContext context, Entity entity, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoVignette()) + original.call(context, entity); } - @Inject(method = "renderStatusEffectOverlay", at = @At("HEAD"), cancellable = true) - private void injectRenderStatusEffectOverlay(DrawContext context, RenderTickCounter tickCounter, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoStatusEffects()) ci.cancel(); + @WrapMethod(method = "renderStatusEffectOverlay") + private void injectRenderStatusEffectOverlay(DrawContext context, RenderTickCounter tickCounter, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoStatusEffects()) + original.call(context, tickCounter); } - @Inject(method = "renderSpyglassOverlay", at = @At("HEAD"), cancellable = true) - private void injectRenderSpyglassOverlay(DrawContext context, float scale, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoSpyglassOverlay()) ci.cancel(); + @WrapMethod(method = "renderSpyglassOverlay") + private void injectRenderSpyglassOverlay(DrawContext context, float scale, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoSpyglassOverlay()) + original.call(context, scale); } @ModifyArgs(method = "renderMiscOverlays", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/InGameHud;renderOverlay(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/util/Identifier;F)V")) @@ -74,13 +77,15 @@ private int modifyIsFirstPerson(int original) { return (NoRender.INSTANCE.isEnabled() && NoRender.getNoPowderedSnowOverlay()) ? 0 : original; } - @Inject(method = "renderScoreboardSidebar(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/scoreboard/ScoreboardObjective;)V", at = @At("HEAD"), cancellable = true) - private void injectRenderScoreboardSidebar(DrawContext drawContext, ScoreboardObjective objective, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoScoreBoard()) ci.cancel(); + @WrapMethod(method = "renderScoreboardSidebar(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/scoreboard/ScoreboardObjective;)V") + private void injectRenderScoreboardSidebar(DrawContext context, ScoreboardObjective objective, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoScoreBoard()) + original.call(context, objective); } - @Inject(method = "renderCrosshair", at = @At("HEAD"), cancellable = true) - private void injectRenderCrosshair(DrawContext context, RenderTickCounter tickCounter, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoCrosshair()) ci.cancel(); + @WrapMethod(method = "renderCrosshair") + private void injectRenderCrosshair(DrawContext context, RenderTickCounter tickCounter, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoCrosshair()) + original.call(context, tickCounter); } } diff --git a/src/main/java/com/lambda/mixin/render/LightmapTextureManagerMixin.java b/src/main/java/com/lambda/mixin/render/LightmapTextureManagerMixin.java index 48dec03ed..32799f38b 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. * diff --git a/src/main/java/com/lambda/mixin/render/PlayerListHudMixin.java b/src/main/java/com/lambda/mixin/render/PlayerListHudMixin.java index 30f55c6a8..5b8b7dc4d 100644 --- a/src/main/java/com/lambda/mixin/render/PlayerListHudMixin.java +++ b/src/main/java/com/lambda/mixin/render/PlayerListHudMixin.java @@ -22,6 +22,8 @@ import com.lambda.util.text.TextBuilder; import com.lambda.util.text.TextDslKt; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import kotlin.Unit; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.hud.PlayerListHud; @@ -38,9 +40,7 @@ import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Constant; -import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyConstant; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.Comparator; import java.util.List; @@ -57,19 +57,19 @@ public class PlayerListHudMixin { @Shadow @Final private MinecraftClient client; - @Inject(method = "collectPlayerEntries", at = @At(value = "HEAD"), cancellable = true) - private void onCollectPlayerEntriesHead(CallbackInfoReturnable> cir) { - if (ExtraTab.INSTANCE.isDisabled()) return; - if (client.player == null) return; - cir.setReturnValue( - client.player.networkHandler - .getListedPlayerListEntries() - .stream() - .filter(entry -> !ExtraTab.getFriendsOnly() || FriendManager.INSTANCE.isFriend(entry.getProfile())) - .sorted(ExtraTab.getSortFriendsFirst() ? FRIENDS_FIRST_ENTRY_ORDERING : ENTRY_ORDERING) - .limit(ExtraTab.getTabEntries()) - .toList() - ); + @SuppressWarnings("DataFlowIssue") + @WrapMethod(method = "collectPlayerEntries") + private List onCollectPlayerEntriesHead(Operation> original) { + if (ExtraTab.INSTANCE.isDisabled()) + return original.call(); + + return client.player.networkHandler + .getListedPlayerListEntries() + .stream() + .filter(entry -> !ExtraTab.getFriendsOnly() || FriendManager.INSTANCE.isFriend(entry.getProfile())) + .sorted(ExtraTab.getSortFriendsFirst() ? FRIENDS_FIRST_ENTRY_ORDERING : ENTRY_ORDERING) + .limit(ExtraTab.getTabEntries()) + .toList(); } @ModifyConstant(method = "render", constant = @Constant(intValue = 20)) diff --git a/src/main/java/com/lambda/mixin/render/RenderLayersMixin.java b/src/main/java/com/lambda/mixin/render/RenderLayersMixin.java index 96e786e33..6bc4b1d0c 100644 --- a/src/main/java/com/lambda/mixin/render/RenderLayersMixin.java +++ b/src/main/java/com/lambda/mixin/render/RenderLayersMixin.java @@ -18,35 +18,36 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.XRay; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.BlockState; import net.minecraft.client.render.BlockRenderLayer; import net.minecraft.client.render.BlockRenderLayers; import net.minecraft.fluid.FluidState; 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 make blocks render as translucent for XRay functionality. - * * Note: In 1.21.11, RenderLayers was split - BlockRenderLayers now handles * block/fluid layer determination and returns BlockRenderLayer enum instead of RenderLayer. */ @Mixin(BlockRenderLayers.class) public class RenderLayersMixin { - @Inject(method = "getBlockLayer", at = @At("HEAD"), cancellable = true) - private static void injectGetBlockLayer(BlockState state, CallbackInfoReturnable cir) { - if (XRay.INSTANCE.isDisabled()) return; + @WrapMethod(method = "getBlockLayer") + private static BlockRenderLayer injectGetBlockLayer(BlockState state, Operation original) { final var opacity = XRay.getOpacity(); - if (opacity <= 0 || opacity >= 100) return; - if (!XRay.isSelected(state)) cir.setReturnValue(BlockRenderLayer.TRANSLUCENT); + if (XRay.INSTANCE.isDisabled() || XRay.isSelected(state) || opacity <= 0 || opacity >= 100) + return original.call(state); + + return BlockRenderLayer.TRANSLUCENT; } - @Inject(method = "getFluidLayer", at = @At("HEAD"), cancellable = true) - private static void injectGetFluidLayer(FluidState state, CallbackInfoReturnable cir) { - if (XRay.INSTANCE.isDisabled()) return; + @WrapMethod(method = "getFluidLayer") + private static BlockRenderLayer injectGetFluidLayer(FluidState state, Operation original) { final var opacity = XRay.getOpacity(); - if (opacity > 0 && opacity < 100) cir.setReturnValue(BlockRenderLayer.TRANSLUCENT); + if (XRay.INSTANCE.isDisabled() || opacity <= 0 || opacity >= 100) + return original.call(state); + + return BlockRenderLayer.TRANSLUCENT; } } diff --git a/src/main/java/com/lambda/mixin/render/ScreenHandlerMixin.java b/src/main/java/com/lambda/mixin/render/ScreenHandlerMixin.java index 23c243a6f..1ea7847bf 100644 --- a/src/main/java/com/lambda/mixin/render/ScreenHandlerMixin.java +++ b/src/main/java/com/lambda/mixin/render/ScreenHandlerMixin.java @@ -19,19 +19,19 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.InventoryEvent; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.item.ItemStack; import net.minecraft.screen.ScreenHandler; 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 java.util.List; @Mixin(ScreenHandler.class) public class ScreenHandlerMixin { - @Inject(method = "updateSlotStacks", at = @At("TAIL")) - private void onUpdateSlotStacksHead(int revision, List stacks, ItemStack cursorStack, CallbackInfo ci) { + @WrapMethod(method = "updateSlotStacks") + private void onUpdateSlotStacksHead(int revision, List stacks, ItemStack cursorStack, Operation original) { + original.call(revision, stacks, cursorStack); EventFlow.post(new InventoryEvent.FullUpdate(revision, stacks, cursorStack)); } } diff --git a/src/main/java/com/lambda/mixin/render/ScreenMixin.java b/src/main/java/com/lambda/mixin/render/ScreenMixin.java index 6ed4f2c53..bc3b278e5 100644 --- a/src/main/java/com/lambda/mixin/render/ScreenMixin.java +++ b/src/main/java/com/lambda/mixin/render/ScreenMixin.java @@ -20,6 +20,7 @@ import com.lambda.gui.components.QuickSearch; import com.lambda.module.modules.render.ContainerPreview; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.client.MinecraftClient; @@ -29,31 +30,30 @@ import org.lwjgl.glfw.GLFW; 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(Screen.class) public class ScreenMixin { - @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true) - private void onKeyPressed(KeyInput input, CallbackInfoReturnable cir) { + @WrapMethod(method = "keyPressed") + private boolean onKeyPressed(KeyInput input, Operation original) { if (input.key() == GLFW.GLFW_KEY_ESCAPE && QuickSearch.INSTANCE.isOpen()) { QuickSearch.INSTANCE.close(); - cir.setReturnValue(true); + return true; } + + return original.call(input); } - @Inject(method = "renderInGameBackground", at = @At("HEAD"), cancellable = true) - private void injectRenderInGameBackground(DrawContext context, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoGuiShadow()) ci.cancel(); + @WrapMethod(method = "renderInGameBackground") + private void injectRenderInGameBackground(DrawContext context, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoGuiShadow()) + original.call(context); } @WrapOperation(method = "renderWithTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;render(Lnet/minecraft/client/gui/DrawContext;IIF)V")) private void wrapRender(Screen instance, DrawContext context, int mouseX, int mouseY, float deltaTicks, Operation original) { original.call(instance, context, mouseX, mouseY, deltaTicks); - if (ContainerPreview.INSTANCE.isEnabled() && ContainerPreview.isLocked()) { + if (ContainerPreview.INSTANCE.isEnabled() && ContainerPreview.isLocked()) ContainerPreview.renderLockedTooltip(context, MinecraftClient.getInstance().textRenderer); - } } } diff --git a/src/main/java/com/lambda/mixin/render/SodiumBlockOcclusionCacheMixin.java b/src/main/java/com/lambda/mixin/render/SodiumBlockOcclusionCacheMixin.java index 2ec34d4de..4aa984920 100644 --- a/src/main/java/com/lambda/mixin/render/SodiumBlockOcclusionCacheMixin.java +++ b/src/main/java/com/lambda/mixin/render/SodiumBlockOcclusionCacheMixin.java @@ -33,6 +33,7 @@ public class SodiumBlockOcclusionCacheMixin { private boolean modifyShouldDrawSide(boolean original, BlockState state, BlockView view, BlockPos pos, Direction facing) { if (XRay.INSTANCE.isEnabled() && XRay.isSelected(state) && XRay.getOpacity() < 100) return true; + return original; } } diff --git a/src/main/java/com/lambda/mixin/render/SodiumFluidRendererImplMixin.java b/src/main/java/com/lambda/mixin/render/SodiumFluidRendererImplMixin.java index 2d50b3e71..0bb085061 100644 --- a/src/main/java/com/lambda/mixin/render/SodiumFluidRendererImplMixin.java +++ b/src/main/java/com/lambda/mixin/render/SodiumFluidRendererImplMixin.java @@ -18,6 +18,8 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.XRay; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildBuffers; import net.caffeinemc.mods.sodium.client.render.chunk.translucent_sorting.TranslucentGeometryCollector; import net.caffeinemc.mods.sodium.client.world.LevelSlice; @@ -26,15 +28,12 @@ import net.minecraft.fluid.FluidState; import net.minecraft.util.math.BlockPos; 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(FluidRendererImpl.class) public class SodiumFluidRendererImplMixin { - @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void injectRender(LevelSlice level, BlockState blockState, FluidState fluidState, BlockPos blockPos, BlockPos offset, TranslucentGeometryCollector collector, ChunkBuildBuffers buffers, CallbackInfo info) { - if (XRay.INSTANCE.isEnabled() && !XRay.isSelected(blockState) && XRay.getOpacity() < 100) - info.cancel(); + @WrapMethod(method = "render") + private void injectRender(LevelSlice level, BlockState blockState, FluidState fluidState, BlockPos blockPos, BlockPos offset, TranslucentGeometryCollector collector, ChunkBuildBuffers buffers, Operation original) { + if (XRay.INSTANCE.isDisabled() || !XRay.isSelected(blockState) || XRay.getOpacity() >= 100) + original.call(level, blockState, fluidState, blockPos, offset, collector, buffers); } } 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/TooltipComponentMixin.java b/src/main/java/com/lambda/mixin/render/TooltipComponentMixin.java index 1088f5c65..dfc092f93 100644 --- a/src/main/java/com/lambda/mixin/render/TooltipComponentMixin.java +++ b/src/main/java/com/lambda/mixin/render/TooltipComponentMixin.java @@ -19,30 +19,23 @@ import com.lambda.module.modules.render.ContainerPreview; import com.lambda.module.modules.render.MapPreview; -import net.minecraft.client.gui.tooltip.BundleTooltipComponent; -import net.minecraft.client.gui.tooltip.ProfilesTooltipComponent; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.gui.tooltip.TooltipComponent; -import net.minecraft.item.tooltip.BundleTooltipData; import net.minecraft.item.tooltip.TooltipData; 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(TooltipComponent.class) public interface TooltipComponentMixin { - @Inject(method = "of(Lnet/minecraft/item/tooltip/TooltipData;)Lnet/minecraft/client/gui/tooltip/TooltipComponent;", at = @At("HEAD"), cancellable = true) - private static void of(TooltipData tooltipData, CallbackInfoReturnable cir) { - if (ContainerPreview.INSTANCE.isEnabled() && tooltipData instanceof ContainerPreview.ContainerComponent containerComponent) { - cir.setReturnValue(containerComponent); - return; - } + @WrapMethod(method = "of(Lnet/minecraft/item/tooltip/TooltipData;)Lnet/minecraft/client/gui/tooltip/TooltipComponent;") + private static TooltipComponent of(TooltipData tooltipData, Operation original) { + if (ContainerPreview.INSTANCE.isEnabled() && + tooltipData instanceof ContainerPreview.ContainerComponent containerComponent) + return containerComponent; - if (MapPreview.INSTANCE.isEnabled()) cir.setReturnValue((switch (tooltipData) { - case MapPreview.MapComponent mapComponent -> mapComponent; - case BundleTooltipData bundleTooltipData -> new BundleTooltipComponent(bundleTooltipData.contents()); - case ProfilesTooltipComponent.ProfilesData profilesData -> new ProfilesTooltipComponent(profilesData); - default -> throw new IllegalArgumentException("Unknown TooltipComponent"); - })); + if (MapPreview.INSTANCE.isEnabled() && tooltipData instanceof MapPreview.MapComponent mapComponent) + return mapComponent; + + return original.call(tooltipData); } } diff --git a/src/main/java/com/lambda/mixin/render/WeatherRenderingMixin.java b/src/main/java/com/lambda/mixin/render/WeatherRenderingMixin.java index 5956f8a3c..8b23b8dc8 100644 --- a/src/main/java/com/lambda/mixin/render/WeatherRenderingMixin.java +++ b/src/main/java/com/lambda/mixin/render/WeatherRenderingMixin.java @@ -18,28 +18,30 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.Weather; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.WeatherRendering; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.biome.Biome; 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(WeatherRendering.class) public class WeatherRenderingMixin { - @Inject(method = "getPrecipitationAt", at = @At("HEAD"), cancellable = true) - private void injectGetPrecipitationAt(World world, BlockPos pos, CallbackInfoReturnable cir) { - if (Weather.INSTANCE.isEnabled()) { - Weather.WeatherMode mode = Weather.getWeatherMode(); - if (world.getRegistryKey() == World.OVERWORLD) { - if (mode == Weather.WeatherMode.Rain && Weather.getOverrideSnow()) cir.setReturnValue(Biome.Precipitation.RAIN); - else if (mode == Weather.WeatherMode.Snow) cir.setReturnValue(Biome.Precipitation.SNOW); - } else { - if (mode == Weather.WeatherMode.Snow) cir.setReturnValue(Biome.Precipitation.SNOW); - else cir.setReturnValue(Biome.Precipitation.RAIN); - } + @WrapMethod(method = "getPrecipitationAt") + private Biome.Precipitation injectGetPrecipitationAt(World world, BlockPos pos, Operation original) { + if (Weather.INSTANCE.isDisabled()) + return original.call(world, pos); + + Weather.WeatherMode mode = Weather.getWeatherMode(); + if (world.getRegistryKey() == World.OVERWORLD) { + if (mode == Weather.WeatherMode.Rain && Weather.getOverrideSnow()) return Biome.Precipitation.RAIN; + else if (mode == Weather.WeatherMode.Snow) return Biome.Precipitation.SNOW; + } else { + if (mode == Weather.WeatherMode.Snow) return Biome.Precipitation.SNOW; + else return Biome.Precipitation.RAIN; } + + return original.call(world, pos); // ?? } } diff --git a/src/main/java/com/lambda/mixin/render/WorldBorderRenderingMixin.java b/src/main/java/com/lambda/mixin/render/WorldBorderRenderingMixin.java index 9553a39a5..b8bd9d251 100644 --- a/src/main/java/com/lambda/mixin/render/WorldBorderRenderingMixin.java +++ b/src/main/java/com/lambda/mixin/render/WorldBorderRenderingMixin.java @@ -18,19 +18,18 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; 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; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(WorldBorderRendering.class) public class WorldBorderRenderingMixin { - @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void injectRender(WorldBorderRenderState state, Vec3d cameraPos, double viewDistanceBlocks, double farPlaneDistance, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoWorldBorder()) ci.cancel(); + @WrapMethod(method = "render") + private void injectRender(WorldBorderRenderState state, Vec3d cameraPos, double viewDistanceBlocks, double farPlaneDistance, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoWorldBorder()) + original.call(state, cameraPos, viewDistanceBlocks, farPlaneDistance); } } diff --git a/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java b/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java index 313cb6ddd..e329870fb 100644 --- a/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java @@ -21,6 +21,8 @@ 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.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.Camera; import net.minecraft.client.render.WorldRenderer; import net.minecraft.entity.Entity; @@ -28,20 +30,20 @@ import net.minecraft.entity.effect.StatusEffects; 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.ModifyArg; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(WorldRenderer.class) public class WorldRendererMixin { - @Inject(method = "hasBlindnessOrDarkness(Lnet/minecraft/client/render/Camera;)Z", at = @At(value = "HEAD"), cancellable = true) - private void modifyEffectCheck(Camera camera, CallbackInfoReturnable cir) { + @WrapMethod(method = "hasBlindnessOrDarkness(Lnet/minecraft/client/render/Camera;)Z") + private boolean modifyEffectCheck(Camera camera, Operation original) { Entity entity = camera.getFocusedEntity(); if (entity instanceof LivingEntity livingEntity && NoRender.INSTANCE.isEnabled()) { boolean blind = livingEntity.hasStatusEffect(StatusEffects.BLINDNESS) && !NoRender.getNoBlindness(); boolean dark = livingEntity.hasStatusEffect(StatusEffects.DARKNESS) && !NoRender.getNoDarkness(); - cir.setReturnValue(blind || dark); + return blind || dark; } + + return original.call(camera); } @ModifyArg(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;updateCamera(Lnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/Frustum;Z)V"), index = 2) diff --git a/src/main/java/com/lambda/mixin/render/blockentity/AbstractSignBlockEntityRendererMixin.java b/src/main/java/com/lambda/mixin/render/blockentity/AbstractSignBlockEntityRendererMixin.java index 9d6232c03..80dd88004 100644 --- a/src/main/java/com/lambda/mixin/render/blockentity/AbstractSignBlockEntityRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/blockentity/AbstractSignBlockEntityRendererMixin.java @@ -18,19 +18,19 @@ package com.lambda.mixin.render.blockentity; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.block.entity.AbstractSignBlockEntityRenderer; import net.minecraft.client.render.block.entity.state.SignBlockEntityRenderState; import net.minecraft.client.render.command.OrderedRenderCommandQueue; 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(AbstractSignBlockEntityRenderer.class) public class AbstractSignBlockEntityRendererMixin { - @Inject(method = "renderText", at = @At("HEAD"), cancellable = true) - private void injectRenderText(SignBlockEntityRenderState renderState, MatrixStack matrices, OrderedRenderCommandQueue queue, boolean front, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoSignText()) ci.cancel(); + @WrapMethod(method = "renderText") + private void injectRenderText(SignBlockEntityRenderState renderState, MatrixStack matrices, OrderedRenderCommandQueue queue, boolean front, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoSignText()) + original.call(renderState, matrices, queue, front); } } diff --git a/src/main/java/com/lambda/mixin/render/blockentity/BeaconBlockEntityRendererMixin.java b/src/main/java/com/lambda/mixin/render/blockentity/BeaconBlockEntityRendererMixin.java index 8ad9a6d83..9d1d6ac08 100644 --- a/src/main/java/com/lambda/mixin/render/blockentity/BeaconBlockEntityRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/blockentity/BeaconBlockEntityRendererMixin.java @@ -18,20 +18,20 @@ package com.lambda.mixin.render.blockentity; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; import net.minecraft.client.render.block.entity.state.BeaconBlockEntityRenderState; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.state.CameraRenderState; 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(BeaconBlockEntityRenderer.class) public class BeaconBlockEntityRendererMixin { - @Inject(method = "render(Lnet/minecraft/client/render/block/entity/state/BeaconBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At("HEAD"), cancellable = true) - private void injectRender(BeaconBlockEntityRenderState beaconBlockEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState cameraRenderState, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoBeaconBeams()) ci.cancel(); + @WrapMethod(method = "render(Lnet/minecraft/client/render/block/entity/state/BeaconBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V") + private void injectRender(BeaconBlockEntityRenderState beaconBlockEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState cameraRenderState, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoBeaconBeams()) + original.call(beaconBlockEntityRenderState, matrixStack, orderedRenderCommandQueue, cameraRenderState); } } 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..0f9fd8cc9 100644 --- a/src/main/java/com/lambda/mixin/render/blockentity/BlockEntityRenderDispatcherMixin.java +++ b/src/main/java/com/lambda/mixin/render/blockentity/BlockEntityRenderDispatcherMixin.java @@ -18,30 +18,28 @@ package com.lambda.mixin.render.blockentity; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.entity.BlockEntity; 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.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; +import org.spongepowered.asm.mixin.Mixin; /** * Mixin to disable block entity rendering when NoRender is enabled. - * * Note: In 1.21.11, BlockEntityRenderDispatcher was renamed to BlockEntityRenderManager * and uses a render state system. Returning null from getRenderState prevents rendering. */ @Mixin(BlockEntityRenderManager.class) public class BlockEntityRenderDispatcherMixin { - @Inject(method = "getRenderState", at = @At("HEAD"), cancellable = true) - private void injectGetRenderState( - E blockEntity, float tickProgress, ModelCommandRenderer.@Nullable CrumblingOverlayCommand crumblingOverlay, - CallbackInfoReturnable cir) { - if (NoRender.shouldOmitBlockEntity(blockEntity)) { - cir.setReturnValue(null); - } + @WrapMethod(method = "getRenderState") + private @Nullable S injectGetRenderState( + E blockEntity, float tickProgress, ModelCommandRenderer.@Nullable CrumblingOverlayCommand crumblingOverlay, Operation original) { + if (NoRender.shouldOmitBlockEntity(blockEntity)) + return null; + + return original.call(blockEntity, tickProgress, crumblingOverlay); } } diff --git a/src/main/java/com/lambda/mixin/render/blockentity/EnchantingTableBlockEntityRendererMixin.java b/src/main/java/com/lambda/mixin/render/blockentity/EnchantingTableBlockEntityRendererMixin.java index f0e5b02dd..454d5603d 100644 --- a/src/main/java/com/lambda/mixin/render/blockentity/EnchantingTableBlockEntityRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/blockentity/EnchantingTableBlockEntityRendererMixin.java @@ -18,20 +18,20 @@ package com.lambda.mixin.render.blockentity; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.block.entity.EnchantingTableBlockEntityRenderer; import net.minecraft.client.render.block.entity.state.EnchantingTableBlockEntityRenderState; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.state.CameraRenderState; 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(EnchantingTableBlockEntityRenderer.class) public class EnchantingTableBlockEntityRendererMixin { - @Inject(method = "render(Lnet/minecraft/client/render/block/entity/state/EnchantingTableBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At("HEAD"), cancellable = true) - private void injectRender(EnchantingTableBlockEntityRenderState renderState, MatrixStack matrices, OrderedRenderCommandQueue queue, CameraRenderState cameraRenderState, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoEnchantingTableBook()) ci.cancel(); + @WrapMethod(method = "render(Lnet/minecraft/client/render/block/entity/state/EnchantingTableBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V") + private void injectRender(EnchantingTableBlockEntityRenderState enchantingTableBlockEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState cameraRenderState, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoEnchantingTableBook()) + original.call(enchantingTableBlockEntityRenderState, matrixStack, orderedRenderCommandQueue, cameraRenderState); } } diff --git a/src/main/java/com/lambda/mixin/render/blockentity/MobSpawnerBlockEntityRendererMixin.java b/src/main/java/com/lambda/mixin/render/blockentity/MobSpawnerBlockEntityRendererMixin.java index f47e9d2c0..e627184f2 100644 --- a/src/main/java/com/lambda/mixin/render/blockentity/MobSpawnerBlockEntityRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/blockentity/MobSpawnerBlockEntityRendererMixin.java @@ -18,6 +18,8 @@ package com.lambda.mixin.render.blockentity; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.block.entity.MobSpawnerBlockEntityRenderer; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.EntityRenderManager; @@ -25,14 +27,12 @@ import net.minecraft.client.render.state.CameraRenderState; 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(MobSpawnerBlockEntityRenderer.class) public class MobSpawnerBlockEntityRendererMixin { - @Inject(method = "renderDisplayEntity", at = @At("HEAD"), cancellable = true) - private static void injectRender(MatrixStack matrices, OrderedRenderCommandQueue queue, EntityRenderState state, EntityRenderManager entityRenderDispatcher, float rotation, float scale, CameraRenderState cameraRenderState, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoSpawnerMob()) ci.cancel(); + @WrapMethod(method = "renderDisplayEntity") + private static void injectRender(MatrixStack matrices, OrderedRenderCommandQueue queue, EntityRenderState state, EntityRenderManager entityRenderDispatcher, float rotation, float scale, CameraRenderState cameraRenderState, Operation original) { + if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoSpawnerMob()) + original.call(matrices, queue, state, entityRenderDispatcher, rotation, scale, cameraRenderState); } } diff --git a/src/main/java/com/lambda/mixin/render/particle/BillboardParticleMixin.java b/src/main/java/com/lambda/mixin/render/particle/BillboardParticleMixin.java index 06faa1a5d..0883e76bc 100644 --- a/src/main/java/com/lambda/mixin/render/particle/BillboardParticleMixin.java +++ b/src/main/java/com/lambda/mixin/render/particle/BillboardParticleMixin.java @@ -18,19 +18,19 @@ package com.lambda.mixin.render.particle; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.particle.BillboardParticle; import net.minecraft.client.particle.BillboardParticleSubmittable; import net.minecraft.client.particle.Particle; import net.minecraft.client.render.Camera; 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(BillboardParticle.class) public class BillboardParticleMixin { - @Inject(method = "render(Lnet/minecraft/client/particle/BillboardParticleSubmittable;Lnet/minecraft/client/render/Camera;F)V", at = @At("HEAD"), cancellable = true) - private void injectRender(BillboardParticleSubmittable submittable, Camera camera, float tickDelta, CallbackInfo ci) { - if (NoRender.shouldOmitParticle((Particle) ((Object) this))) ci.cancel(); + @WrapMethod(method = "render(Lnet/minecraft/client/particle/BillboardParticleSubmittable;Lnet/minecraft/client/render/Camera;F)V") + private void injectRender(BillboardParticleSubmittable submittable, Camera camera, float tickProgress, Operation original) { + if (!NoRender.shouldOmitParticle((Particle) ((Object) this))) + original.call(submittable, camera, tickProgress); } } diff --git a/src/main/java/com/lambda/mixin/render/particle/ElderGuardianParticleRendererMixin.java b/src/main/java/com/lambda/mixin/render/particle/ElderGuardianParticleRendererMixin.java index cc7b2e818..406d82e1b 100644 --- a/src/main/java/com/lambda/mixin/render/particle/ElderGuardianParticleRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/particle/ElderGuardianParticleRendererMixin.java @@ -18,6 +18,8 @@ package com.lambda.mixin.render.particle; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.particle.ElderGuardianParticle; import net.minecraft.client.particle.ElderGuardianParticleRenderer; import net.minecraft.client.particle.NoRenderParticleRenderer; @@ -25,14 +27,14 @@ import net.minecraft.client.render.Frustum; import net.minecraft.client.render.Submittable; 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(ElderGuardianParticleRenderer.class) public class ElderGuardianParticleRendererMixin { - @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void injectRender(Frustum frustum, Camera camera, float tickProgress, CallbackInfoReturnable cir) { - if (NoRender.shouldOmitParticle(ElderGuardianParticle.class)) cir.setReturnValue(NoRenderParticleRenderer.EMPTY); + @WrapMethod(method = "render") + private Submittable injectRender(Frustum frustum, Camera camera, float tickProgress, Operation original) { + if (!NoRender.shouldOmitParticle(ElderGuardianParticle.class)) + return original.call(frustum, camera, tickProgress); + + return NoRenderParticleRenderer.EMPTY; } } diff --git a/src/main/java/com/lambda/mixin/render/particle/ItemPickupParticleRendererMixin.java b/src/main/java/com/lambda/mixin/render/particle/ItemPickupParticleRendererMixin.java index 509b3323c..7133550c3 100644 --- a/src/main/java/com/lambda/mixin/render/particle/ItemPickupParticleRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/particle/ItemPickupParticleRendererMixin.java @@ -18,6 +18,8 @@ package com.lambda.mixin.render.particle; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.particle.ItemPickupParticle; import net.minecraft.client.particle.ItemPickupParticleRenderer; import net.minecraft.client.particle.NoRenderParticleRenderer; @@ -25,14 +27,14 @@ import net.minecraft.client.render.Frustum; import net.minecraft.client.render.Submittable; 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(ItemPickupParticleRenderer.class) public class ItemPickupParticleRendererMixin { - @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void injectRender(Frustum frustum, Camera camera, float tickProgress, CallbackInfoReturnable cir) { - if (NoRender.shouldOmitParticle(ItemPickupParticle.class)) cir.setReturnValue(NoRenderParticleRenderer.EMPTY); + @WrapMethod(method = "render") + private Submittable injectRender(Frustum frustum, Camera camera, float tickProgress, Operation original) { + if (!NoRender.shouldOmitParticle(ItemPickupParticle.class)) + return original.call(frustum, camera, tickProgress); + + return NoRenderParticleRenderer.EMPTY; } } 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/ClientChunkManagerMixin.java b/src/main/java/com/lambda/mixin/world/ClientChunkManagerMixin.java index 680ed4c54..356070f8a 100644 --- a/src/main/java/com/lambda/mixin/world/ClientChunkManagerMixin.java +++ b/src/main/java/com/lambda/mixin/world/ClientChunkManagerMixin.java @@ -19,19 +19,18 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.WorldEvent; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.client.world.ClientChunkManager; -import net.minecraft.client.world.ClientWorld; import net.minecraft.network.PacketByteBuf; import net.minecraft.network.packet.s2c.play.ChunkData; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.Heightmap; import net.minecraft.world.chunk.WorldChunk; -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.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @@ -40,49 +39,23 @@ @Mixin(ClientChunkManager.class) public class ClientChunkManagerMixin { - @Final - @Shadow - ClientWorld world; + @WrapMethod(method = "loadChunkFromPacket") + private WorldChunk onChunkLoad(int x, int z, PacketByteBuf buf, Map heightmaps, Consumer consumer, Operation original) { + var ret = original.call(x, z, buf, heightmaps, consumer); - @Inject(method = "loadChunkFromPacket", at = @At("TAIL")) - private void onChunkLoad( - int x, int z, PacketByteBuf buf, Map heightmaps, Consumer consumer, CallbackInfoReturnable cir - ) { - EventFlow.post(new WorldEvent.ChunkEvent.Load(cir.getReturnValue())); + EventFlow.post(new WorldEvent.ChunkEvent.Load(ret)); + return ret; } @Inject(method = "loadChunkFromPacket", at = @At(value = "NEW", target = "net/minecraft/world/chunk/WorldChunk", shift = At.Shift.BEFORE), locals = LocalCapture.CAPTURE_FAILHARD) private void onChunkUnload(int x, int z, PacketByteBuf buf, Map heightmaps, Consumer consumer, CallbackInfoReturnable cir, int i, WorldChunk chunk, ChunkPos chunkPos) { - if (chunk != null) { + if (chunk != null) EventFlow.post(new WorldEvent.ChunkEvent.Unload(chunk)); - } } - @Inject(method = "unload", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientChunkManager$ClientChunkMap;unloadChunk(ILnet/minecraft/world/chunk/WorldChunk;)V"), locals = LocalCapture.CAPTURE_FAILHARD) - private void onChunkUnload(ChunkPos pos, CallbackInfo ci, int i, WorldChunk chunk) { + @WrapOperation(method = "unload", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientChunkManager$ClientChunkMap;unloadChunk(ILnet/minecraft/world/chunk/WorldChunk;)V")) + private void onChunkUnload(ClientChunkManager.ClientChunkMap instance, int index, WorldChunk chunk, Operation original) { + original.call(instance, index, chunk); EventFlow.post(new WorldEvent.ChunkEvent.Unload(chunk)); } - -// @Inject( -// method = "updateLoadDistance", -// at = @At( -// value = "INVOKE", -// target = "net/minecraft/client/world/ClientChunkManager$ClientChunkMap.isInRadius(II)Z" -// ), -// locals = LocalCapture.CAPTURE_FAILHARD -// ) -// private void onUpdateLoadDistance( -// int loadDistance, -// CallbackInfo ci, -// int oldRadius, -// int newRadius, -// ClientChunkManager.ClientChunkMap clientChunkMap, -// int k, -// WorldChunk oldChunk, -// ChunkPos chunkPos -// ) { -// if (!clientChunkMap.isInRadius(chunkPos.x, chunkPos.z)) { -// EventFlow.post(new WorldEvent.ChunkEvent.Unload(this.world, oldChunk)); -// } -// } } diff --git a/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java b/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java index 5b86cf797..ff2044b05 100644 --- a/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java +++ b/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java @@ -20,29 +20,30 @@ 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 com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; 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; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ClientWorld.class) public class ClientWorldMixin { - @Inject(method = "addEntity", at = @At("HEAD"), cancellable = true) - private void onAddEntity(Entity entity, CallbackInfo ci) { - if (EventFlow.post(new EntityEvent.Spawn(entity)).isCanceled()) ci.cancel(); + @WrapMethod(method = "addEntity") + private void onAddEntity(Entity entity, Operation original) { + if (!EventFlow.post(new EntityEvent.Spawn(entity)).isCanceled()) + original.call(entity); } - @Inject(method = "removeEntity", at = @At("HEAD")) - private void onRemoveEntity(int entityId, Entity.RemovalReason removalReason, CallbackInfo ci) { + @WrapMethod(method = "removeEntity") + private void onRemoveEntity(int entityId, Entity.RemovalReason removalReason, Operation original) { Entity entity = ((ClientWorld) (Object) this).getEntityById(entityId); - if (entity == null) return; + if (entity == null) { + original.call(entityId, removalReason); + return; + } + EventFlow.post(new EntityEvent.Removal(entity, removalReason)); } @@ -63,8 +64,9 @@ private void onRemoveEntity(int entityId, Entity.RemovalReason removalReason, Ca // } - @Inject(method = "handleBlockUpdate", at = @At("HEAD"), cancellable = true) - private void handleBlockUpdateInject(BlockPos pos, BlockState newState, int flags, CallbackInfo ci) { - if (EventFlow.post(new WorldEvent.BlockUpdate.Server(pos, newState)).isCanceled()) ci.cancel(); + @WrapMethod(method = "handleBlockUpdate") + private void handleBlockUpdateInject(BlockPos pos, BlockState state, int flags, Operation original) { + if (!EventFlow.post(new WorldEvent.BlockUpdate.Server(pos, state)).isCanceled()) + original.call(pos, state, flags); } } diff --git a/src/main/java/com/lambda/mixin/world/StructureTemplateMixin.java b/src/main/java/com/lambda/mixin/world/StructureTemplateMixin.java index 400b87bed..f27c0768d 100644 --- a/src/main/java/com/lambda/mixin/world/StructureTemplateMixin.java +++ b/src/main/java/com/lambda/mixin/world/StructureTemplateMixin.java @@ -18,6 +18,8 @@ package com.lambda.mixin.world; import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.Block; import net.minecraft.nbt.NbtCompound; import net.minecraft.registry.RegistryEntryLookup; @@ -25,9 +27,6 @@ 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.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.Objects; @@ -41,13 +40,15 @@ public String getAuthor(String original) { return Objects.equals(original, "?") || Objects.equals(original, "") ? "unknown" : original; } - @Inject(method = "writeNbt(Lnet/minecraft/nbt/NbtCompound;)Lnet/minecraft/nbt/NbtCompound;", at = @At("TAIL")) - public void writeNbt(NbtCompound nbt, CallbackInfoReturnable cir) { + @WrapMethod(method = "writeNbt(Lnet/minecraft/nbt/NbtCompound;)Lnet/minecraft/nbt/NbtCompound;") + public NbtCompound writeNbt(NbtCompound nbt, Operation original) { nbt.putString("author", author); + return original.call(nbt); } - @Inject(method = "readNbt(Lnet/minecraft/registry/RegistryEntryLookup;Lnet/minecraft/nbt/NbtCompound;)V", at = @At("TAIL")) - public void readNbt(RegistryEntryLookup blockLookup, NbtCompound nbt, CallbackInfo ci) { + @WrapMethod(method = "readNbt(Lnet/minecraft/registry/RegistryEntryLookup;Lnet/minecraft/nbt/NbtCompound;)V") + public void readNbt(RegistryEntryLookup blockLookup, NbtCompound nbt, Operation original) { + original.call(blockLookup, nbt); author = nbt.getString("author", "unknown"); } } diff --git a/src/main/java/com/lambda/mixin/world/WorldMixin.java b/src/main/java/com/lambda/mixin/world/WorldMixin.java index 7c23170c9..e8662c789 100644 --- a/src/main/java/com/lambda/mixin/world/WorldMixin.java +++ b/src/main/java/com/lambda/mixin/world/WorldMixin.java @@ -20,39 +20,39 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.WorldEvent; import com.lambda.module.modules.render.Weather; +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; 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(World.class) public abstract class WorldMixin { - @Inject(method = "onBlockStateChanged", at = @At("TAIL")) - void onBlockChanged(BlockPos pos, BlockState oldBlock, BlockState newBlock, CallbackInfo ci) { - EventFlow.post(new WorldEvent.BlockUpdate.Client(pos, oldBlock, newBlock)); + @WrapMethod(method = "onBlockStateChanged") + void onBlockChanged(BlockPos pos, BlockState oldState, BlockState newState, Operation original) { + original.call(pos, oldState, newState); + EventFlow.post(new WorldEvent.BlockUpdate.Client(pos, oldState, newState)); } - @Inject(method = "getThunderGradient(F)F", at = @At("HEAD"), cancellable = true) - private void injectGetThunderGradient(float tickProgress, CallbackInfoReturnable cir) { - if (Weather.INSTANCE.isEnabled()) { - if (Weather.getWeatherMode() == Weather.WeatherMode.Thunder) cir.setReturnValue(1f); - else cir.setReturnValue(0f); - } + @WrapMethod(method = "getThunderGradient(F)F") + private float injectGetThunderGradient(float tickProgress, Operation original) { + if (Weather.INSTANCE.isDisabled()) + return original.call(tickProgress); + + if (Weather.getWeatherMode() == Weather.WeatherMode.Thunder) return 1f; + else return 0f; } - @Inject(method = "getRainGradient", at = @At("HEAD"), cancellable = true) - private void injectGetRainGradient(float tickProgress, CallbackInfoReturnable cir) { - if (Weather.INSTANCE.isEnabled()) { - Weather.WeatherMode mode = Weather.getWeatherMode(); - if (mode == Weather.WeatherMode.Rain || - mode == Weather.WeatherMode.Snow || - mode == Weather.WeatherMode.Thunder - ) cir.setReturnValue(1f); - else cir.setReturnValue(0f); - } + @WrapMethod(method = "getRainGradient") + private float injectGetRainGradient(float tickProgress, Operation original) { + if (Weather.INSTANCE.isDisabled()) + return original.call(tickProgress); + + Weather.WeatherMode mode = Weather.getWeatherMode(); + if (mode == Weather.WeatherMode.Rain || + mode == Weather.WeatherMode.Snow || + mode == Weather.WeatherMode.Thunder) return 1f; + else return 0f; } } diff --git a/src/main/resources/lambda.mixins.json b/src/main/resources/lambda.mixins.json index 4c1ec3587..253c6faba 100644 --- a/src/main/resources/lambda.mixins.json +++ b/src/main/resources/lambda.mixins.json @@ -43,8 +43,6 @@ "render.ChatScreenMixin", "render.ChunkOcclusionDataBuilderMixin", "render.DarknessEffectFogMixin", - "render.DebugHudMixin", - "render.DebugRendererMixin", "render.DrawContextMixin", "render.ElytraFeatureRendererMixin", "render.EntityRendererMixin", From 20077f729fb6fe190b97e64f224500ffcd3153f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emy=20=F0=9F=92=9C?= Date: Tue, 27 Jan 2026 09:19:25 -0500 Subject: [PATCH 2/3] Revert "Changes most of Inject by WrapMethod and WrapOperation" This reverts commit 4d0eac6d03b005f5756257909848849e897d09e9. --- .../com/lambda/mixin/CrashReportMixin.java | 3 +- .../lambda/mixin/MinecraftClientMixin.java | 17 ++-- .../baritone/BaritonePlayerContextMixin.java | 17 ++-- .../mixin/baritone/LookBehaviourMixin.java | 31 ++++--- .../mixin/client/sound/SoundSystemMixin.java | 17 ++-- .../ClientPlayInteractionManagerMixin.java | 85 ++++++++----------- .../mixin/entity/ClientPlayerEntityMixin.java | 32 +++---- .../com/lambda/mixin/entity/EntityMixin.java | 45 ++++------ .../mixin/entity/HandledScreensMixin.java | 18 ++-- .../mixin/entity/LivingEntityMixin.java | 35 ++++---- .../com/lambda/mixin/input/KeyboardMixin.java | 13 +++ .../mixin/network/ClientConnectionMixin.java | 71 +++++++++++----- .../network/ClientLoginNetworkMixin.java | 11 +-- .../ClientPlayNetworkHandlerMixin.java | 22 +++-- .../network/HandshakeC2SPacketMixin.java | 12 +-- .../network/LoginHelloC2SPacketMixin.java | 10 +-- .../mixin/network/LoginKeyC2SPacketMixin.java | 10 +-- .../AbstractTerrainRenderContextMixin.java | 18 ++-- .../render/ArmorFeatureRendererMixin.java | 2 + .../mixin/render/BackgroundRendererMixin.java | 3 + .../mixin/render/BlockModelRendererMixin.java | 16 ++-- .../mixin/render/BlockRenderManagerMixin.java | 13 ++- .../lambda/mixin/render/BossBarHudMixin.java | 12 +-- .../com/lambda/mixin/render/CameraMixin.java | 27 +++--- .../mixin/render/ChatInputSuggestorMixin.java | 4 +- .../lambda/mixin/render/ChatScreenMixin.java | 14 +-- .../ChunkOcclusionDataBuilderMixin.java | 12 +-- .../mixin/render/DarknessEffectFogMixin.java | 17 ++-- .../lambda/mixin/render/DebugHudMixin.java | 29 +++++++ .../mixin/render/DebugRendererMixin.java | 36 ++++++++ .../lambda/mixin/render/DrawContextMixin.java | 31 ++++--- .../mixin/render/EntityRendererMixin.java | 24 +++--- .../mixin/render/FluidRendererMixin.java | 26 +++--- .../lambda/mixin/render/FogRendererMixin.java | 13 ++- .../mixin/render/GameRendererMixin.java | 18 ++-- .../mixin/render/HandledScreenMixin.java | 31 ++++--- .../render/HeadFeatureRendererMixin.java | 14 +-- .../lambda/mixin/render/InGameHudMixin.java | 55 ++++++------ .../render/LightmapTextureManagerMixin.java | 2 + .../mixin/render/PlayerListHudMixin.java | 30 +++---- .../mixin/render/RenderLayersMixin.java | 27 +++--- .../mixin/render/ScreenHandlerMixin.java | 10 +-- .../com/lambda/mixin/render/ScreenMixin.java | 22 ++--- .../SodiumBlockOcclusionCacheMixin.java | 1 - .../render/SodiumFluidRendererImplMixin.java | 13 +-- .../mixin/render/SplashOverlayMixin.java | 4 +- .../mixin/render/TooltipComponentMixin.java | 29 ++++--- .../mixin/render/WeatherRenderingMixin.java | 30 +++---- .../render/WorldBorderRenderingMixin.java | 13 +-- .../mixin/render/WorldRendererMixin.java | 12 ++- .../AbstractSignBlockEntityRendererMixin.java | 12 +-- .../BeaconBlockEntityRendererMixin.java | 12 +-- .../BlockEntityRenderDispatcherMixin.java | 22 ++--- ...chantingTableBlockEntityRendererMixin.java | 12 +-- .../MobSpawnerBlockEntityRendererMixin.java | 12 +-- .../particle/BillboardParticleMixin.java | 12 +-- .../ElderGuardianParticleRendererMixin.java | 14 ++- .../ItemPickupParticleRendererMixin.java | 14 ++- .../mixin/world/AbstractBlockMixin.java | 3 + .../world/BlockCollisionSpliteratorMixin.java | 4 +- .../mixin/world/ClientChunkManagerMixin.java | 51 ++++++++--- .../lambda/mixin/world/ClientWorldMixin.java | 32 ++++--- .../mixin/world/StructureTemplateMixin.java | 15 ++-- .../com/lambda/mixin/world/WorldMixin.java | 46 +++++----- src/main/resources/lambda.mixins.json | 2 + 65 files changed, 722 insertions(+), 598 deletions(-) create mode 100644 src/main/java/com/lambda/mixin/render/DebugHudMixin.java create mode 100644 src/main/java/com/lambda/mixin/render/DebugRendererMixin.java diff --git a/src/main/java/com/lambda/mixin/CrashReportMixin.java b/src/main/java/com/lambda/mixin/CrashReportMixin.java index fd7b04371..d0d144c8f 100644 --- a/src/main/java/com/lambda/mixin/CrashReportMixin.java +++ b/src/main/java/com/lambda/mixin/CrashReportMixin.java @@ -46,8 +46,9 @@ public class CrashReportMixin { @Inject(method = "(Ljava/lang/String;Ljava/lang/Throwable;)V", at = @At("TAIL")) void injectConstructor(String message, Throwable cause, CallbackInfo ci) { - if (!Lambda.INSTANCE.isDebug() && MinecraftClient.getInstance() != null) + if (!Lambda.INSTANCE.isDebug() && MinecraftClient.getInstance() != null) { this.cause = DynamicExceptionKt.dynamicException(cause); + } } @WrapMethod(method = "asString(Lnet/minecraft/util/crash/ReportType;Ljava/util/List;)Ljava/lang/String;") diff --git a/src/main/java/com/lambda/mixin/MinecraftClientMixin.java b/src/main/java/com/lambda/mixin/MinecraftClientMixin.java index 73362e122..a0e5c5b47 100644 --- a/src/main/java/com/lambda/mixin/MinecraftClientMixin.java +++ b/src/main/java/com/lambda/mixin/MinecraftClientMixin.java @@ -67,10 +67,9 @@ public class MinecraftClientMixin { @Shadow public int itemUseCooldown; - @WrapMethod(method = "close") - void closeImGui(Operation original) { + @Inject(method = "close", at = @At("HEAD")) + void closeImGui(CallbackInfo ci) { DearImGui.INSTANCE.destroy(); - original.call(); } @WrapMethod(method = "render") @@ -176,6 +175,7 @@ boolean redirectMultiActon(boolean original) { @Inject(method = "doItemUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isRiding()Z")) void injectFastPlace(CallbackInfo ci) { if (!Interact.INSTANCE.isEnabled()) return; + itemUseCooldown = Interact.getPlaceDelay(); } @@ -201,13 +201,10 @@ float getTargetMillisPerTick(float millis, Operation original) { return (float) TimerManager.INSTANCE.getLength(); } - @WrapMethod(method = "updateWindowTitle") - void updateWindowTitle(Operation original) { - if (!ClickGuiLayout.getSetLambdaWindowTitle()) { - original.call(); - return; - } - + @Inject(method = "updateWindowTitle", at = @At("HEAD"), cancellable = true) + void updateWindowTitle(CallbackInfo ci) { + if (!ClickGuiLayout.getSetLambdaWindowTitle()) return; WindowUtils.setLambdaTitle(); + ci.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/baritone/BaritonePlayerContextMixin.java b/src/main/java/com/lambda/mixin/baritone/BaritonePlayerContextMixin.java index c1386e1b3..fc31a8015 100644 --- a/src/main/java/com/lambda/mixin/baritone/BaritonePlayerContextMixin.java +++ b/src/main/java/com/lambda/mixin/baritone/BaritonePlayerContextMixin.java @@ -22,11 +22,12 @@ import baritone.utils.player.BaritonePlayerContext; import com.lambda.interaction.BaritoneManager; import com.lambda.interaction.managers.rotating.RotationManager; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; 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 { @@ -35,11 +36,13 @@ public class BaritonePlayerContextMixin { private Baritone baritone; // Let baritone know the actual rotation - @WrapMethod(method = "playerRotations", remap = false) - Rotation syncRotationWithBaritone(Operation original) { - if (baritone != BaritoneManager.getPrimary()) - return original.call(); + @Inject(method = "playerRotations", at = @At("HEAD"), cancellable = true, remap = false) + void syncRotationWithBaritone(CallbackInfoReturnable cir) { + if (baritone != BaritoneManager.getPrimary()) return; - return new Rotation((float) RotationManager.getActiveRotation().getYaw(), (float) RotationManager.getActiveRotation().getPitch()); + RotationManager rm = RotationManager.INSTANCE; + cir.setReturnValue(new Rotation( + (float) rm.getActiveRotation().getYaw(), (float) rm.getActiveRotation().getPitch()) + ); } } diff --git a/src/main/java/com/lambda/mixin/baritone/LookBehaviourMixin.java b/src/main/java/com/lambda/mixin/baritone/LookBehaviourMixin.java index b1fe49ae0..f71fb7276 100644 --- a/src/main/java/com/lambda/mixin/baritone/LookBehaviourMixin.java +++ b/src/main/java/com/lambda/mixin/baritone/LookBehaviourMixin.java @@ -23,10 +23,11 @@ import baritone.behavior.LookBehavior; import com.lambda.interaction.BaritoneManager; import com.lambda.interaction.managers.rotating.RotationManager; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import org.spongepowered.asm.mixin.Mixin; 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 = LookBehavior.class, remap = false) public class LookBehaviourMixin { @@ -34,23 +35,25 @@ public class LookBehaviourMixin { LookBehavior instance = ((LookBehavior) (Object) this); // Redirect baritone's rotations into our rotation engine - @WrapMethod(method = "updateTarget") - void onTargetUpdate(Rotation rotation, boolean blockInteract, Operation original) { - if (instance.baritone != BaritoneManager.getPrimary()) - original.call(rotation, blockInteract); + @Inject(method = "updateTarget", at = @At("HEAD"), cancellable = true) + void onTargetUpdate(Rotation rotation, boolean blockInteract, CallbackInfo ci) { + if (instance.baritone != BaritoneManager.getPrimary()) return; RotationManager.handleBaritoneRotation(rotation.getYaw(), rotation.getPitch()); + ci.cancel(); } - @WrapMethod(method = "onPlayerUpdate") - void onUpdate(PlayerUpdateEvent event, Operation original) { - if (instance.baritone != BaritoneManager.getPrimary()) - original.call(event); + @Inject(method = "onPlayerUpdate", at = @At("HEAD"), cancellable = true) + void onUpdate(PlayerUpdateEvent event, CallbackInfo ci) { + if (instance.baritone != BaritoneManager.getPrimary()) return; + + ci.cancel(); } - @WrapMethod(method = "onPlayerRotationMove") - void onMovementUpdate(RotationMoveEvent event, Operation original) { - if (instance.baritone != BaritoneManager.getPrimary()) - original.call(event); + @Inject(method = "onPlayerRotationMove", at = @At("HEAD"), cancellable = true) + void onMovementUpdate(RotationMoveEvent event, CallbackInfo ci) { + if (instance.baritone != BaritoneManager.getPrimary()) return; + + ci.cancel(); } } 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 5f3b3fde3..0df20004e 100644 --- a/src/main/java/com/lambda/mixin/client/sound/SoundSystemMixin.java +++ b/src/main/java/com/lambda/mixin/client/sound/SoundSystemMixin.java @@ -19,19 +19,20 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.ClientEvent; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.sound.SoundInstance; import net.minecraft.client.sound.SoundSystem; 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) public class SoundSystemMixin { - @WrapMethod(method = "play(Lnet/minecraft/client/sound/SoundInstance;)Lnet/minecraft/client/sound/SoundSystem$PlayResult;") - public SoundSystem.PlayResult onPlay(SoundInstance sound, Operation original) { - if (EventFlow.post(new ClientEvent.Sound(sound)).isCanceled()) - return SoundSystem.PlayResult.NOT_STARTED; - - return original.call(sound); + @Inject(method = "play(Lnet/minecraft/client/sound/SoundInstance;)Lnet/minecraft/client/sound/SoundSystem$PlayResult;", at = @At("HEAD"), cancellable = true) + public void onPlay(SoundInstance sound, CallbackInfoReturnable cir) { + if (EventFlow.post(new ClientEvent.Sound(sound)).isCanceled()) { + cir.setReturnValue(SoundSystem.PlayResult.NOT_STARTED); + } } } diff --git a/src/main/java/com/lambda/mixin/entity/ClientPlayInteractionManagerMixin.java b/src/main/java/com/lambda/mixin/entity/ClientPlayInteractionManagerMixin.java index 5690cb7ec..7a660a139 100644 --- a/src/main/java/com/lambda/mixin/entity/ClientPlayInteractionManagerMixin.java +++ b/src/main/java/com/lambda/mixin/entity/ClientPlayInteractionManagerMixin.java @@ -42,6 +42,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(ClientPlayerInteractionManager.class) public class ClientPlayInteractionManagerMixin { @@ -51,55 +52,44 @@ public class ClientPlayInteractionManagerMixin { @Shadow public int lastSelectedSlot; - @WrapMethod(method = "interactBlock") - public ActionResult interactBlockHead(ClientPlayerEntity player, Hand hand, BlockHitResult hitResult, Operation original) { - if (EventFlow.post(new PlayerEvent.Interact.Block(hand, hitResult)).isCanceled()) - return ActionResult.FAIL; - - return original.call(player, hand, hitResult); + @Inject(method = "interactBlock", at = @At("HEAD"), cancellable = true) + public void interactBlockHead(final ClientPlayerEntity player, final Hand hand, final BlockHitResult hitResult, final CallbackInfoReturnable cir) { + if (EventFlow.post(new PlayerEvent.Interact.Block(hand, hitResult)).isCanceled()) { + cir.setReturnValue(ActionResult.FAIL); + } } - @WrapMethod(method = "interactEntityAtLocation") - public ActionResult interactEntityAtLocation(PlayerEntity player, Entity entity, EntityHitResult hitResult, Hand hand, Operation original) { - if (EventFlow.post(new PlayerEvent.Interact.Entity(hand, entity, hitResult)).isCanceled()) - return ActionResult.FAIL; - - return original.call(player, entity, hitResult, hand); + @Inject(method = "interactEntityAtLocation", at = @At("HEAD"), cancellable = true) + public void interactEntityAtLocation(PlayerEntity player, Entity entity, EntityHitResult hitResult, Hand hand, CallbackInfoReturnable cir) { + if (EventFlow.post(new PlayerEvent.Interact.Entity(hand, entity, hitResult)).isCanceled()) { + cir.setReturnValue(ActionResult.FAIL); + } } - @WrapMethod(method = "interactItem") - public ActionResult interactItemHead(PlayerEntity player, Hand hand, Operation original) { - if (EventFlow.post(new PlayerEvent.Interact.Item(hand)).isCanceled()) - return ActionResult.FAIL; - - return original.call(player, hand); + @Inject(method = "interactItem", at = @At("HEAD"), cancellable = true) + public void interactItemHead(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { + if (EventFlow.post(new PlayerEvent.Interact.Item(hand)).isCanceled()) { + cir.setReturnValue(ActionResult.FAIL); + } } - @WrapMethod(method = "attackBlock") - public boolean onAttackBlock(BlockPos pos, Direction direction, Operation original) { - if (EventFlow.post(new PlayerEvent.Attack.Block(pos, direction)).isCanceled()) - return false; - - return original.call(pos, direction); + @Inject(method = "attackBlock", at = @At("HEAD"), cancellable = true) + public void onAttackBlock(BlockPos pos, Direction side, CallbackInfoReturnable cir) { + if (EventFlow.post(new PlayerEvent.Attack.Block(pos, side)).isCanceled()) { + cir.setReturnValue(false); + } } - @WrapMethod(method = "attackEntity") - void onAttackPre(PlayerEntity player, Entity target, Operation original) { - if (EventFlow.post(new PlayerEvent.Attack.Entity(target)).isCanceled()) - return; - - original.call(player, target); + @Inject(method = "attackEntity", at = @At("HEAD"), cancellable = true) + void onAttackPre(PlayerEntity player, Entity target, CallbackInfo ci) { + if (EventFlow.post(new PlayerEvent.Attack.Entity(target)).isCanceled()) ci.cancel(); } - @WrapMethod(method = "clickSlot") - public void clickSlotHead(int syncId, int slotId, int button, SlotActionType actionType, PlayerEntity player, Operation original) { + @Inject(method = "clickSlot", at = @At("HEAD"), cancellable = true) + public void clickSlotHead(int syncId, int slotId, int button, SlotActionType actionType, PlayerEntity player, CallbackInfo ci) { + if (syncId != player.currentScreenHandler.syncId) return; var click = new PlayerEvent.SlotClick(syncId, slotId, button, actionType, player.currentScreenHandler); - - if (EventFlow.post(click).isCanceled()) - return; - - if (syncId != player.currentScreenHandler.syncId) - original.call(syncId, slotId, button, actionType, player); + if (EventFlow.post(click).isCanceled()) ci.cancel(); } /** @@ -119,22 +109,17 @@ public void overrideSelectedSlotSync(CallbackInfo ci) { EventFlow.post(new InventoryEvent.HotbarSlot.Update(lastSelectedSlot)); } - @WrapMethod(method = "updateBlockBreakingProgress") - private boolean updateBlockBreakingProgressPre(BlockPos pos, Direction direction, Operation original) { - var event = EventFlow.post(new PlayerEvent.Breaking.Update(pos, direction, currentBreakingProgress)); - - if (event.isCanceled()) - return false; + @Inject(method = "updateBlockBreakingProgress", at = @At("HEAD"), cancellable = true) + private void updateBlockBreakingProgressPre(BlockPos pos, Direction side, CallbackInfoReturnable cir) { + var event = EventFlow.post(new PlayerEvent.Breaking.Update(pos, side, currentBreakingProgress)); + if (event.isCanceled()) cir.setReturnValue(false); currentBreakingProgress = event.getProgress(); - - return original.call(pos, direction); } - @WrapMethod(method = "cancelBlockBreaking") - private void cancelBlockBreakingPre(Operation original) { - if (!EventFlow.post(new PlayerEvent.Breaking.Cancel(currentBreakingProgress)).isCanceled()) - original.call(); + @Inject(method = "cancelBlockBreaking", at = @At("HEAD"), cancellable = true) + private void cancelBlockBreakingPre(CallbackInfo ci) { + if (EventFlow.post(new PlayerEvent.Breaking.Cancel(currentBreakingProgress)).isCanceled()) ci.cancel(); } @WrapMethod(method = "createPlayer(Lnet/minecraft/client/world/ClientWorld;Lnet/minecraft/stat/StatHandler;Lnet/minecraft/client/recipebook/ClientRecipeBook;)Lnet/minecraft/client/network/ClientPlayerEntity;") diff --git a/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java b/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java index 6824448ba..752cd235a 100644 --- a/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java +++ b/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java @@ -52,6 +52,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; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import java.util.Objects; @@ -89,13 +90,9 @@ private void injectTickMovement(CallbackInfo ci) { if (NoJumpCooldown.INSTANCE.isEnabled() || (ElytraFly.INSTANCE.isEnabled() && ElytraFly.getMode() == ElytraFly.FlyMode.Bounce)) jumpingCooldown = 0; } - @WrapMethod(method = "sendMovementPackets") - private void injectSendMovementPacketsHead(Operation original) { - moveEvent = EventFlow.post( - new PlayerPacketEvent.Pre(pos, RotationManager.getActiveRotation(), isOnGround(), isSprinting(), horizontalCollision) - ); - - original.call(); + @Inject(method = "sendMovementPackets", at = @At("HEAD")) + private void injectSendMovementPacketsHead(CallbackInfo ci) { + moveEvent = EventFlow.post(new PlayerPacketEvent.Pre(pos, RotationManager.getActiveRotation(), isOnGround(), isSprinting(), horizontalCollision)); } @Definition(id = "g", local = @Local(type = double.class, ordinal = 3)) @@ -132,9 +129,8 @@ private PlayerMoveC2SPacket.OnGroundOnly wrapOnGroundOnly(boolean onGround, bool return original.call(moveEvent.getOnGround(), moveEvent.isCollidingHorizontally()); } - @WrapMethod(method = "sendMovementPackets") - private void injectSendMovementPacketsReturn(Operation original) { - original.call(); + @Inject(method = "sendMovementPackets", at = @At("TAIL")) + private void injectSendMovementPacketsReturn(CallbackInfo ci) { RotationManager.onRotationSend(); EventFlow.post(new PlayerPacketEvent.Post()); } @@ -144,14 +140,13 @@ boolean modifyIsSprinting(boolean original) { return EventFlow.post(new MovementEvent.Sprint(original)).getSprint(); } - @WrapMethod(method = "isSneaking") - boolean injectSneakingInput(Operation original) { + @Inject(method = "isSneaking", at = @At(value = "HEAD"), cancellable = true) + void injectSneakingInput(CallbackInfoReturnable cir) { ClientPlayerEntity self = (ClientPlayerEntity) (Object) this; + if (self != Lambda.getMc().player) return; - if (self != Lambda.getMc().player) return false; - if (self.input == null) return false; - - return EventFlow.post(new MovementEvent.Sneak(self.input.playerInput.sneak())).getSneak(); + if (self.input == null) return; + cir.setReturnValue(EventFlow.post(new MovementEvent.Sneak(self.input.playerInput.sneak())).getSneak()); } @WrapMethod(method = "tick") @@ -188,10 +183,9 @@ private void wrapSwingHand(ClientPlayerEntity instance, Hand hand, Operation original) { + @Inject(method = "updateHealth", at = @At("HEAD")) + public void injectUpdateHealth(float health, CallbackInfo ci) { EventFlow.post(new PlayerEvent.Health(health)); - original.call(health); } /** diff --git a/src/main/java/com/lambda/mixin/entity/EntityMixin.java b/src/main/java/com/lambda/mixin/entity/EntityMixin.java index 2470894f5..7b1e48152 100644 --- a/src/main/java/com/lambda/mixin/entity/EntityMixin.java +++ b/src/main/java/com/lambda/mixin/entity/EntityMixin.java @@ -26,9 +26,9 @@ import com.lambda.util.math.Vec2d; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; 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; @@ -37,6 +37,9 @@ 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.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import static com.lambda.Lambda.getMc; @@ -126,15 +129,13 @@ float fixDirectionPitch2(Entity entity, Operation original) { return (float) rot.getY(); } - @WrapMethod(method = "changeLookDirection") - private void changeLookDirection(double cursorDeltaX, double cursorDeltaY, Operation original) { - if (!EventFlow.post(new PlayerEvent.ChangeLookDirection(cursorDeltaX, cursorDeltaY)).isCanceled()) - original.call(cursorDeltaX, cursorDeltaY); + @Inject(method = "changeLookDirection", at = @At("HEAD"), cancellable = true) + private void changeLookDirection(double cursorDeltaX, double cursorDeltaY, CallbackInfo ci) { + if (EventFlow.post(new PlayerEvent.ChangeLookDirection(cursorDeltaX, cursorDeltaY)).isCanceled()) ci.cancel(); } - @WrapMethod(method = "onTrackedDataSet(Lnet/minecraft/entity/data/TrackedData;)V") - public void onTrackedDataSet(TrackedData data, Operation original) { - original.call(data); + @Inject(method = "onTrackedDataSet(Lnet/minecraft/entity/data/TrackedData;)V", at = @At("TAIL")) + public void onTrackedDataSet(TrackedData data, CallbackInfo ci) { Entity entity = (Entity) (Object) this; EventFlow.post(new EntityEvent.Update(entity, data)); } @@ -159,28 +160,18 @@ private boolean wrapSetPitch(Entity instance, float yaw) { return RotationManager.getLockPitch() == null; } - @WrapMethod(method = "isSprinting()Z") - private boolean injectIsSprinting(Operation original) { + @Inject(method = "isSprinting()Z", at = @At("HEAD"), cancellable = true) + private void injectIsSprinting(CallbackInfoReturnable cir) { var player = getMc().player; - if ((Object) this != getMc().player) - original.call(); - - if (ElytraFly.INSTANCE.isEnabled() && ElytraFly.getMode() == ElytraFly.FlyMode.Bounce && player.isGliding()) - return true; - - return original.call(); + if ((Object) this != getMc().player) return; + if (ElytraFly.INSTANCE.isEnabled() && ElytraFly.getMode() == ElytraFly.FlyMode.Bounce && player.isGliding()) cir.setReturnValue(true); } - @WrapMethod(method = "getPose") - private EntityPose injectGetPose(Operation original) { - var player = getMc().player; - if ((Object) this != getMc().player) - original.call(); - - if (ElytraFly.INSTANCE.isEnabled() && ElytraFly.getMode() == ElytraFly.FlyMode.Bounce && player.isGliding()) - return EntityPose.GLIDING; - - return original.call(); + @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); } @ModifyExpressionValue(method = "getHorizontalFacing", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getYaw()F")) diff --git a/src/main/java/com/lambda/mixin/entity/HandledScreensMixin.java b/src/main/java/com/lambda/mixin/entity/HandledScreensMixin.java index 8a711ebf8..30e1e64c8 100644 --- a/src/main/java/com/lambda/mixin/entity/HandledScreensMixin.java +++ b/src/main/java/com/lambda/mixin/entity/HandledScreensMixin.java @@ -18,21 +18,21 @@ package com.lambda.mixin.entity; import com.lambda.interaction.managers.inventory.InventoryManager; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreens; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.text.Text; 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(HandledScreens.Provider.class) public interface HandledScreensMixin { - @WrapOperation(method = "open", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;setScreen(Lnet/minecraft/client/gui/screen/Screen;)V")) - private void injectOpen(MinecraftClient instance, Screen screen, Operation original) { - if (instance.player == null) - original.call(instance, screen); - - InventoryManager.onSetScreenHandler(instance.player.currentScreenHandler); + @Inject(method = "open", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;setScreen(Lnet/minecraft/client/gui/screen/Screen;)V")) + private void injectOpen(Text name, ScreenHandlerType type, MinecraftClient client, int id, CallbackInfo ci) { + if (client.player == null) return; + InventoryManager.onSetScreenHandler(client.player.currentScreenHandler); } } diff --git a/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java b/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java index e7a288d16..02ba9ed72 100644 --- a/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java +++ b/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java @@ -35,7 +35,10 @@ 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.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 { @@ -59,11 +62,11 @@ public abstract class LivingEntityMixin extends EntityMixin { * } * } */ - @WrapMethod(method = "jump") - void onJump(Operation original) { + @Inject(method = "jump", at = @At("HEAD"), cancellable = true) + void onJump(CallbackInfo ci) { LivingEntity self = lambda$instance; - if (self != Lambda.getMc().player) - original.call(); + if (self != Lambda.getMc().player) return; + ci.cancel(); float height = this.getJumpVelocity(); MovementEvent.Jump event = EventFlow.post(new MovementEvent.Jump(height)); @@ -82,14 +85,18 @@ void onJump(Operation original) { self.velocityDirty = true; } - @WrapMethod(method = "travel") - void onTravelPre(Vec3d movementInput, Operation original) { - if (!EventFlow.post(new MovementEvent.Entity.Pre(lambda$instance, movementInput)).isCanceled()) { - original.call(movementInput); - EventFlow.post(new MovementEvent.Entity.Post(lambda$instance, movementInput)); + @Inject(method = "travel", at = @At("HEAD"), cancellable = true) + void onTravelPre(Vec3d movementInput, CallbackInfo ci) { + if (EventFlow.post(new MovementEvent.Entity.Pre(lambda$instance, movementInput)).isCanceled()) { + ci.cancel(); } } + @Inject(method = "travel", at = @At("TAIL")) + void onTravelPost(Vec3d movementInput, CallbackInfo ci) { + EventFlow.post(new MovementEvent.Entity.Post(lambda$instance, movementInput)); + } + /** * Modifies the entity pitch with the current rotation when the entity is fall flying */ @@ -178,11 +185,9 @@ private void wrapPushAwayFrom(Entity entity, Operation original) { original.call(entity); } - @WrapMethod(method = "isGliding") - private boolean injectIsGliding(Operation original) { - if (lambda$instance != Lambda.getMc().player) - return original.call(); - - return ElytraFly.isGliding(); + @Inject(method = "isGliding", at = @At("HEAD"), cancellable = true) + private void injectIsGliding(CallbackInfoReturnable cir) { + if (lambda$instance != Lambda.getMc().player) return; + cir.setReturnValue(ElytraFly.isGliding()); } } diff --git a/src/main/java/com/lambda/mixin/input/KeyboardMixin.java b/src/main/java/com/lambda/mixin/input/KeyboardMixin.java index 68683b776..8e913469d 100644 --- a/src/main/java/com/lambda/mixin/input/KeyboardMixin.java +++ b/src/main/java/com/lambda/mixin/input/KeyboardMixin.java @@ -28,14 +28,27 @@ 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/network/ClientConnectionMixin.java b/src/main/java/com/lambda/mixin/network/ClientConnectionMixin.java index b51bb8a17..d9eb35860 100644 --- a/src/main/java/com/lambda/mixin/network/ClientConnectionMixin.java +++ b/src/main/java/com/lambda/mixin/network/ClientConnectionMixin.java @@ -20,8 +20,6 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.ConnectionEvent; import com.lambda.event.events.PacketEvent; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import io.netty.channel.ChannelHandlerContext; import net.minecraft.network.ClientConnection; import net.minecraft.network.NetworkSide; @@ -36,6 +34,10 @@ 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; @Mixin(ClientConnection.class) public class ClientConnectionMixin { @@ -44,37 +46,66 @@ public class ClientConnectionMixin { private NetworkSide side; @SuppressWarnings("unchecked") - @WrapMethod(method = "send(Lnet/minecraft/network/packet/Packet;)V") - private void sendingPacket(Packet packet, Operation original) { + @Inject(method = "send(Lnet/minecraft/network/packet/Packet;)V", at = @At("HEAD"), cancellable = true) + private void sendingPacket(Packet packet, final CallbackInfo callbackInfo) { if (side != NetworkSide.CLIENTBOUND) return; - if (!EventFlow.post(new PacketEvent.Send.Pre((Packet) packet)).isCanceled()) { - original.call(packet); - EventFlow.post(new PacketEvent.Send.Post((Packet) packet)); + if (EventFlow.post(new PacketEvent.Send.Pre((Packet) packet)).isCanceled()) { + callbackInfo.cancel(); } } @SuppressWarnings("unchecked") - @WrapMethod(method = "channelRead0(Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/network/packet/Packet;)V", require = 1) - private void receivingPacket(ChannelHandlerContext channelHandlerContext, Packet packet, Operation original) { + @Inject(method = "send(Lnet/minecraft/network/packet/Packet;)V", at = @At("RETURN")) + private void sendingPacketPost(Packet packet, final CallbackInfo callbackInfo) { if (side != NetworkSide.CLIENTBOUND) return; - if (!EventFlow.post(new PacketEvent.Receive.Pre((Packet) packet)).isCanceled()) { - original.call(channelHandlerContext, packet); - EventFlow.post(new PacketEvent.Receive.Post((Packet) packet)); + EventFlow.post(new PacketEvent.Send.Post((Packet) packet)); + } + + @SuppressWarnings("unchecked") + @Inject(method = "channelRead0(Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/network/packet/Packet;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;handlePacket(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;)V", shift = At.Shift.BEFORE), cancellable = true, require = 1) + private void receivingPacket( + ChannelHandlerContext channelHandlerContext, + Packet packet, + CallbackInfo callbackInfo + ) { + if (side != NetworkSide.CLIENTBOUND) return; + + if (EventFlow.post(new PacketEvent.Receive.Pre((Packet) packet)).isCanceled()) { + callbackInfo.cancel(); } } - @WrapMethod(method = "connect(Ljava/lang/String;ILnet/minecraft/network/state/NetworkState;Lnet/minecraft/network/state/NetworkState;Lnet/minecraft/network/listener/ClientPacketListener;Lnet/minecraft/network/packet/c2s/handshake/ConnectionIntent;)V") + @SuppressWarnings("unchecked") + @Inject(method = "channelRead0(Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/network/packet/Packet;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;handlePacket(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;)V", shift = At.Shift.AFTER)) + private void receivingPacketPost( + ChannelHandlerContext channelHandlerContext, + Packet packet, + CallbackInfo callbackInfo + ) { + if (side != NetworkSide.CLIENTBOUND) return; + + EventFlow.post(new PacketEvent.Receive.Post((Packet) packet)); + } + + @Inject(method = "connect(Ljava/lang/String;ILnet/minecraft/network/state/NetworkState;Lnet/minecraft/network/state/NetworkState;Lnet/minecraft/network/listener/ClientPacketListener;Lnet/minecraft/network/packet/c2s/handshake/ConnectionIntent;)V", at = @At("HEAD"), cancellable = true) private - void onConnect(String address, int port, NetworkState outboundState, NetworkState inboundState, C prePlayStateListener, ConnectionIntent intent, Operation original) { - if (!EventFlow.post(new ConnectionEvent.Connect.Pre(address, port, prePlayStateListener, intent)).isCanceled()) - original.call(address, port, outboundState, inboundState, prePlayStateListener, intent); + void onConnect( + String address, + int port, + NetworkState outboundState, + NetworkState inboundState, + C prePlayStateListener, + ConnectionIntent intent, + CallbackInfo ci + ) { + if (EventFlow.post(new ConnectionEvent.Connect.Pre(address, port, prePlayStateListener, intent)).isCanceled()) + ci.cancel(); } - @WrapMethod(method = "disconnect(Lnet/minecraft/text/Text;)V") - private void onDisconnect(Text disconnectReason, Operation original) { - original.call(disconnectReason); - EventFlow.post(new ConnectionEvent.Disconnect(disconnectReason)); + @Inject(method = "disconnect(Lnet/minecraft/text/Text;)V", at = @At("HEAD")) + private void onDisconnect(Text reason, CallbackInfo ci) { + EventFlow.post(new ConnectionEvent.Disconnect(reason)); } } diff --git a/src/main/java/com/lambda/mixin/network/ClientLoginNetworkMixin.java b/src/main/java/com/lambda/mixin/network/ClientLoginNetworkMixin.java index 33c547d16..3fd1f32cc 100644 --- a/src/main/java/com/lambda/mixin/network/ClientLoginNetworkMixin.java +++ b/src/main/java/com/lambda/mixin/network/ClientLoginNetworkMixin.java @@ -19,17 +19,18 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.ConnectionEvent; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.network.ClientLoginNetworkHandler; import net.minecraft.network.packet.s2c.login.LoginSuccessS2CPacket; 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(ClientLoginNetworkHandler.class) public class ClientLoginNetworkMixin { - @WrapMethod(method = "onSuccess(Lnet/minecraft/network/packet/s2c/login/LoginSuccessS2CPacket;)V") - private void onSuccess(LoginSuccessS2CPacket packet, Operation original) { - original.call(packet); + + @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 f2fd82474..758a17444 100644 --- a/src/main/java/com/lambda/mixin/network/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/com/lambda/mixin/network/ClientPlayNetworkHandlerMixin.java @@ -37,22 +37,21 @@ @Mixin(ClientPlayNetworkHandler.class) public class ClientPlayNetworkHandlerMixin { - @WrapMethod(method = "onGameJoin(Lnet/minecraft/network/packet/s2c/play/GameJoinS2CPacket;)V") - void injectJoinPacket(GameJoinS2CPacket packet, Operation original) { - original.call(packet); + @Inject(method = "onGameJoin(Lnet/minecraft/network/packet/s2c/play/GameJoinS2CPacket;)V", at = @At("TAIL")) + void injectJoinPacket(GameJoinS2CPacket packet, CallbackInfo ci) { EventFlow.post(new WorldEvent.Join()); } - @WrapMethod(method = "handlePlayerListAction(Lnet/minecraft/network/packet/s2c/play/PlayerListS2CPacket$Action;Lnet/minecraft/network/packet/s2c/play/PlayerListS2CPacket$Entry;Lnet/minecraft/client/network/PlayerListEntry;)V") - void injectPlayerList(PlayerListS2CPacket.Action action, PlayerListS2CPacket.Entry receivedEntry, PlayerListEntry currentEntry, Operation original) { - if (action != PlayerListS2CPacket.Action.UPDATE_LISTED) - original.call(action, receivedEntry, currentEntry); + @Inject(method = "handlePlayerListAction(Lnet/minecraft/network/packet/s2c/play/PlayerListS2CPacket$Action;Lnet/minecraft/network/packet/s2c/play/PlayerListS2CPacket$Entry;Lnet/minecraft/client/network/PlayerListEntry;)V", at = @At("TAIL")) + void injectPlayerList(PlayerListS2CPacket.Action action, PlayerListS2CPacket.Entry receivedEntry, PlayerListEntry currentEntry, CallbackInfo ci) { + if (action != PlayerListS2CPacket.Action.UPDATE_LISTED) return; var name = currentEntry.getProfile().name(); var uuid = currentEntry.getProfile().id(); - if (receivedEntry.listed()) EventFlow.post(new WorldEvent.Player.Join(name, uuid, currentEntry)); - else EventFlow.post(new WorldEvent.Player.Leave(name, uuid, currentEntry)); + if (receivedEntry.listed()) { + EventFlow.post(new WorldEvent.Player.Join(name, uuid, currentEntry)); + } else EventFlow.post(new WorldEvent.Player.Leave(name, uuid, currentEntry)); } @Inject(method = "onUpdateSelectedSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/network/PacketApplyBatcher;)V", shift = At.Shift.AFTER), cancellable = true) @@ -60,9 +59,8 @@ private void onUpdateSelectedSlot(UpdateSelectedSlotS2CPacket packet, CallbackIn if (EventFlow.post(new InventoryEvent.HotbarSlot.Sync(packet.slot())).isCanceled()) ci.cancel(); } - @WrapMethod(method = "onScreenHandlerSlotUpdate") - private void onScreenHandlerSlotUpdate(ScreenHandlerSlotUpdateS2CPacket packet, Operation original) { - original.call(packet); + @Inject(method = "onScreenHandlerSlotUpdate", at = @At("TAIL")) + private void onScreenHandlerSlotUpdate(ScreenHandlerSlotUpdateS2CPacket packet, CallbackInfo ci) { EventFlow.post(new InventoryEvent.SlotUpdate(packet.getSyncId(), packet.getRevision(), packet.getSlot(), packet.getStack())); } diff --git a/src/main/java/com/lambda/mixin/network/HandshakeC2SPacketMixin.java b/src/main/java/com/lambda/mixin/network/HandshakeC2SPacketMixin.java index 5f16d90ec..c041ab93a 100644 --- a/src/main/java/com/lambda/mixin/network/HandshakeC2SPacketMixin.java +++ b/src/main/java/com/lambda/mixin/network/HandshakeC2SPacketMixin.java @@ -19,17 +19,17 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.ConnectionEvent; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.network.packet.c2s.handshake.ConnectionIntent; import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket; 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(HandshakeC2SPacket.class) public class HandshakeC2SPacketMixin { - @WrapMethod(method = "(ILjava/lang/String;ILnet/minecraft/network/packet/c2s/handshake/ConnectionIntent;)V") - private void onHandshakeC2SPacket(int protocolVersion, String address, int port, ConnectionIntent intendedState, Operation original) { - original.call(protocolVersion, address, port, intendedState); - EventFlow.post(new ConnectionEvent.Connect.Handshake(protocolVersion, address, port, intendedState)); + @Inject(method = "(ILjava/lang/String;ILnet/minecraft/network/packet/c2s/handshake/ConnectionIntent;)V", at = @At("TAIL")) + private void onHandshakeC2SPacket(int i, String string, int j, ConnectionIntent connectionIntent, CallbackInfo ci) { + EventFlow.post(new ConnectionEvent.Connect.Handshake(i, string, j, connectionIntent)); } } diff --git a/src/main/java/com/lambda/mixin/network/LoginHelloC2SPacketMixin.java b/src/main/java/com/lambda/mixin/network/LoginHelloC2SPacketMixin.java index 91978cbc3..2222fa305 100644 --- a/src/main/java/com/lambda/mixin/network/LoginHelloC2SPacketMixin.java +++ b/src/main/java/com/lambda/mixin/network/LoginHelloC2SPacketMixin.java @@ -19,14 +19,15 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.ConnectionEvent; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.network.PacketByteBuf; import net.minecraft.network.encryption.NetworkEncryptionException; import net.minecraft.network.packet.s2c.login.LoginHelloS2CPacket; 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.CallbackInfo; import java.security.PublicKey; @@ -38,9 +39,8 @@ public abstract class LoginHelloC2SPacketMixin { @Shadow public abstract PublicKey getPublicKey() throws NetworkEncryptionException; - @WrapMethod(method = "(Lnet/minecraft/network/PacketByteBuf;)V") - private void onLoginHelloC2SPacket(PacketByteBuf buf, Operation original) throws NetworkEncryptionException { - original.call(buf); + @Inject(method = "(Lnet/minecraft/network/PacketByteBuf;)V", at = @At("TAIL")) + private void onLoginHelloC2SPacket(PacketByteBuf buf, CallbackInfo ci) throws NetworkEncryptionException { EventFlow.post(new ConnectionEvent.Connect.Login.EncryptionRequest(serverId, getPublicKey(), nonce)); } } diff --git a/src/main/java/com/lambda/mixin/network/LoginKeyC2SPacketMixin.java b/src/main/java/com/lambda/mixin/network/LoginKeyC2SPacketMixin.java index 3ba166d1d..dfffef9be 100644 --- a/src/main/java/com/lambda/mixin/network/LoginKeyC2SPacketMixin.java +++ b/src/main/java/com/lambda/mixin/network/LoginKeyC2SPacketMixin.java @@ -19,19 +19,19 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.ConnectionEvent; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.network.packet.c2s.login.LoginKeyC2SPacket; 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 javax.crypto.SecretKey; import java.security.PublicKey; @Mixin(LoginKeyC2SPacket.class) public class LoginKeyC2SPacketMixin { - @WrapMethod(method = "(Ljavax/crypto/SecretKey;Ljava/security/PublicKey;[B)V") - private void onLoginKeyC2SPacket(SecretKey secretKey, PublicKey publicKey, byte[] nonce, Operation original) { - original.call(secretKey, publicKey, nonce); + @Inject(method = "(Ljavax/crypto/SecretKey;Ljava/security/PublicKey;[B)V", at = @At("TAIL")) + private void onLoginKeyC2SPacket(SecretKey secretKey, PublicKey publicKey, byte[] nonce, CallbackInfo ci) { EventFlow.post(new ConnectionEvent.Connect.Login.EncryptionResponse(secretKey, publicKey, nonce)); } } diff --git a/src/main/java/com/lambda/mixin/render/AbstractTerrainRenderContextMixin.java b/src/main/java/com/lambda/mixin/render/AbstractTerrainRenderContextMixin.java index 6c40458b9..f19cda820 100644 --- a/src/main/java/com/lambda/mixin/render/AbstractTerrainRenderContextMixin.java +++ b/src/main/java/com/lambda/mixin/render/AbstractTerrainRenderContextMixin.java @@ -18,16 +18,15 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.XRay; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.fabricmc.fabric.impl.client.indigo.renderer.mesh.MutableQuadViewImpl; import net.fabricmc.fabric.impl.client.indigo.renderer.render.AbstractTerrainRenderContext; import net.fabricmc.fabric.impl.client.indigo.renderer.render.BlockRenderInfo; -import net.minecraft.client.render.VertexConsumer; 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.CallbackInfo; @Mixin(AbstractTerrainRenderContext.class) public class AbstractTerrainRenderContextMixin { @@ -35,17 +34,16 @@ public class AbstractTerrainRenderContextMixin { @Shadow(remap = false) protected BlockRenderInfo blockInfo; - @WrapOperation(method = "bufferQuad", at = @At(value = "INVOKE", target = "Lnet/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractTerrainRenderContext;bufferQuad(Lnet/fabricmc/fabric/impl/client/indigo/renderer/mesh/MutableQuadViewImpl;Lnet/minecraft/client/render/VertexConsumer;)V")) - private void injectBufferQuad(AbstractTerrainRenderContext instance, MutableQuadViewImpl mutableQuadView, VertexConsumer vertexConsumer, Operation original) { - if (XRay.INSTANCE.isDisabled() || XRay.isSelected(blockInfo.blockState)) - original.call(instance, mutableQuadView, vertexConsumer); - + @Inject(method = "bufferQuad", at = @At(value = "INVOKE", target = "Lnet/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractTerrainRenderContext;bufferQuad(Lnet/fabricmc/fabric/impl/client/indigo/renderer/mesh/MutableQuadViewImpl;Lnet/minecraft/client/render/VertexConsumer;)V"), cancellable = true) + private void injectBufferQuad(MutableQuadViewImpl quad, CallbackInfo ci) { + if (XRay.INSTANCE.isDisabled() || XRay.isSelected(blockInfo.blockState)) return; int opacity = XRay.getOpacity(); - if (opacity > 0) { + if (opacity == 0) ci.cancel(); + else if (opacity < 100) { int alpha = (int) (opacity * 2.55f); for (int i = 0; i < 4; i++) { - mutableQuadView.color(i, ((alpha & 0xFF) << 24) | (mutableQuadView.color(i) & 0x00FFFFFF)); + quad.color(i, ((alpha & 0xFF) << 24) | (quad.color(i) & 0x00FFFFFF)); } } } diff --git a/src/main/java/com/lambda/mixin/render/ArmorFeatureRendererMixin.java b/src/main/java/com/lambda/mixin/render/ArmorFeatureRendererMixin.java index ac7bd7810..77ca02496 100644 --- a/src/main/java/com/lambda/mixin/render/ArmorFeatureRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/ArmorFeatureRendererMixin.java @@ -18,8 +18,10 @@ 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 index 7d5ef957f..887ca3b6b 100644 --- a/src/main/java/com/lambda/mixin/render/BackgroundRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/BackgroundRendererMixin.java @@ -19,6 +19,9 @@ 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; diff --git a/src/main/java/com/lambda/mixin/render/BlockModelRendererMixin.java b/src/main/java/com/lambda/mixin/render/BlockModelRendererMixin.java index 524baaac6..f79546f8c 100644 --- a/src/main/java/com/lambda/mixin/render/BlockModelRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/BlockModelRendererMixin.java @@ -18,8 +18,6 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.XRay; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.BlockState; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.block.BlockModelRenderer; @@ -29,8 +27,11 @@ import net.minecraft.world.BlockRenderView; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Constant; +import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyConstant; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.List; @@ -38,17 +39,16 @@ public class BlockModelRendererMixin { @Unique private final ThreadLocal opacity = new ThreadLocal<>(); - @WrapMethod(method = {"renderSmooth", "renderFlat"}) - private void injectRenderSmoothFlat(BlockRenderView world, List parts, BlockState state, BlockPos pos, MatrixStack matrices, VertexConsumer vertexConsumer, boolean cull, int overlay, Operation original) { + @Inject(method = {"renderSmooth", "renderFlat"}, at = @At("HEAD"), cancellable = true) + private void injectRenderSmoothFlat(BlockRenderView world, List parts, BlockState state, BlockPos pos, MatrixStack matrices, VertexConsumer vertexConsumer, boolean cull, int overlay, CallbackInfo ci) { if (XRay.INSTANCE.isDisabled()) { this.opacity.set(-1); - original.call(world, parts, state, pos, matrices, vertexConsumer, cull, overlay); + return; } - int alpha = (int) (XRay.getOpacity() * 2.55); - if (alpha > 0) - this.opacity.set(alpha); + if (alpha == 0) ci.cancel(); + else this.opacity.set(alpha); } @ModifyConstant(method = "renderQuad", constant = @Constant(floatValue = 1, ordinal = 3)) diff --git a/src/main/java/com/lambda/mixin/render/BlockRenderManagerMixin.java b/src/main/java/com/lambda/mixin/render/BlockRenderManagerMixin.java index 7bfceea8f..49ff48b7f 100644 --- a/src/main/java/com/lambda/mixin/render/BlockRenderManagerMixin.java +++ b/src/main/java/com/lambda/mixin/render/BlockRenderManagerMixin.java @@ -18,23 +18,22 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.BlockESP; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.client.render.block.BlockRenderManager; import net.minecraft.client.render.model.BlockStateModel; 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(BlockRenderManager.class) public abstract class BlockRenderManagerMixin { - @WrapMethod(method = "getModel") - private BlockStateModel getModel(BlockState state, Operation original) { + @Inject(method = "getModel", at = @At("HEAD"), cancellable = true) + private void getModel(BlockState state, CallbackInfoReturnable cir) { if (BlockESP.INSTANCE.isEnabled() && BlockESP.getBarrier() && state.getBlock() == Blocks.BARRIER - ) return BlockESP.getModel(); - - return original.call(state); + ) cir.setReturnValue(BlockESP.getModel()); } } diff --git a/src/main/java/com/lambda/mixin/render/BossBarHudMixin.java b/src/main/java/com/lambda/mixin/render/BossBarHudMixin.java index 20f7ed1c1..3b36abf94 100644 --- a/src/main/java/com/lambda/mixin/render/BossBarHudMixin.java +++ b/src/main/java/com/lambda/mixin/render/BossBarHudMixin.java @@ -18,17 +18,17 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.BossBarHud; 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(BossBarHud.class) public class BossBarHudMixin { - @WrapMethod(method = "render") - private void injectRender(DrawContext context, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoBossBar()) - original.call(context); + @Inject(method = "render", at = @At("HEAD"), cancellable = true) + private void injectRender(DrawContext context, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoBossBar()) ci.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/render/CameraMixin.java b/src/main/java/com/lambda/mixin/render/CameraMixin.java index 719cd0415..13ee986f3 100644 --- a/src/main/java/com/lambda/mixin/render/CameraMixin.java +++ b/src/main/java/com/lambda/mixin/render/CameraMixin.java @@ -22,8 +22,6 @@ import com.lambda.module.modules.render.CameraTweaks; import com.lambda.module.modules.render.FreeLook; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.enums.CameraSubmersionType; import net.minecraft.client.render.Camera; import net.minecraft.entity.Entity; @@ -35,6 +33,7 @@ import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.ModifyArgs; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.invoke.arg.Args; @Mixin(Camera.class) @@ -49,15 +48,14 @@ public abstract class CameraMixin { public abstract float getYaw(); @Shadow - private float yaw; + public float yaw; @Shadow - private float pitch; + public float pitch; - @WrapMethod(method = "update") - private void onUpdate(World area, Entity focusedEntity, boolean thirdPerson, boolean inverseView, float tickProgress, Operation original) { - if (Freecam.INSTANCE.isDisabled()) - original.call(area, focusedEntity, thirdPerson, inverseView, tickProgress); + @Inject(method = "update", at = @At("TAIL")) + private void onUpdate(World area, Entity focusedEntity, boolean thirdPerson, boolean inverseView, float tickProgress, CallbackInfo ci) { + if (!Freecam.INSTANCE.isEnabled()) return; Freecam.updateCam(); } @@ -88,12 +86,12 @@ private void injectQuickPerspectiveSwap(World area, Entity focusedEntity, boolea /** * Allows the camera to clip through blocks in third person */ - /*@Inject(method = "clipToSpace", at = @At("HEAD"), cancellable = true) + @Inject(method = "clipToSpace", at = @At("HEAD"), cancellable = true) private void onClipToSpace(float distance, CallbackInfoReturnable cir) { if (CameraTweaks.INSTANCE.isEnabled() && CameraTweaks.getNoClipCam()) { cir.setReturnValue(distance); } - }*/ + } /** * Modifies the third person camera distance @@ -157,11 +155,8 @@ private void onUpdateSetRotationArgs(Args args) { } } - @WrapMethod(method = "getSubmersionType") - private CameraSubmersionType injectGetSubmersionType(Operation original) { - if (NoRender.INSTANCE.isDisabled() && !NoRender.getNoFluidOverlay()) - return original.call(); - - return CameraSubmersionType.NONE; + @Inject(method = "getSubmersionType", at = @At("HEAD"), cancellable = true) + private void injectGetSubmersionType(CallbackInfoReturnable cir) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoFluidOverlay()) cir.setReturnValue(CameraSubmersionType.NONE); } } diff --git a/src/main/java/com/lambda/mixin/render/ChatInputSuggestorMixin.java b/src/main/java/com/lambda/mixin/render/ChatInputSuggestorMixin.java index f0a1bceba..1978e42a7 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/ChatScreenMixin.java b/src/main/java/com/lambda/mixin/render/ChatScreenMixin.java index 2d934731c..2ab906ce5 100644 --- a/src/main/java/com/lambda/mixin/render/ChatScreenMixin.java +++ b/src/main/java/com/lambda/mixin/render/ChatScreenMixin.java @@ -18,18 +18,18 @@ package com.lambda.mixin.render; import com.lambda.command.CommandManager; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.gui.screen.ChatScreen; 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(ChatScreen.class) public abstract class ChatScreenMixin { - @WrapMethod(method = "sendMessage") - void sendMessageInject(String chatText, boolean addToHistory, Operation original) { - if (!CommandManager.INSTANCE.isLambdaCommand(chatText)) - original.call(chatText, addToHistory); - + @Inject(method = "sendMessage", at = @At("HEAD"), cancellable = true) + void sendMessageInject(String chatText, boolean addToHistory, CallbackInfo ci) { + if (!CommandManager.INSTANCE.isLambdaCommand(chatText)) return; CommandManager.INSTANCE.executeCommand(chatText); + ci.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/render/ChunkOcclusionDataBuilderMixin.java b/src/main/java/com/lambda/mixin/render/ChunkOcclusionDataBuilderMixin.java index 487e8d441..b0566718d 100644 --- a/src/main/java/com/lambda/mixin/render/ChunkOcclusionDataBuilderMixin.java +++ b/src/main/java/com/lambda/mixin/render/ChunkOcclusionDataBuilderMixin.java @@ -18,17 +18,17 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.XRay; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.chunk.ChunkOcclusionDataBuilder; import net.minecraft.util.math.BlockPos; 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(ChunkOcclusionDataBuilder.class) public class ChunkOcclusionDataBuilderMixin { - @WrapMethod(method = "markClosed") - private void injectMarkClosed(BlockPos pos, Operation original) { - if (XRay.INSTANCE.isDisabled()) - original.call(pos); + @Inject(method = "markClosed", at = @At("HEAD"), cancellable = true) + private void injectMarkClosed(BlockPos pos, CallbackInfo ci) { + if (XRay.INSTANCE.isEnabled()) ci.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/render/DarknessEffectFogMixin.java b/src/main/java/com/lambda/mixin/render/DarknessEffectFogMixin.java index 0375c1bfd..af0c941e7 100644 --- a/src/main/java/com/lambda/mixin/render/DarknessEffectFogMixin.java +++ b/src/main/java/com/lambda/mixin/render/DarknessEffectFogMixin.java @@ -18,22 +18,25 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; 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 { - @WrapMethod(method = "applyDarknessModifier") - private float injectShouldApplyDarkness(LivingEntity cameraEntity, float darkness, float tickProgress, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoDarkness()) - return original.call(cameraEntity, darkness, tickProgress); - return 0f; + @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 new file mode 100644 index 000000000..3c0a42c54 --- /dev/null +++ b/src/main/java/com/lambda/mixin/render/DebugHudMixin.java @@ -0,0 +1,29 @@ +/* + * 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 new file mode 100644 index 000000000..8b703e194 --- /dev/null +++ b/src/main/java/com/lambda/mixin/render/DebugRendererMixin.java @@ -0,0 +1,36 @@ +/* + * 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/DrawContextMixin.java b/src/main/java/com/lambda/mixin/render/DrawContextMixin.java index ac8f465d3..c7eca6b04 100644 --- a/src/main/java/com/lambda/mixin/render/DrawContextMixin.java +++ b/src/main/java/com/lambda/mixin/render/DrawContextMixin.java @@ -19,8 +19,6 @@ import com.lambda.module.modules.render.ContainerPreview; import com.lambda.module.modules.render.MapPreview; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; @@ -32,11 +30,15 @@ import net.minecraft.item.tooltip.TooltipData; import net.minecraft.text.Text; import net.minecraft.util.Identifier; +import org.jetbrains.annotations.Nullable; import org.joml.Matrix3x2fStack; 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; import java.util.List; import java.util.Optional; @@ -62,10 +64,11 @@ public abstract class DrawContextMixin { @Shadow public abstract void drawMap(MapRenderState mapRenderState); - @WrapMethod(method = "drawStackOverlay(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V") - private void injectDrawMap(TextRenderer textRenderer, ItemStack stack, int x, int y, String stackCountText, Operation original) { - if (MapPreview.INSTANCE.isDisabled() || !MapPreview.getShowInSlot() || !stack.isOf(Items.FILLED_MAP)) - original.call(textRenderer, stack, x, y, stackCountText); + @Inject(method = "drawStackOverlay(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At(value = "TAIL")) + private void injectDrawMap(TextRenderer textRenderer, ItemStack stack, int i, int j, String string, CallbackInfo ci) { + if (MapPreview.INSTANCE.isDisabled() || !MapPreview.getShowInSlot()) return; + + if (!stack.isOf(Items.FILLED_MAP)) return; var mapId = stack.get(DataComponentTypes.MAP_ID); var savedData = FilledMapItem.getMapState(mapId, client.world); @@ -73,7 +76,7 @@ private void injectDrawMap(TextRenderer textRenderer, ItemStack stack, int x, in if (savedData == null) return; this.getMatrices().pushMatrix(); - this.getMatrices().translate(x, y); + this.getMatrices().translate(i, j); this.getMatrices().scale(0.125F, 0.125F); client.getMapRenderer().update(mapId, savedData, this.mapRenderState); @@ -82,17 +85,21 @@ private void injectDrawMap(TextRenderer textRenderer, ItemStack stack, int x, in this.getMatrices().popMatrix(); } - @WrapMethod(method = "drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;IILnet/minecraft/util/Identifier;)V") - private void onDrawTooltip(TextRenderer textRenderer, List text, Optional data, int x, int y, @org.jspecify.annotations.Nullable Identifier texture, Operation original) { - if (ContainerPreview.INSTANCE.isDisabled() || ContainerPreview.isRenderingSubTooltip()) - original.call(textRenderer, text, data, x, y, texture); + @Inject(method = "drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;IILnet/minecraft/util/Identifier;)V", at = @At("HEAD"), cancellable = true) + private void onDrawTooltip(TextRenderer textRenderer, List text, Optional data, int x, int y, @Nullable Identifier texture, CallbackInfo ci) { + if (!ContainerPreview.INSTANCE.isEnabled()) return; + + if (ContainerPreview.isRenderingSubTooltip()) return; if (ContainerPreview.isLocked()) { + ci.cancel(); ContainerPreview.renderLockedTooltip((DrawContext)(Object)this, textRenderer); return; } - if (data.isPresent() && data.get() instanceof ContainerPreview.ContainerComponent component) + if (data.isPresent() && data.get() instanceof ContainerPreview.ContainerComponent component) { + ci.cancel(); ContainerPreview.renderShulkerTooltip((DrawContext)(Object)this, textRenderer, component, x, y); + } } } diff --git a/src/main/java/com/lambda/mixin/render/EntityRendererMixin.java b/src/main/java/com/lambda/mixin/render/EntityRendererMixin.java index 7cd8723d2..b71234dce 100644 --- a/src/main/java/com/lambda/mixin/render/EntityRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/EntityRendererMixin.java @@ -18,8 +18,6 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.Frustum; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.EntityRenderer; @@ -28,20 +26,20 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; 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(EntityRenderer.class) -public class EntityRendererMixin { - @WrapMethod(method = "shouldRender(Lnet/minecraft/entity/Entity;Lnet/minecraft/client/render/Frustum;DDD)Z") - private boolean injectShouldRender(T entity, Frustum frustum, double x, double y, double z, Operation original) { - if (!NoRender.shouldOmitEntity(entity)) - original.call(entity, frustum, x, y, z); - - return false; +public class EntityRendererMixin { + @Inject(method = "shouldRender(Lnet/minecraft/entity/Entity;Lnet/minecraft/client/render/Frustum;DDD)Z", at = @At("HEAD"), cancellable = true) + private void injectShouldRender(Entity entity, Frustum frustum, double x, double y, double z, CallbackInfoReturnable cir) { + if (NoRender.shouldOmitEntity(entity)) cir.cancel(); } - @WrapMethod(method = "renderLabelIfPresent") - private void injectRenderLabelIfPresent(S state, MatrixStack matrices, OrderedRenderCommandQueue queue, CameraRenderState cameraRenderState, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoNametags()) - original.call(state, matrices, queue, cameraRenderState); + @Inject(method = "renderLabelIfPresent", at = @At("HEAD"), cancellable = true) + private void injectRenderLabelIfPresent(EntityRenderState state, MatrixStack matrices, OrderedRenderCommandQueue queue, CameraRenderState cameraRenderState, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoNametags()) ci.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/render/FluidRendererMixin.java b/src/main/java/com/lambda/mixin/render/FluidRendererMixin.java index bfb1b00c2..874f0ede5 100644 --- a/src/main/java/com/lambda/mixin/render/FluidRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/FluidRendererMixin.java @@ -18,8 +18,6 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.XRay; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.BlockState; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.block.FluidRenderer; @@ -28,32 +26,34 @@ import net.minecraft.world.BlockRenderView; import org.spongepowered.asm.mixin.Mixin; 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(FluidRenderer.class) public class FluidRendererMixin { @Unique private final ThreadLocal opacity = new ThreadLocal<>(); - @WrapMethod(method = "render") - private void injectRender(BlockRenderView world, BlockPos pos, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState, Operation original) { + @Inject(method = "render", at = @At("HEAD"), cancellable = true) + private void injectRender(BlockRenderView world, BlockPos pos, VertexConsumer vertexConsumer, BlockState blockState, FluidState fluidState, CallbackInfo info) { if (XRay.INSTANCE.isDisabled()) { opacity.set(255); - original.call(world, pos, vertexConsumer, blockState, fluidState); + return; } - int alpha = (int) (XRay.getOpacity() * 2.55); - if (alpha > 0) - this.opacity.set(alpha); + if (alpha == 0) info.cancel(); + else this.opacity.set(alpha); } - @WrapMethod(method = "vertex") - private void injectVertex(VertexConsumer vertexConsumer, float x, float y, float z, float red, float green, float blue, float u, float v, int light, Operation original) { + @Inject(method = "vertex", at = @At("HEAD"), cancellable = true) + private void injectVertex(VertexConsumer vertexConsumer, float x, float y, float z, float red, float green, float blue, float u, float v, int light, CallbackInfo info) { int alpha = this.opacity.get(); - if (alpha != 255) + if (alpha != 255) { vertexConsumer.vertex(x, y, z).color((int) (red * 255), (int) (green * 255), (int) (blue * 255), alpha).texture(u, v).light(light).normal(0.0f, 1.0f, 0.0f); - - original.call(vertexConsumer, x, y, z, red, green, blue, u, v, light); + info.cancel(); + } } } diff --git a/src/main/java/com/lambda/mixin/render/FogRendererMixin.java b/src/main/java/com/lambda/mixin/render/FogRendererMixin.java index 57ea17a96..98bdccacd 100644 --- a/src/main/java/com/lambda/mixin/render/FogRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/FogRendererMixin.java @@ -18,14 +18,15 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.mojang.blaze3d.buffers.GpuBuffer; import com.mojang.blaze3d.buffers.GpuBufferSlice; import net.minecraft.client.render.fog.FogRenderer; 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; import static net.minecraft.client.render.fog.FogRenderer.FOG_UBO_SIZE; @@ -35,11 +36,9 @@ public class FogRendererMixin { @Shadow private GpuBuffer emptyBuffer; - @WrapMethod(method = "getFogBuffer") - private GpuBufferSlice modify(FogRenderer.FogType fogType, Operation original) { + @Inject(method = "getFogBuffer", at = @At("HEAD"), cancellable = true) + private void modify(FogRenderer.FogType fogType, CallbackInfoReturnable cir) { if (fogType == FogRenderer.FogType.WORLD && NoRender.INSTANCE.isEnabled() && NoRender.getNoTerrainFog()) - return emptyBuffer.slice(0L, FOG_UBO_SIZE); - - return original.call(fogType); + cir.setReturnValue(emptyBuffer.slice(0L, FOG_UBO_SIZE)); } } diff --git a/src/main/java/com/lambda/mixin/render/GameRendererMixin.java b/src/main/java/com/lambda/mixin/render/GameRendererMixin.java index 54ed3e48a..98cf293e7 100644 --- a/src/main/java/com/lambda/mixin/render/GameRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/GameRendererMixin.java @@ -25,7 +25,6 @@ import com.lambda.module.modules.render.Zoom; 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; import com.mojang.blaze3d.buffers.GpuBufferSlice; @@ -44,15 +43,17 @@ @Mixin(GameRenderer.class) public class GameRendererMixin { - @WrapMethod(method = "updateCrosshairTarget(F)V") - private void updateTargetedEntityInvoke(float tickProgress, Operation original) { - if (!EventFlow.post(new RenderEvent.UpdateTarget()).isCanceled()) - original.call(tickProgress); + @Inject(method = "updateCrosshairTarget(F)V", at = @At("HEAD"), cancellable = true) + private void updateTargetedEntityInvoke(float tickDelta, CallbackInfo info) { + if (EventFlow.post(new RenderEvent.UpdateTarget()).isCanceled()) { + info.cancel(); + } } @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 original) { original.call(instance, allocator, tickCounter, renderBlockOutline, camera, positionMatrix, basicProjectionMatrix, projectionMatrix, fogBuffer, fogColor, renderSky); + RenderMain.render3D(positionMatrix, projectionMatrix); } @@ -61,10 +62,9 @@ private float modifyMax(float original) { return (NoRender.INSTANCE.isEnabled() && NoRender.getNoNausea()) ? 0 : original; } - @WrapMethod(method = "showFloatingItem") - private void injectShowFloatingItem(ItemStack floatingItem, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoFloatingItemAnimation()) - original.call(floatingItem); + @Inject(method = "showFloatingItem", at = @At("HEAD"), cancellable = true) + private void injectShowFloatingItem(ItemStack floatingItem, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoFloatingItemAnimation()) ci.cancel(); } @ModifyReturnValue(method = "getFov", at = @At("RETURN")) diff --git a/src/main/java/com/lambda/mixin/render/HandledScreenMixin.java b/src/main/java/com/lambda/mixin/render/HandledScreenMixin.java index 48aa2671d..3c66e9c53 100644 --- a/src/main/java/com/lambda/mixin/render/HandledScreenMixin.java +++ b/src/main/java/com/lambda/mixin/render/HandledScreenMixin.java @@ -18,27 +18,30 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.ContainerPreview; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.gui.Click; import net.minecraft.client.gui.screen.ingame.HandledScreen; 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(HandledScreen.class) public class HandledScreenMixin { - @WrapMethod(method = "mouseClicked") - private boolean onMouseClicked(Click click, boolean doubled, Operation original) { - if (ContainerPreview.INSTANCE.isDisabled() || !ContainerPreview.isLocked()) - original.call(click, doubled); - - return ContainerPreview.isMouseOverLockedTooltip((int) click.x(), (int) click.y()); + @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) + private void onMouseClicked(Click click, boolean doubled, CallbackInfoReturnable cir) { + if (ContainerPreview.INSTANCE.isEnabled() && ContainerPreview.isLocked()) { + if (ContainerPreview.isMouseOverLockedTooltip((int) click.x(), (int) click.y())) { + cir.setReturnValue(true); + } + } } - @WrapMethod(method = "mouseReleased") - private boolean onMouseReleased(Click click, Operation original) { - if (ContainerPreview.INSTANCE.isDisabled() || !ContainerPreview.isLocked()) - original.call(click); - - return ContainerPreview.isMouseOverLockedTooltip((int) click.x(), (int) click.y()); + @Inject(method = "mouseReleased", at = @At("HEAD"), cancellable = true) + private void onMouseReleased(Click click, CallbackInfoReturnable cir) { + if (ContainerPreview.INSTANCE.isEnabled() && ContainerPreview.isLocked()) { + if (ContainerPreview.isMouseOverLockedTooltip((int) click.x(), (int) click.y())) { + cir.setReturnValue(true); + } + } } } diff --git a/src/main/java/com/lambda/mixin/render/HeadFeatureRendererMixin.java b/src/main/java/com/lambda/mixin/render/HeadFeatureRendererMixin.java index b724b4603..bb8416614 100644 --- a/src/main/java/com/lambda/mixin/render/HeadFeatureRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/HeadFeatureRendererMixin.java @@ -18,19 +18,21 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +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; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(HeadFeatureRenderer.class) public class HeadFeatureRendererMixin { - @WrapMethod(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;ILnet/minecraft/client/render/entity/state/EntityRenderState;FF)V") - private void injectRender(MatrixStack matrices, OrderedRenderCommandQueue queue, int light, EntityRenderState state, float limbAngle, float limbDistance, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoArmor() || !NoRender.getIncludeNoOtherHeadItems()) - original.call(matrices, queue, light, state, limbAngle, limbDistance); + @Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;ILnet/minecraft/client/render/entity/state/EntityRenderState;FF)V", at = @At("HEAD"), cancellable = true) + private void injectRender(MatrixStack matrices, OrderedRenderCommandQueue queue, int light, EntityRenderState state, float limbAngle, float limbDistance, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoArmor() && NoRender.getIncludeNoOtherHeadItems()) ci.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/render/InGameHudMixin.java b/src/main/java/com/lambda/mixin/render/InGameHudMixin.java index 42e2d0640..d6ca4f2ca 100644 --- a/src/main/java/com/lambda/mixin/render/InGameHudMixin.java +++ b/src/main/java/com/lambda/mixin/render/InGameHudMixin.java @@ -17,10 +17,9 @@ package com.lambda.mixin.render; +import com.lambda.gui.DearImGui; import com.lambda.module.modules.render.NoRender; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.InGameHud; import net.minecraft.client.render.RenderTickCounter; @@ -29,39 +28,37 @@ import net.minecraft.util.Identifier; 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.ModifyArgs; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.invoke.arg.Args; @Mixin(InGameHud.class) public class InGameHudMixin { - @WrapMethod(method = "renderNauseaOverlay") - private void injectRenderNauseaOverlay(DrawContext context, float nauseaStrength, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoNausea()) - original.call(context, nauseaStrength); + + @Inject(method = "renderNauseaOverlay", at = @At("HEAD"), cancellable = true) + private void injectRenderNauseaOverlay(DrawContext context, float nauseaStrength, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoNausea()) ci.cancel(); } - @WrapMethod(method = "renderPortalOverlay") - private void injectRenderPortalOverlay(DrawContext context, float nauseaStrength, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoPortalOverlay()) - original.call(context, nauseaStrength); + @Inject(method = "renderPortalOverlay", at = @At("HEAD"), cancellable = true) + private void injectRenderPortalOverlay(DrawContext context, float nauseaStrength, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoPortalOverlay()) ci.cancel(); } - @WrapMethod(method = "renderVignetteOverlay") - private void injectRenderVignetteOverlay(DrawContext context, Entity entity, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoVignette()) - original.call(context, entity); + @Inject(method = "renderVignetteOverlay", at = @At("HEAD"), cancellable = true) + private void injectRenderVignetteOverlay(DrawContext context, Entity entity, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoVignette()) ci.cancel(); } - @WrapMethod(method = "renderStatusEffectOverlay") - private void injectRenderStatusEffectOverlay(DrawContext context, RenderTickCounter tickCounter, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoStatusEffects()) - original.call(context, tickCounter); + @Inject(method = "renderStatusEffectOverlay", at = @At("HEAD"), cancellable = true) + private void injectRenderStatusEffectOverlay(DrawContext context, RenderTickCounter tickCounter, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoStatusEffects()) ci.cancel(); } - @WrapMethod(method = "renderSpyglassOverlay") - private void injectRenderSpyglassOverlay(DrawContext context, float scale, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoSpyglassOverlay()) - original.call(context, scale); + @Inject(method = "renderSpyglassOverlay", at = @At("HEAD"), cancellable = true) + private void injectRenderSpyglassOverlay(DrawContext context, float scale, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoSpyglassOverlay()) ci.cancel(); } @ModifyArgs(method = "renderMiscOverlays", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/InGameHud;renderOverlay(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/util/Identifier;F)V")) @@ -77,15 +74,13 @@ private int modifyIsFirstPerson(int original) { return (NoRender.INSTANCE.isEnabled() && NoRender.getNoPowderedSnowOverlay()) ? 0 : original; } - @WrapMethod(method = "renderScoreboardSidebar(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/scoreboard/ScoreboardObjective;)V") - private void injectRenderScoreboardSidebar(DrawContext context, ScoreboardObjective objective, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoScoreBoard()) - original.call(context, objective); + @Inject(method = "renderScoreboardSidebar(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/scoreboard/ScoreboardObjective;)V", at = @At("HEAD"), cancellable = true) + private void injectRenderScoreboardSidebar(DrawContext drawContext, ScoreboardObjective objective, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoScoreBoard()) ci.cancel(); } - @WrapMethod(method = "renderCrosshair") - private void injectRenderCrosshair(DrawContext context, RenderTickCounter tickCounter, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoCrosshair()) - original.call(context, tickCounter); + @Inject(method = "renderCrosshair", at = @At("HEAD"), cancellable = true) + private void injectRenderCrosshair(DrawContext context, RenderTickCounter tickCounter, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoCrosshair()) ci.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/render/LightmapTextureManagerMixin.java b/src/main/java/com/lambda/mixin/render/LightmapTextureManagerMixin.java index 32799f38b..48dec03ed 100644 --- a/src/main/java/com/lambda/mixin/render/LightmapTextureManagerMixin.java +++ b/src/main/java/com/lambda/mixin/render/LightmapTextureManagerMixin.java @@ -33,6 +33,8 @@ 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. * diff --git a/src/main/java/com/lambda/mixin/render/PlayerListHudMixin.java b/src/main/java/com/lambda/mixin/render/PlayerListHudMixin.java index 5b8b7dc4d..30f55c6a8 100644 --- a/src/main/java/com/lambda/mixin/render/PlayerListHudMixin.java +++ b/src/main/java/com/lambda/mixin/render/PlayerListHudMixin.java @@ -22,8 +22,6 @@ import com.lambda.util.text.TextBuilder; import com.lambda.util.text.TextDslKt; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import kotlin.Unit; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.hud.PlayerListHud; @@ -40,7 +38,9 @@ import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Constant; +import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyConstant; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.Comparator; import java.util.List; @@ -57,19 +57,19 @@ public class PlayerListHudMixin { @Shadow @Final private MinecraftClient client; - @SuppressWarnings("DataFlowIssue") - @WrapMethod(method = "collectPlayerEntries") - private List onCollectPlayerEntriesHead(Operation> original) { - if (ExtraTab.INSTANCE.isDisabled()) - return original.call(); - - return client.player.networkHandler - .getListedPlayerListEntries() - .stream() - .filter(entry -> !ExtraTab.getFriendsOnly() || FriendManager.INSTANCE.isFriend(entry.getProfile())) - .sorted(ExtraTab.getSortFriendsFirst() ? FRIENDS_FIRST_ENTRY_ORDERING : ENTRY_ORDERING) - .limit(ExtraTab.getTabEntries()) - .toList(); + @Inject(method = "collectPlayerEntries", at = @At(value = "HEAD"), cancellable = true) + private void onCollectPlayerEntriesHead(CallbackInfoReturnable> cir) { + if (ExtraTab.INSTANCE.isDisabled()) return; + if (client.player == null) return; + cir.setReturnValue( + client.player.networkHandler + .getListedPlayerListEntries() + .stream() + .filter(entry -> !ExtraTab.getFriendsOnly() || FriendManager.INSTANCE.isFriend(entry.getProfile())) + .sorted(ExtraTab.getSortFriendsFirst() ? FRIENDS_FIRST_ENTRY_ORDERING : ENTRY_ORDERING) + .limit(ExtraTab.getTabEntries()) + .toList() + ); } @ModifyConstant(method = "render", constant = @Constant(intValue = 20)) diff --git a/src/main/java/com/lambda/mixin/render/RenderLayersMixin.java b/src/main/java/com/lambda/mixin/render/RenderLayersMixin.java index 6bc4b1d0c..96e786e33 100644 --- a/src/main/java/com/lambda/mixin/render/RenderLayersMixin.java +++ b/src/main/java/com/lambda/mixin/render/RenderLayersMixin.java @@ -18,36 +18,35 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.XRay; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.BlockState; import net.minecraft.client.render.BlockRenderLayer; import net.minecraft.client.render.BlockRenderLayers; import net.minecraft.fluid.FluidState; 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 make blocks render as translucent for XRay functionality. + * * Note: In 1.21.11, RenderLayers was split - BlockRenderLayers now handles * block/fluid layer determination and returns BlockRenderLayer enum instead of RenderLayer. */ @Mixin(BlockRenderLayers.class) public class RenderLayersMixin { - @WrapMethod(method = "getBlockLayer") - private static BlockRenderLayer injectGetBlockLayer(BlockState state, Operation original) { + @Inject(method = "getBlockLayer", at = @At("HEAD"), cancellable = true) + private static void injectGetBlockLayer(BlockState state, CallbackInfoReturnable cir) { + if (XRay.INSTANCE.isDisabled()) return; final var opacity = XRay.getOpacity(); - if (XRay.INSTANCE.isDisabled() || XRay.isSelected(state) || opacity <= 0 || opacity >= 100) - return original.call(state); - - return BlockRenderLayer.TRANSLUCENT; + if (opacity <= 0 || opacity >= 100) return; + if (!XRay.isSelected(state)) cir.setReturnValue(BlockRenderLayer.TRANSLUCENT); } - @WrapMethod(method = "getFluidLayer") - private static BlockRenderLayer injectGetFluidLayer(FluidState state, Operation original) { + @Inject(method = "getFluidLayer", at = @At("HEAD"), cancellable = true) + private static void injectGetFluidLayer(FluidState state, CallbackInfoReturnable cir) { + if (XRay.INSTANCE.isDisabled()) return; final var opacity = XRay.getOpacity(); - if (XRay.INSTANCE.isDisabled() || opacity <= 0 || opacity >= 100) - return original.call(state); - - return BlockRenderLayer.TRANSLUCENT; + if (opacity > 0 && opacity < 100) cir.setReturnValue(BlockRenderLayer.TRANSLUCENT); } } diff --git a/src/main/java/com/lambda/mixin/render/ScreenHandlerMixin.java b/src/main/java/com/lambda/mixin/render/ScreenHandlerMixin.java index 1ea7847bf..23c243a6f 100644 --- a/src/main/java/com/lambda/mixin/render/ScreenHandlerMixin.java +++ b/src/main/java/com/lambda/mixin/render/ScreenHandlerMixin.java @@ -19,19 +19,19 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.InventoryEvent; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.item.ItemStack; import net.minecraft.screen.ScreenHandler; 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 java.util.List; @Mixin(ScreenHandler.class) public class ScreenHandlerMixin { - @WrapMethod(method = "updateSlotStacks") - private void onUpdateSlotStacksHead(int revision, List stacks, ItemStack cursorStack, Operation original) { - original.call(revision, stacks, cursorStack); + @Inject(method = "updateSlotStacks", at = @At("TAIL")) + private void onUpdateSlotStacksHead(int revision, List stacks, ItemStack cursorStack, CallbackInfo ci) { EventFlow.post(new InventoryEvent.FullUpdate(revision, stacks, cursorStack)); } } diff --git a/src/main/java/com/lambda/mixin/render/ScreenMixin.java b/src/main/java/com/lambda/mixin/render/ScreenMixin.java index bc3b278e5..6ed4f2c53 100644 --- a/src/main/java/com/lambda/mixin/render/ScreenMixin.java +++ b/src/main/java/com/lambda/mixin/render/ScreenMixin.java @@ -20,7 +20,6 @@ import com.lambda.gui.components.QuickSearch; import com.lambda.module.modules.render.ContainerPreview; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.client.MinecraftClient; @@ -30,30 +29,31 @@ import org.lwjgl.glfw.GLFW; 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(Screen.class) public class ScreenMixin { - @WrapMethod(method = "keyPressed") - private boolean onKeyPressed(KeyInput input, Operation original) { + @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true) + private void onKeyPressed(KeyInput input, CallbackInfoReturnable cir) { if (input.key() == GLFW.GLFW_KEY_ESCAPE && QuickSearch.INSTANCE.isOpen()) { QuickSearch.INSTANCE.close(); - return true; + cir.setReturnValue(true); } - - return original.call(input); } - @WrapMethod(method = "renderInGameBackground") - private void injectRenderInGameBackground(DrawContext context, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoGuiShadow()) - original.call(context); + @Inject(method = "renderInGameBackground", at = @At("HEAD"), cancellable = true) + private void injectRenderInGameBackground(DrawContext context, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoGuiShadow()) ci.cancel(); } @WrapOperation(method = "renderWithTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;render(Lnet/minecraft/client/gui/DrawContext;IIF)V")) private void wrapRender(Screen instance, DrawContext context, int mouseX, int mouseY, float deltaTicks, Operation original) { original.call(instance, context, mouseX, mouseY, deltaTicks); - if (ContainerPreview.INSTANCE.isEnabled() && ContainerPreview.isLocked()) + if (ContainerPreview.INSTANCE.isEnabled() && ContainerPreview.isLocked()) { ContainerPreview.renderLockedTooltip(context, MinecraftClient.getInstance().textRenderer); + } } } diff --git a/src/main/java/com/lambda/mixin/render/SodiumBlockOcclusionCacheMixin.java b/src/main/java/com/lambda/mixin/render/SodiumBlockOcclusionCacheMixin.java index 4aa984920..2ec34d4de 100644 --- a/src/main/java/com/lambda/mixin/render/SodiumBlockOcclusionCacheMixin.java +++ b/src/main/java/com/lambda/mixin/render/SodiumBlockOcclusionCacheMixin.java @@ -33,7 +33,6 @@ public class SodiumBlockOcclusionCacheMixin { private boolean modifyShouldDrawSide(boolean original, BlockState state, BlockView view, BlockPos pos, Direction facing) { if (XRay.INSTANCE.isEnabled() && XRay.isSelected(state) && XRay.getOpacity() < 100) return true; - return original; } } diff --git a/src/main/java/com/lambda/mixin/render/SodiumFluidRendererImplMixin.java b/src/main/java/com/lambda/mixin/render/SodiumFluidRendererImplMixin.java index 0bb085061..2d50b3e71 100644 --- a/src/main/java/com/lambda/mixin/render/SodiumFluidRendererImplMixin.java +++ b/src/main/java/com/lambda/mixin/render/SodiumFluidRendererImplMixin.java @@ -18,8 +18,6 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.XRay; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildBuffers; import net.caffeinemc.mods.sodium.client.render.chunk.translucent_sorting.TranslucentGeometryCollector; import net.caffeinemc.mods.sodium.client.world.LevelSlice; @@ -28,12 +26,15 @@ import net.minecraft.fluid.FluidState; import net.minecraft.util.math.BlockPos; 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(FluidRendererImpl.class) public class SodiumFluidRendererImplMixin { - @WrapMethod(method = "render") - private void injectRender(LevelSlice level, BlockState blockState, FluidState fluidState, BlockPos blockPos, BlockPos offset, TranslucentGeometryCollector collector, ChunkBuildBuffers buffers, Operation original) { - if (XRay.INSTANCE.isDisabled() || !XRay.isSelected(blockState) || XRay.getOpacity() >= 100) - original.call(level, blockState, fluidState, blockPos, offset, collector, buffers); + @Inject(method = "render", at = @At("HEAD"), cancellable = true) + private void injectRender(LevelSlice level, BlockState blockState, FluidState fluidState, BlockPos blockPos, BlockPos offset, TranslucentGeometryCollector collector, ChunkBuildBuffers buffers, CallbackInfo info) { + if (XRay.INSTANCE.isEnabled() && !XRay.isSelected(blockState) && XRay.getOpacity() < 100) + info.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/render/SplashOverlayMixin.java b/src/main/java/com/lambda/mixin/render/SplashOverlayMixin.java index a9a2e15d6..59702b7a1 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/TooltipComponentMixin.java b/src/main/java/com/lambda/mixin/render/TooltipComponentMixin.java index dfc092f93..1088f5c65 100644 --- a/src/main/java/com/lambda/mixin/render/TooltipComponentMixin.java +++ b/src/main/java/com/lambda/mixin/render/TooltipComponentMixin.java @@ -19,23 +19,30 @@ import com.lambda.module.modules.render.ContainerPreview; import com.lambda.module.modules.render.MapPreview; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import net.minecraft.client.gui.tooltip.BundleTooltipComponent; +import net.minecraft.client.gui.tooltip.ProfilesTooltipComponent; import net.minecraft.client.gui.tooltip.TooltipComponent; +import net.minecraft.item.tooltip.BundleTooltipData; import net.minecraft.item.tooltip.TooltipData; 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(TooltipComponent.class) public interface TooltipComponentMixin { - @WrapMethod(method = "of(Lnet/minecraft/item/tooltip/TooltipData;)Lnet/minecraft/client/gui/tooltip/TooltipComponent;") - private static TooltipComponent of(TooltipData tooltipData, Operation original) { - if (ContainerPreview.INSTANCE.isEnabled() && - tooltipData instanceof ContainerPreview.ContainerComponent containerComponent) - return containerComponent; + @Inject(method = "of(Lnet/minecraft/item/tooltip/TooltipData;)Lnet/minecraft/client/gui/tooltip/TooltipComponent;", at = @At("HEAD"), cancellable = true) + private static void of(TooltipData tooltipData, CallbackInfoReturnable cir) { + if (ContainerPreview.INSTANCE.isEnabled() && tooltipData instanceof ContainerPreview.ContainerComponent containerComponent) { + cir.setReturnValue(containerComponent); + return; + } - if (MapPreview.INSTANCE.isEnabled() && tooltipData instanceof MapPreview.MapComponent mapComponent) - return mapComponent; - - return original.call(tooltipData); + if (MapPreview.INSTANCE.isEnabled()) cir.setReturnValue((switch (tooltipData) { + case MapPreview.MapComponent mapComponent -> mapComponent; + case BundleTooltipData bundleTooltipData -> new BundleTooltipComponent(bundleTooltipData.contents()); + case ProfilesTooltipComponent.ProfilesData profilesData -> new ProfilesTooltipComponent(profilesData); + default -> throw new IllegalArgumentException("Unknown TooltipComponent"); + })); } } diff --git a/src/main/java/com/lambda/mixin/render/WeatherRenderingMixin.java b/src/main/java/com/lambda/mixin/render/WeatherRenderingMixin.java index 8b23b8dc8..5956f8a3c 100644 --- a/src/main/java/com/lambda/mixin/render/WeatherRenderingMixin.java +++ b/src/main/java/com/lambda/mixin/render/WeatherRenderingMixin.java @@ -18,30 +18,28 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.Weather; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.WeatherRendering; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.biome.Biome; 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(WeatherRendering.class) public class WeatherRenderingMixin { - @WrapMethod(method = "getPrecipitationAt") - private Biome.Precipitation injectGetPrecipitationAt(World world, BlockPos pos, Operation original) { - if (Weather.INSTANCE.isDisabled()) - return original.call(world, pos); - - Weather.WeatherMode mode = Weather.getWeatherMode(); - if (world.getRegistryKey() == World.OVERWORLD) { - if (mode == Weather.WeatherMode.Rain && Weather.getOverrideSnow()) return Biome.Precipitation.RAIN; - else if (mode == Weather.WeatherMode.Snow) return Biome.Precipitation.SNOW; - } else { - if (mode == Weather.WeatherMode.Snow) return Biome.Precipitation.SNOW; - else return Biome.Precipitation.RAIN; + @Inject(method = "getPrecipitationAt", at = @At("HEAD"), cancellable = true) + private void injectGetPrecipitationAt(World world, BlockPos pos, CallbackInfoReturnable cir) { + if (Weather.INSTANCE.isEnabled()) { + Weather.WeatherMode mode = Weather.getWeatherMode(); + if (world.getRegistryKey() == World.OVERWORLD) { + if (mode == Weather.WeatherMode.Rain && Weather.getOverrideSnow()) cir.setReturnValue(Biome.Precipitation.RAIN); + else if (mode == Weather.WeatherMode.Snow) cir.setReturnValue(Biome.Precipitation.SNOW); + } else { + if (mode == Weather.WeatherMode.Snow) cir.setReturnValue(Biome.Precipitation.SNOW); + else cir.setReturnValue(Biome.Precipitation.RAIN); + } } - - return original.call(world, pos); // ?? } } diff --git a/src/main/java/com/lambda/mixin/render/WorldBorderRenderingMixin.java b/src/main/java/com/lambda/mixin/render/WorldBorderRenderingMixin.java index b8bd9d251..9553a39a5 100644 --- a/src/main/java/com/lambda/mixin/render/WorldBorderRenderingMixin.java +++ b/src/main/java/com/lambda/mixin/render/WorldBorderRenderingMixin.java @@ -18,18 +18,19 @@ package com.lambda.mixin.render; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; 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; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(WorldBorderRendering.class) public class WorldBorderRenderingMixin { - @WrapMethod(method = "render") - private void injectRender(WorldBorderRenderState state, Vec3d cameraPos, double viewDistanceBlocks, double farPlaneDistance, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoWorldBorder()) - original.call(state, cameraPos, viewDistanceBlocks, farPlaneDistance); + @Inject(method = "render", at = @At("HEAD"), cancellable = true) + private void injectRender(WorldBorderRenderState state, Vec3d cameraPos, double viewDistanceBlocks, double farPlaneDistance, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoWorldBorder()) ci.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java b/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java index e329870fb..313cb6ddd 100644 --- a/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java @@ -21,8 +21,6 @@ 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.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.Camera; import net.minecraft.client.render.WorldRenderer; import net.minecraft.entity.Entity; @@ -30,20 +28,20 @@ import net.minecraft.entity.effect.StatusEffects; 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.ModifyArg; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(WorldRenderer.class) public class WorldRendererMixin { - @WrapMethod(method = "hasBlindnessOrDarkness(Lnet/minecraft/client/render/Camera;)Z") - private boolean modifyEffectCheck(Camera camera, Operation original) { + @Inject(method = "hasBlindnessOrDarkness(Lnet/minecraft/client/render/Camera;)Z", at = @At(value = "HEAD"), cancellable = true) + private void modifyEffectCheck(Camera camera, CallbackInfoReturnable cir) { Entity entity = camera.getFocusedEntity(); if (entity instanceof LivingEntity livingEntity && NoRender.INSTANCE.isEnabled()) { boolean blind = livingEntity.hasStatusEffect(StatusEffects.BLINDNESS) && !NoRender.getNoBlindness(); boolean dark = livingEntity.hasStatusEffect(StatusEffects.DARKNESS) && !NoRender.getNoDarkness(); - return blind || dark; + cir.setReturnValue(blind || dark); } - - return original.call(camera); } @ModifyArg(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;updateCamera(Lnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/Frustum;Z)V"), index = 2) diff --git a/src/main/java/com/lambda/mixin/render/blockentity/AbstractSignBlockEntityRendererMixin.java b/src/main/java/com/lambda/mixin/render/blockentity/AbstractSignBlockEntityRendererMixin.java index 80dd88004..9d6232c03 100644 --- a/src/main/java/com/lambda/mixin/render/blockentity/AbstractSignBlockEntityRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/blockentity/AbstractSignBlockEntityRendererMixin.java @@ -18,19 +18,19 @@ package com.lambda.mixin.render.blockentity; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.block.entity.AbstractSignBlockEntityRenderer; import net.minecraft.client.render.block.entity.state.SignBlockEntityRenderState; import net.minecraft.client.render.command.OrderedRenderCommandQueue; 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(AbstractSignBlockEntityRenderer.class) public class AbstractSignBlockEntityRendererMixin { - @WrapMethod(method = "renderText") - private void injectRenderText(SignBlockEntityRenderState renderState, MatrixStack matrices, OrderedRenderCommandQueue queue, boolean front, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoSignText()) - original.call(renderState, matrices, queue, front); + @Inject(method = "renderText", at = @At("HEAD"), cancellable = true) + private void injectRenderText(SignBlockEntityRenderState renderState, MatrixStack matrices, OrderedRenderCommandQueue queue, boolean front, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoSignText()) ci.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/render/blockentity/BeaconBlockEntityRendererMixin.java b/src/main/java/com/lambda/mixin/render/blockentity/BeaconBlockEntityRendererMixin.java index 9d1d6ac08..8ad9a6d83 100644 --- a/src/main/java/com/lambda/mixin/render/blockentity/BeaconBlockEntityRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/blockentity/BeaconBlockEntityRendererMixin.java @@ -18,20 +18,20 @@ package com.lambda.mixin.render.blockentity; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; import net.minecraft.client.render.block.entity.state.BeaconBlockEntityRenderState; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.state.CameraRenderState; 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(BeaconBlockEntityRenderer.class) public class BeaconBlockEntityRendererMixin { - @WrapMethod(method = "render(Lnet/minecraft/client/render/block/entity/state/BeaconBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V") - private void injectRender(BeaconBlockEntityRenderState beaconBlockEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState cameraRenderState, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoBeaconBeams()) - original.call(beaconBlockEntityRenderState, matrixStack, orderedRenderCommandQueue, cameraRenderState); + @Inject(method = "render(Lnet/minecraft/client/render/block/entity/state/BeaconBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At("HEAD"), cancellable = true) + private void injectRender(BeaconBlockEntityRenderState beaconBlockEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState cameraRenderState, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoBeaconBeams()) ci.cancel(); } } 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 0f9fd8cc9..784faeee0 100644 --- a/src/main/java/com/lambda/mixin/render/blockentity/BlockEntityRenderDispatcherMixin.java +++ b/src/main/java/com/lambda/mixin/render/blockentity/BlockEntityRenderDispatcherMixin.java @@ -18,28 +18,30 @@ package com.lambda.mixin.render.blockentity; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.entity.BlockEntity; 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. + * * Note: In 1.21.11, BlockEntityRenderDispatcher was renamed to BlockEntityRenderManager * and uses a render state system. Returning null from getRenderState prevents rendering. */ @Mixin(BlockEntityRenderManager.class) public class BlockEntityRenderDispatcherMixin { - @WrapMethod(method = "getRenderState") - private @Nullable S injectGetRenderState( - E blockEntity, float tickProgress, ModelCommandRenderer.@Nullable CrumblingOverlayCommand crumblingOverlay, Operation original) { - if (NoRender.shouldOmitBlockEntity(blockEntity)) - return null; - - return original.call(blockEntity, tickProgress, crumblingOverlay); + @Inject(method = "getRenderState", at = @At("HEAD"), cancellable = true) + private void injectGetRenderState( + E blockEntity, float tickProgress, ModelCommandRenderer.@Nullable CrumblingOverlayCommand crumblingOverlay, + CallbackInfoReturnable cir) { + if (NoRender.shouldOmitBlockEntity(blockEntity)) { + cir.setReturnValue(null); + } } } diff --git a/src/main/java/com/lambda/mixin/render/blockentity/EnchantingTableBlockEntityRendererMixin.java b/src/main/java/com/lambda/mixin/render/blockentity/EnchantingTableBlockEntityRendererMixin.java index 454d5603d..f0e5b02dd 100644 --- a/src/main/java/com/lambda/mixin/render/blockentity/EnchantingTableBlockEntityRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/blockentity/EnchantingTableBlockEntityRendererMixin.java @@ -18,20 +18,20 @@ package com.lambda.mixin.render.blockentity; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.block.entity.EnchantingTableBlockEntityRenderer; import net.minecraft.client.render.block.entity.state.EnchantingTableBlockEntityRenderState; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.state.CameraRenderState; 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(EnchantingTableBlockEntityRenderer.class) public class EnchantingTableBlockEntityRendererMixin { - @WrapMethod(method = "render(Lnet/minecraft/client/render/block/entity/state/EnchantingTableBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V") - private void injectRender(EnchantingTableBlockEntityRenderState enchantingTableBlockEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState cameraRenderState, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoEnchantingTableBook()) - original.call(enchantingTableBlockEntityRenderState, matrixStack, orderedRenderCommandQueue, cameraRenderState); + @Inject(method = "render(Lnet/minecraft/client/render/block/entity/state/EnchantingTableBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At("HEAD"), cancellable = true) + private void injectRender(EnchantingTableBlockEntityRenderState renderState, MatrixStack matrices, OrderedRenderCommandQueue queue, CameraRenderState cameraRenderState, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoEnchantingTableBook()) ci.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/render/blockentity/MobSpawnerBlockEntityRendererMixin.java b/src/main/java/com/lambda/mixin/render/blockentity/MobSpawnerBlockEntityRendererMixin.java index e627184f2..f47e9d2c0 100644 --- a/src/main/java/com/lambda/mixin/render/blockentity/MobSpawnerBlockEntityRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/blockentity/MobSpawnerBlockEntityRendererMixin.java @@ -18,8 +18,6 @@ package com.lambda.mixin.render.blockentity; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.render.block.entity.MobSpawnerBlockEntityRenderer; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.EntityRenderManager; @@ -27,12 +25,14 @@ import net.minecraft.client.render.state.CameraRenderState; 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(MobSpawnerBlockEntityRenderer.class) public class MobSpawnerBlockEntityRendererMixin { - @WrapMethod(method = "renderDisplayEntity") - private static void injectRender(MatrixStack matrices, OrderedRenderCommandQueue queue, EntityRenderState state, EntityRenderManager entityRenderDispatcher, float rotation, float scale, CameraRenderState cameraRenderState, Operation original) { - if (NoRender.INSTANCE.isDisabled() || !NoRender.getNoSpawnerMob()) - original.call(matrices, queue, state, entityRenderDispatcher, rotation, scale, cameraRenderState); + @Inject(method = "renderDisplayEntity", at = @At("HEAD"), cancellable = true) + private static void injectRender(MatrixStack matrices, OrderedRenderCommandQueue queue, EntityRenderState state, EntityRenderManager entityRenderDispatcher, float rotation, float scale, CameraRenderState cameraRenderState, CallbackInfo ci) { + if (NoRender.INSTANCE.isEnabled() && NoRender.getNoSpawnerMob()) ci.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/render/particle/BillboardParticleMixin.java b/src/main/java/com/lambda/mixin/render/particle/BillboardParticleMixin.java index 0883e76bc..06faa1a5d 100644 --- a/src/main/java/com/lambda/mixin/render/particle/BillboardParticleMixin.java +++ b/src/main/java/com/lambda/mixin/render/particle/BillboardParticleMixin.java @@ -18,19 +18,19 @@ package com.lambda.mixin.render.particle; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.particle.BillboardParticle; import net.minecraft.client.particle.BillboardParticleSubmittable; import net.minecraft.client.particle.Particle; import net.minecraft.client.render.Camera; 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(BillboardParticle.class) public class BillboardParticleMixin { - @WrapMethod(method = "render(Lnet/minecraft/client/particle/BillboardParticleSubmittable;Lnet/minecraft/client/render/Camera;F)V") - private void injectRender(BillboardParticleSubmittable submittable, Camera camera, float tickProgress, Operation original) { - if (!NoRender.shouldOmitParticle((Particle) ((Object) this))) - original.call(submittable, camera, tickProgress); + @Inject(method = "render(Lnet/minecraft/client/particle/BillboardParticleSubmittable;Lnet/minecraft/client/render/Camera;F)V", at = @At("HEAD"), cancellable = true) + private void injectRender(BillboardParticleSubmittable submittable, Camera camera, float tickDelta, CallbackInfo ci) { + if (NoRender.shouldOmitParticle((Particle) ((Object) this))) ci.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/render/particle/ElderGuardianParticleRendererMixin.java b/src/main/java/com/lambda/mixin/render/particle/ElderGuardianParticleRendererMixin.java index 406d82e1b..cc7b2e818 100644 --- a/src/main/java/com/lambda/mixin/render/particle/ElderGuardianParticleRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/particle/ElderGuardianParticleRendererMixin.java @@ -18,8 +18,6 @@ package com.lambda.mixin.render.particle; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.particle.ElderGuardianParticle; import net.minecraft.client.particle.ElderGuardianParticleRenderer; import net.minecraft.client.particle.NoRenderParticleRenderer; @@ -27,14 +25,14 @@ import net.minecraft.client.render.Frustum; import net.minecraft.client.render.Submittable; 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(ElderGuardianParticleRenderer.class) public class ElderGuardianParticleRendererMixin { - @WrapMethod(method = "render") - private Submittable injectRender(Frustum frustum, Camera camera, float tickProgress, Operation original) { - if (!NoRender.shouldOmitParticle(ElderGuardianParticle.class)) - return original.call(frustum, camera, tickProgress); - - return NoRenderParticleRenderer.EMPTY; + @Inject(method = "render", at = @At("HEAD"), cancellable = true) + private void injectRender(Frustum frustum, Camera camera, float tickProgress, CallbackInfoReturnable cir) { + if (NoRender.shouldOmitParticle(ElderGuardianParticle.class)) cir.setReturnValue(NoRenderParticleRenderer.EMPTY); } } diff --git a/src/main/java/com/lambda/mixin/render/particle/ItemPickupParticleRendererMixin.java b/src/main/java/com/lambda/mixin/render/particle/ItemPickupParticleRendererMixin.java index 7133550c3..509b3323c 100644 --- a/src/main/java/com/lambda/mixin/render/particle/ItemPickupParticleRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/particle/ItemPickupParticleRendererMixin.java @@ -18,8 +18,6 @@ package com.lambda.mixin.render.particle; import com.lambda.module.modules.render.NoRender; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.particle.ItemPickupParticle; import net.minecraft.client.particle.ItemPickupParticleRenderer; import net.minecraft.client.particle.NoRenderParticleRenderer; @@ -27,14 +25,14 @@ import net.minecraft.client.render.Frustum; import net.minecraft.client.render.Submittable; 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(ItemPickupParticleRenderer.class) public class ItemPickupParticleRendererMixin { - @WrapMethod(method = "render") - private Submittable injectRender(Frustum frustum, Camera camera, float tickProgress, Operation original) { - if (!NoRender.shouldOmitParticle(ItemPickupParticle.class)) - return original.call(frustum, camera, tickProgress); - - return NoRenderParticleRenderer.EMPTY; + @Inject(method = "render", at = @At("HEAD"), cancellable = true) + private void injectRender(Frustum frustum, Camera camera, float tickProgress, CallbackInfoReturnable cir) { + if (NoRender.shouldOmitParticle(ItemPickupParticle.class)) cir.setReturnValue(NoRenderParticleRenderer.EMPTY); } } diff --git a/src/main/java/com/lambda/mixin/world/AbstractBlockMixin.java b/src/main/java/com/lambda/mixin/world/AbstractBlockMixin.java index fddcbc1d0..b01c654a2 100644 --- a/src/main/java/com/lambda/mixin/world/AbstractBlockMixin.java +++ b/src/main/java/com/lambda/mixin/world/AbstractBlockMixin.java @@ -20,6 +20,9 @@ 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 548f56e5e..fbe3ee240 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/ClientChunkManagerMixin.java b/src/main/java/com/lambda/mixin/world/ClientChunkManagerMixin.java index 356070f8a..680ed4c54 100644 --- a/src/main/java/com/lambda/mixin/world/ClientChunkManagerMixin.java +++ b/src/main/java/com/lambda/mixin/world/ClientChunkManagerMixin.java @@ -19,18 +19,19 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.WorldEvent; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.client.world.ClientChunkManager; +import net.minecraft.client.world.ClientWorld; import net.minecraft.network.PacketByteBuf; import net.minecraft.network.packet.s2c.play.ChunkData; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.Heightmap; import net.minecraft.world.chunk.WorldChunk; +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.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @@ -39,23 +40,49 @@ @Mixin(ClientChunkManager.class) public class ClientChunkManagerMixin { - @WrapMethod(method = "loadChunkFromPacket") - private WorldChunk onChunkLoad(int x, int z, PacketByteBuf buf, Map heightmaps, Consumer consumer, Operation original) { - var ret = original.call(x, z, buf, heightmaps, consumer); + @Final + @Shadow + ClientWorld world; - EventFlow.post(new WorldEvent.ChunkEvent.Load(ret)); - return ret; + @Inject(method = "loadChunkFromPacket", at = @At("TAIL")) + private void onChunkLoad( + int x, int z, PacketByteBuf buf, Map heightmaps, Consumer consumer, CallbackInfoReturnable cir + ) { + EventFlow.post(new WorldEvent.ChunkEvent.Load(cir.getReturnValue())); } @Inject(method = "loadChunkFromPacket", at = @At(value = "NEW", target = "net/minecraft/world/chunk/WorldChunk", shift = At.Shift.BEFORE), locals = LocalCapture.CAPTURE_FAILHARD) private void onChunkUnload(int x, int z, PacketByteBuf buf, Map heightmaps, Consumer consumer, CallbackInfoReturnable cir, int i, WorldChunk chunk, ChunkPos chunkPos) { - if (chunk != null) + if (chunk != null) { EventFlow.post(new WorldEvent.ChunkEvent.Unload(chunk)); + } } - @WrapOperation(method = "unload", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientChunkManager$ClientChunkMap;unloadChunk(ILnet/minecraft/world/chunk/WorldChunk;)V")) - private void onChunkUnload(ClientChunkManager.ClientChunkMap instance, int index, WorldChunk chunk, Operation original) { - original.call(instance, index, chunk); + @Inject(method = "unload", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientChunkManager$ClientChunkMap;unloadChunk(ILnet/minecraft/world/chunk/WorldChunk;)V"), locals = LocalCapture.CAPTURE_FAILHARD) + private void onChunkUnload(ChunkPos pos, CallbackInfo ci, int i, WorldChunk chunk) { EventFlow.post(new WorldEvent.ChunkEvent.Unload(chunk)); } + +// @Inject( +// method = "updateLoadDistance", +// at = @At( +// value = "INVOKE", +// target = "net/minecraft/client/world/ClientChunkManager$ClientChunkMap.isInRadius(II)Z" +// ), +// locals = LocalCapture.CAPTURE_FAILHARD +// ) +// private void onUpdateLoadDistance( +// int loadDistance, +// CallbackInfo ci, +// int oldRadius, +// int newRadius, +// ClientChunkManager.ClientChunkMap clientChunkMap, +// int k, +// WorldChunk oldChunk, +// ChunkPos chunkPos +// ) { +// if (!clientChunkMap.isInRadius(chunkPos.x, chunkPos.z)) { +// EventFlow.post(new WorldEvent.ChunkEvent.Unload(this.world, oldChunk)); +// } +// } } diff --git a/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java b/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java index ff2044b05..5b86cf797 100644 --- a/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java +++ b/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java @@ -20,30 +20,29 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.EntityEvent; import com.lambda.event.events.WorldEvent; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +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; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ClientWorld.class) public class ClientWorldMixin { - @WrapMethod(method = "addEntity") - private void onAddEntity(Entity entity, Operation original) { - if (!EventFlow.post(new EntityEvent.Spawn(entity)).isCanceled()) - original.call(entity); + @Inject(method = "addEntity", at = @At("HEAD"), cancellable = true) + private void onAddEntity(Entity entity, CallbackInfo ci) { + if (EventFlow.post(new EntityEvent.Spawn(entity)).isCanceled()) ci.cancel(); } - @WrapMethod(method = "removeEntity") - private void onRemoveEntity(int entityId, Entity.RemovalReason removalReason, Operation original) { + @Inject(method = "removeEntity", at = @At("HEAD")) + private void onRemoveEntity(int entityId, Entity.RemovalReason removalReason, CallbackInfo ci) { Entity entity = ((ClientWorld) (Object) this).getEntityById(entityId); - if (entity == null) { - original.call(entityId, removalReason); - return; - } - + if (entity == null) return; EventFlow.post(new EntityEvent.Removal(entity, removalReason)); } @@ -64,9 +63,8 @@ private void onRemoveEntity(int entityId, Entity.RemovalReason removalReason, Op // } - @WrapMethod(method = "handleBlockUpdate") - private void handleBlockUpdateInject(BlockPos pos, BlockState state, int flags, Operation original) { - if (!EventFlow.post(new WorldEvent.BlockUpdate.Server(pos, state)).isCanceled()) - original.call(pos, state, flags); + @Inject(method = "handleBlockUpdate", at = @At("HEAD"), cancellable = true) + private void handleBlockUpdateInject(BlockPos pos, BlockState newState, int flags, CallbackInfo ci) { + if (EventFlow.post(new WorldEvent.BlockUpdate.Server(pos, newState)).isCanceled()) ci.cancel(); } } diff --git a/src/main/java/com/lambda/mixin/world/StructureTemplateMixin.java b/src/main/java/com/lambda/mixin/world/StructureTemplateMixin.java index f27c0768d..400b87bed 100644 --- a/src/main/java/com/lambda/mixin/world/StructureTemplateMixin.java +++ b/src/main/java/com/lambda/mixin/world/StructureTemplateMixin.java @@ -18,8 +18,6 @@ package com.lambda.mixin.world; import com.llamalad7.mixinextras.injector.ModifyReturnValue; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.Block; import net.minecraft.nbt.NbtCompound; import net.minecraft.registry.RegistryEntryLookup; @@ -27,6 +25,9 @@ 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.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.Objects; @@ -40,15 +41,13 @@ public String getAuthor(String original) { return Objects.equals(original, "?") || Objects.equals(original, "") ? "unknown" : original; } - @WrapMethod(method = "writeNbt(Lnet/minecraft/nbt/NbtCompound;)Lnet/minecraft/nbt/NbtCompound;") - public NbtCompound writeNbt(NbtCompound nbt, Operation original) { + @Inject(method = "writeNbt(Lnet/minecraft/nbt/NbtCompound;)Lnet/minecraft/nbt/NbtCompound;", at = @At("TAIL")) + public void writeNbt(NbtCompound nbt, CallbackInfoReturnable cir) { nbt.putString("author", author); - return original.call(nbt); } - @WrapMethod(method = "readNbt(Lnet/minecraft/registry/RegistryEntryLookup;Lnet/minecraft/nbt/NbtCompound;)V") - public void readNbt(RegistryEntryLookup blockLookup, NbtCompound nbt, Operation original) { - original.call(blockLookup, nbt); + @Inject(method = "readNbt(Lnet/minecraft/registry/RegistryEntryLookup;Lnet/minecraft/nbt/NbtCompound;)V", at = @At("TAIL")) + public void readNbt(RegistryEntryLookup blockLookup, NbtCompound nbt, CallbackInfo ci) { author = nbt.getString("author", "unknown"); } } diff --git a/src/main/java/com/lambda/mixin/world/WorldMixin.java b/src/main/java/com/lambda/mixin/world/WorldMixin.java index e8662c789..7c23170c9 100644 --- a/src/main/java/com/lambda/mixin/world/WorldMixin.java +++ b/src/main/java/com/lambda/mixin/world/WorldMixin.java @@ -20,39 +20,39 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.WorldEvent; import com.lambda.module.modules.render.Weather; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; 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(World.class) public abstract class WorldMixin { - @WrapMethod(method = "onBlockStateChanged") - void onBlockChanged(BlockPos pos, BlockState oldState, BlockState newState, Operation original) { - original.call(pos, oldState, newState); - EventFlow.post(new WorldEvent.BlockUpdate.Client(pos, oldState, newState)); + @Inject(method = "onBlockStateChanged", at = @At("TAIL")) + void onBlockChanged(BlockPos pos, BlockState oldBlock, BlockState newBlock, CallbackInfo ci) { + EventFlow.post(new WorldEvent.BlockUpdate.Client(pos, oldBlock, newBlock)); } - @WrapMethod(method = "getThunderGradient(F)F") - private float injectGetThunderGradient(float tickProgress, Operation original) { - if (Weather.INSTANCE.isDisabled()) - return original.call(tickProgress); - - if (Weather.getWeatherMode() == Weather.WeatherMode.Thunder) return 1f; - else return 0f; + @Inject(method = "getThunderGradient(F)F", at = @At("HEAD"), cancellable = true) + private void injectGetThunderGradient(float tickProgress, CallbackInfoReturnable cir) { + if (Weather.INSTANCE.isEnabled()) { + if (Weather.getWeatherMode() == Weather.WeatherMode.Thunder) cir.setReturnValue(1f); + else cir.setReturnValue(0f); + } } - @WrapMethod(method = "getRainGradient") - private float injectGetRainGradient(float tickProgress, Operation original) { - if (Weather.INSTANCE.isDisabled()) - return original.call(tickProgress); - - Weather.WeatherMode mode = Weather.getWeatherMode(); - if (mode == Weather.WeatherMode.Rain || - mode == Weather.WeatherMode.Snow || - mode == Weather.WeatherMode.Thunder) return 1f; - else return 0f; + @Inject(method = "getRainGradient", at = @At("HEAD"), cancellable = true) + private void injectGetRainGradient(float tickProgress, CallbackInfoReturnable cir) { + if (Weather.INSTANCE.isEnabled()) { + Weather.WeatherMode mode = Weather.getWeatherMode(); + if (mode == Weather.WeatherMode.Rain || + mode == Weather.WeatherMode.Snow || + mode == Weather.WeatherMode.Thunder + ) cir.setReturnValue(1f); + else cir.setReturnValue(0f); + } } } diff --git a/src/main/resources/lambda.mixins.json b/src/main/resources/lambda.mixins.json index 253c6faba..4c1ec3587 100644 --- a/src/main/resources/lambda.mixins.json +++ b/src/main/resources/lambda.mixins.json @@ -43,6 +43,8 @@ "render.ChatScreenMixin", "render.ChunkOcclusionDataBuilderMixin", "render.DarknessEffectFogMixin", + "render.DebugHudMixin", + "render.DebugRendererMixin", "render.DrawContextMixin", "render.ElytraFeatureRendererMixin", "render.EntityRendererMixin", From ccdc721876d333cefc5045a88fcf73c6c8fd6b19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emy=20=F0=9F=92=9C?= Date: Tue, 27 Jan 2026 10:52:40 -0500 Subject: [PATCH 3/3] refactor and fixes --- .../baritone/BaritonePlayerContextMixin.java | 15 +++--- .../mixin/client/sound/SoundSystemMixin.java | 1 - .../mixin/entity/ClientPlayerEntityMixin.java | 15 +++--- .../com/lambda/mixin/entity/EntityMixin.java | 29 +++++++----- .../mixin/entity/LivingEntityMixin.java | 12 +++-- .../mixin/entity/PlayerEntityMixin.java | 10 ---- .../com/lambda/mixin/input/KeyboardMixin.java | 14 ------ .../com/lambda/mixin/input/MouseMixin.java | 3 +- .../mixin/network/ClientConnectionMixin.java | 1 - .../network/ClientLoginNetworkMixin.java | 1 - .../ClientPlayNetworkHandlerMixin.java | 4 +- .../render/ArmorFeatureRendererMixin.java | 2 - .../mixin/render/BackgroundRendererMixin.java | 46 ------------------- .../com/lambda/mixin/render/CameraMixin.java | 4 +- .../render/CapeFeatureRendererMixin.java | 3 -- .../mixin/render/ChatInputSuggestorMixin.java | 4 +- .../mixin/render/DarknessEffectFogMixin.java | 42 ----------------- .../lambda/mixin/render/DebugHudMixin.java | 29 ------------ .../mixin/render/DebugRendererMixin.java | 36 --------------- .../render/ElytraFeatureRendererMixin.java | 3 -- .../render/HeadFeatureRendererMixin.java | 2 - .../lambda/mixin/render/InGameHudMixin.java | 1 - .../render/LightmapTextureManagerMixin.java | 4 +- .../mixin/render/SplashOverlayMixin.java | 4 +- .../render/StatusEffectFogModifierMixin.java | 45 ++++++++++++++++++ .../render/WorldBorderRenderingMixin.java | 1 - .../mixin/render/WorldRendererMixin.java | 9 ++++ .../BlockEntityRenderDispatcherMixin.java | 2 +- .../mixin/world/AbstractBlockMixin.java | 3 -- .../world/BlockCollisionSpliteratorMixin.java | 4 +- .../lambda/mixin/world/ClientWorldMixin.java | 3 -- src/main/resources/lambda.mixins.json | 8 ++-- 32 files changed, 109 insertions(+), 251 deletions(-) delete mode 100644 src/main/java/com/lambda/mixin/render/BackgroundRendererMixin.java delete mode 100644 src/main/java/com/lambda/mixin/render/DarknessEffectFogMixin.java delete mode 100644 src/main/java/com/lambda/mixin/render/DebugHudMixin.java delete mode 100644 src/main/java/com/lambda/mixin/render/DebugRendererMixin.java create mode 100644 src/main/java/com/lambda/mixin/render/StatusEffectFogModifierMixin.java 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"} }