diff --git a/src/main/java/com/lambda/mixin/MinecraftClientMixin.java b/src/main/java/com/lambda/mixin/MinecraftClientMixin.java index 0526bab37..83ec7b6ef 100644 --- a/src/main/java/com/lambda/mixin/MinecraftClientMixin.java +++ b/src/main/java/com/lambda/mixin/MinecraftClientMixin.java @@ -29,6 +29,8 @@ import com.lambda.module.modules.player.InventoryMove; import com.lambda.module.modules.player.PacketMine; import com.lambda.util.WindowUtils; +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; @@ -49,7 +51,6 @@ 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(value = MinecraftClient.class, priority = Integer.MAX_VALUE) @@ -154,10 +155,10 @@ private void onScreenRemove(@Nullable Screen screen, CallbackInfo ci) { } } - @Redirect(method = "setScreen", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/KeyBinding;unpressAll()V")) - private void redirectUnPressAll() { + @WrapOperation(method = "setScreen", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/KeyBinding;unpressAll()V")) + private void redirectUnPressAll(Operation original) { if (!InventoryMove.getShouldMove()) { - KeyBinding.unpressAll(); + original.call(); return; } KeyBinding.KEYS_BY_ID.values().forEach(bind -> { @@ -167,20 +168,16 @@ private void redirectUnPressAll() { }); } - @Redirect(method = "doAttack()Z", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;swingHand(Lnet/minecraft/util/Hand;)V")) - private void redirectHandSwing(ClientPlayerEntity instance, Hand hand) { - if (this.crosshairTarget == null) return; - if (this.crosshairTarget.getType() != HitResult.Type.BLOCK || PacketMine.INSTANCE.isDisabled()) { - instance.swingHand(hand); - } + @WrapWithCondition(method = "doAttack()Z", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;swingHand(Lnet/minecraft/util/Hand;)V")) + private boolean redirectHandSwing(ClientPlayerEntity instance, Hand hand) { + if (this.crosshairTarget == null) return false; + return this.crosshairTarget.getType() != HitResult.Type.BLOCK || PacketMine.INSTANCE.isDisabled(); } - @Redirect(method = "doItemUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;isBreakingBlock()Z")) - boolean redirectMultiActon(ClientPlayerInteractionManager instance) { - if (instance == null) return true; - + @ModifyExpressionValue(method = "doItemUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;isBreakingBlock()Z")) + boolean redirectMultiActon(boolean original) { if (Interact.INSTANCE.isEnabled() && Interact.getMultiAction()) return false; - return instance.isBreakingBlock(); + return original; } @Inject(method = "doItemUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isRiding()Z")) diff --git a/src/main/java/com/lambda/mixin/entity/ClientPlayInteractionManagerMixin.java b/src/main/java/com/lambda/mixin/entity/ClientPlayInteractionManagerMixin.java index d3287d3c6..985115054 100644 --- a/src/main/java/com/lambda/mixin/entity/ClientPlayInteractionManagerMixin.java +++ b/src/main/java/com/lambda/mixin/entity/ClientPlayInteractionManagerMixin.java @@ -21,6 +21,7 @@ import com.lambda.event.events.InventoryEvent; import com.lambda.event.events.PlayerEvent; import com.lambda.interaction.managers.inventory.InventoryManager; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.network.ClientPlayerEntity; @@ -42,7 +43,6 @@ 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @@ -103,9 +103,9 @@ public void clickSlotHead(int syncId, int slotId, int button, SlotActionType act * } * } */ - @Redirect(method = "syncSelectedSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerInventory;getSelectedSlot()I")) - public int overrideSelectedSlotSync(PlayerInventory instance) { - return EventFlow.post(new InventoryEvent.HotbarSlot.Update(instance.getSelectedSlot())).getSlot(); + @ModifyExpressionValue(method = "syncSelectedSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerInventory;getSelectedSlot()I")) + public int overrideSelectedSlotSync(int original) { + return EventFlow.post(new InventoryEvent.HotbarSlot.Update(original)).getSlot(); } @Inject(method = "updateBlockBreakingProgress", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java b/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java index 0a37b5178..3b5a81c5d 100644 --- a/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java +++ b/src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java @@ -26,8 +26,10 @@ import com.lambda.interaction.managers.rotating.RotationManager; import com.lambda.module.modules.player.PortalGui; import com.lambda.module.modules.render.ViewModel; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.mojang.authlib.GameProfile; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; @@ -43,7 +45,6 @@ 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @@ -59,16 +60,16 @@ public ClientPlayerEntityMixin(ClientWorld world, GameProfile profile) { super(world, profile); } - @Redirect(method = "move", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/AbstractClientPlayerEntity;move(Lnet/minecraft/entity/MovementType;Lnet/minecraft/util/math/Vec3d;)V")) - private void emitMovementEvents(AbstractClientPlayerEntity instance, MovementType movementType, Vec3d movement) { - EventFlow.post(new MovementEvent.Player.Pre(movementType, movement)); - super.move(movementType, movement); - EventFlow.post(new MovementEvent.Player.Post(movementType, movement)); + @WrapOperation(method = "move", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/AbstractClientPlayerEntity;move(Lnet/minecraft/entity/MovementType;Lnet/minecraft/util/math/Vec3d;)V")) + private void emitMovementEvents(ClientPlayerEntity instance, MovementType movementType, Vec3d vec3d, Operation original) { + EventFlow.post(new MovementEvent.Player.Pre(movementType, vec3d)); + original.call(instance, movementType, vec3d); + EventFlow.post(new MovementEvent.Player.Post(movementType, vec3d)); } - @Redirect(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/input/Input;tick()V")) - void processMovement(Input input) { - input.tick(); + @WrapOperation(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/input/Input;tick()V")) + void processMovement(Input input, Operation original) { + original.call(input); RotationManager.processRotations(); RotationManager.redirectStrafeInputs(input); EventFlow.post(new MovementEvent.InputUpdate(input)); @@ -84,14 +85,14 @@ void sendLambdaMovement(CallbackInfo ci) { autoJumpEnabled = Lambda.getMc().options.getAutoJump().getValue(); } - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;sendSneakingPacket()V")) - void sendSneakingPacket(ClientPlayerEntity entity) { + @WrapOperation(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;sendSneakingPacket()V")) + void sendSneakingPacket(ClientPlayerEntity entity, Operation original) { PlayerPacketHandler.sendSneakPackets(); } - @Redirect(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isSprinting()Z")) - boolean isSprinting(ClientPlayerEntity entity) { - return EventFlow.post(new MovementEvent.Sprint(entity.isSprinting())).getSprint(); + @ModifyExpressionValue(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isSprinting()Z")) + boolean isSprinting(boolean original) { + return EventFlow.post(new MovementEvent.Sprint(original)).getSprint(); } @Inject(method = "isSneaking", at = @At(value = "HEAD"), cancellable = true) @@ -110,14 +111,14 @@ void onTick(Operation original) { EventFlow.post(TickEvent.Player.Post.INSTANCE); } - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;getYaw()F")) - float fixHeldItemYaw(ClientPlayerEntity instance) { - return Objects.requireNonNullElse(RotationManager.getHandYaw(), instance.getYaw()); + @WrapOperation(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;getYaw()F")) + float fixHeldItemYaw(ClientPlayerEntity instance, Operation original) { + return Objects.requireNonNullElse(RotationManager.getHandYaw(), original.call(instance)); } - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;getPitch()F")) - float fixHeldItemPitch(ClientPlayerEntity instance) { - return Objects.requireNonNullElse(RotationManager.getHandPitch(), instance.getPitch()); + @WrapOperation(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;getPitch()F")) + float fixHeldItemPitch(ClientPlayerEntity instance, Operation original) { + return Objects.requireNonNullElse(RotationManager.getHandPitch(), original.call(instance)); } @Inject(method = "swingHand", at = @At("HEAD"), cancellable = true) @@ -125,12 +126,12 @@ void onSwing(Hand hand, CallbackInfo ci) { if (EventFlow.post(new PlayerEvent.SwingHand(hand)).isCanceled()) ci.cancel(); } - @Redirect(method = "swingHand", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/AbstractClientPlayerEntity;swingHand(Lnet/minecraft/util/Hand;)V")) - private void adjustSwing(AbstractClientPlayerEntity instance, Hand hand) { + @WrapOperation(method = "swingHand", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/AbstractClientPlayerEntity;swingHand(Lnet/minecraft/util/Hand;)V")) + private void adjustSwing(ClientPlayerEntity instance, Hand hand, Operation original) { ViewModel viewModel = ViewModel.INSTANCE; if (!viewModel.isEnabled()) { - instance.swingHand(hand, false); + original.call(instance, hand); return; } @@ -157,9 +158,9 @@ public void damage(float health, CallbackInfo ci) { * } * } */ - @Redirect(method = "tickNausea", at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;")) - Screen keepScreensInPortal(MinecraftClient instance) { + @ModifyExpressionValue(method = "tickNausea", at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;")) + Screen keepScreensInPortal(Screen original) { if (PortalGui.INSTANCE.isEnabled()) return null; - else return client.currentScreen; + 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 a6a57a69a..3e438cc65 100644 --- a/src/main/java/com/lambda/mixin/entity/EntityMixin.java +++ b/src/main/java/com/lambda/mixin/entity/EntityMixin.java @@ -28,6 +28,8 @@ import com.lambda.util.math.Vec2d; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.entity.Entity; import net.minecraft.entity.MovementType; import net.minecraft.entity.data.TrackedData; @@ -36,7 +38,6 @@ 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Entity.class) @@ -51,12 +52,12 @@ public void move(MovementType movementType, Vec3d movement) { /** * Modifies the player yaw when there is an active rotation to apply the player velocity correctly */ - @Redirect(method = "updateVelocity", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getYaw()F")) - public float velocityYaw(Entity entity) { - if ((Object) this != Lambda.getMc().player) return getYaw(); + @WrapOperation(method = "updateVelocity", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getYaw()F")) + public float velocityYaw(Entity entity, Operation original) { + if ((Object) this != Lambda.getMc().player) return original.call(entity); Float y = RotationManager.getMovementYaw(); - if (y == null) return getYaw(); + if (y == null) return original.call(entity); return y; } @@ -69,10 +70,10 @@ public float velocityYaw(Entity entity) { * } * } */ - @Redirect(method = "getRotationVec", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getYaw(F)F")) - float fixDirectionYaw(Entity entity, float tickDelta) { + @WrapOperation(method = "getRotationVec", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getYaw(F)F")) + float fixDirectionYaw(Entity entity, float tickDelta, Operation original) { Vec2d rot = RotationManager.getRotationForVector(tickDelta); - if (entity != Lambda.getMc().player || rot == null) return entity.getYaw(tickDelta); + if (entity != Lambda.getMc().player || rot == null) return original.call(entity, tickDelta); return (float) rot.getX(); } @@ -85,10 +86,10 @@ float fixDirectionYaw(Entity entity, float tickDelta) { * } * } */ - @Redirect(method = "getRotationVec", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getPitch(F)F")) - float fixDirectionPitch(Entity entity, float tickDelta) { + @WrapOperation(method = "getRotationVec", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getPitch(F)F")) + float fixDirectionPitch(Entity entity, float tickDelta, Operation original) { Vec2d rot = RotationManager.getRotationForVector(tickDelta); - if (entity != Lambda.getMc().player || rot == null) return entity.getPitch(tickDelta); + if (entity != Lambda.getMc().player || rot == null) return original.call(entity, tickDelta); return (float) rot.getY(); } @@ -101,10 +102,10 @@ float fixDirectionPitch(Entity entity, float tickDelta) { * } * } */ - @Redirect(method = "getRotationVector()Lnet/minecraft/util/math/Vec3d;", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getYaw()F")) - float fixDirectionYaw2(Entity entity) { + @WrapOperation(method = "getRotationVector()Lnet/minecraft/util/math/Vec3d;", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getYaw()F")) + float fixDirectionYaw2(Entity entity, Operation original) { Vec2d rot = RotationManager.getRotationForVector(1.0); - if (entity != Lambda.getMc().player || rot == null) return entity.getYaw(); + if (entity != Lambda.getMc().player || rot == null) return original.call(entity); return (float) rot.getX(); } @@ -117,10 +118,10 @@ float fixDirectionYaw2(Entity entity) { * } * } */ - @Redirect(method = "getRotationVector()Lnet/minecraft/util/math/Vec3d;", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getPitch()F")) - float fixDirectionPitch2(Entity entity) { + @WrapOperation(method = "getRotationVector()Lnet/minecraft/util/math/Vec3d;", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getPitch()F")) + float fixDirectionPitch2(Entity entity, Operation original) { Vec2d rot = RotationManager.getRotationForVector(1.0); - if (entity != Lambda.getMc().player || rot == null) return entity.getPitch(); + if (entity != Lambda.getMc().player || rot == null) return original.call(entity); return (float) rot.getY(); } diff --git a/src/main/java/com/lambda/mixin/entity/FireworkRocketEntityMixin.java b/src/main/java/com/lambda/mixin/entity/FireworkRocketEntityMixin.java index c473298f6..0b1090840 100644 --- a/src/main/java/com/lambda/mixin/entity/FireworkRocketEntityMixin.java +++ b/src/main/java/com/lambda/mixin/entity/FireworkRocketEntityMixin.java @@ -18,19 +18,20 @@ package com.lambda.mixin.entity; import com.lambda.module.modules.movement.ElytraFly; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.projectile.FireworkRocketEntity; 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.Redirect; @Mixin(FireworkRocketEntity.class) public class FireworkRocketEntityMixin { - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;setVelocity(Lnet/minecraft/util/math/Vec3d;)V")) - private void redirectSetVelocity(LivingEntity shooter, Vec3d vec3d) { + @WrapOperation(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;setVelocity(Lnet/minecraft/util/math/Vec3d;)V")) + private void wrapSetVelocity(LivingEntity shooter, Vec3d vec3d, Operation original) { if (ElytraFly.getDoBoost()) { ElytraFly.boostRocket(); - } else shooter.setVelocity(vec3d); + } else original.call(shooter, vec3d); } } diff --git a/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java b/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java index 97180eaca..74ececd16 100644 --- a/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java +++ b/src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java @@ -25,6 +25,7 @@ import com.lambda.module.modules.render.ViewModel; import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.util.math.MathHelper; @@ -32,7 +33,11 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.*; +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.Slice; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(LivingEntity.class) @@ -95,10 +100,10 @@ void onTravelPost(Vec3d movementInput, CallbackInfo ci) { /** * Modifies the entity pitch with the current rotation when the entity is fall flying */ - @Redirect(method = "calcGlidingVelocity(Lnet/minecraft/util/math/Vec3d;)Lnet/minecraft/util/math/Vec3d;", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;getPitch()F")) - private float hookModifyFallFlyingPitch(LivingEntity entity) { + @WrapOperation(method = "calcGlidingVelocity(Lnet/minecraft/util/math/Vec3d;)Lnet/minecraft/util/math/Vec3d;", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;getPitch()F")) + private float hookModifyFallFlyingPitch(LivingEntity entity, Operation original) { Float pitch = RotationManager.getMovementPitch(); - if (entity != Lambda.getMc().player || pitch == null) return entity.getPitch(); + if (entity != Lambda.getMc().player || pitch == null) return original.call(entity); return pitch; } @@ -124,14 +129,14 @@ private float hookModifyFallFlyingPitch(LivingEntity entity) { * } * } */ - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;getYaw()F"), slice = @Slice(to = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;getYaw()F", ordinal = 1))) - private float rotBody(LivingEntity entity) { + @WrapOperation(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;getYaw()F"), slice = @Slice(to = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;getYaw()F", ordinal = 1))) + private float rotBody(LivingEntity entity, Operation original) { if (lambda$instance != Lambda.getMc().player) { - return entity.getYaw(); + return original.call(entity); } Float yaw = RotationManager.getHeadYaw(); - return (yaw == null) ? entity.getYaw() : yaw; + return (yaw == null) ? original.call(entity) : yaw; } /** @@ -155,14 +160,14 @@ private float rotBody(LivingEntity entity) { * } * } */ - @Redirect(method = "turnHead", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;getYaw()F")) - private float rotHead(LivingEntity entity) { + @WrapOperation(method = "turnHead", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;getYaw()F")) + private float rotHead(LivingEntity entity, Operation original) { if (lambda$instance != Lambda.getMc().player) { - return entity.getYaw(); + return original.call(entity); } Float yaw = RotationManager.getHeadYaw(); - return (yaw == null) ? entity.getYaw() : yaw; + return (yaw == null) ? original.call(entity) : yaw; } @ModifyConstant(method = "getHandSwingDuration", constant = @Constant(intValue = 6)) diff --git a/src/main/java/com/lambda/mixin/entity/PlayerEntityMixin.java b/src/main/java/com/lambda/mixin/entity/PlayerEntityMixin.java index 06ceb00e4..f6b7eeddc 100644 --- a/src/main/java/com/lambda/mixin/entity/PlayerEntityMixin.java +++ b/src/main/java/com/lambda/mixin/entity/PlayerEntityMixin.java @@ -21,11 +21,12 @@ import com.lambda.event.EventFlow; import com.lambda.event.events.MovementEvent; import com.lambda.interaction.managers.rotating.RotationManager; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.entity.player.PlayerEntity; 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(PlayerEntity.class) @@ -36,23 +37,23 @@ private void injectSafeWalk(CallbackInfoReturnable cir) { cir.setReturnValue(EventFlow.post(event).getClip()); } - @Redirect(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;getYaw()F")) - private float injectHeadYaw(PlayerEntity instance) { + @WrapOperation(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;getYaw()F")) + private float wrapHeadYaw(PlayerEntity instance, Operation original) { if ((Object) this != Lambda.getMc().player) { - return instance.getYaw(); + return original.call(instance); } Float yaw = RotationManager.getHeadYaw(); - return (yaw != null) ? yaw : instance.getYaw(); + return (yaw != null) ? yaw : original.call(instance); } - @Redirect(method = "attack", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;getYaw()F")) - private float injectAttackFix(PlayerEntity 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 instance.getYaw(); + return original.call(instance); } Float yaw = RotationManager.getMovementYaw(); - return (yaw != null) ? yaw : instance.getYaw(); + return (yaw != null) ? yaw : original.call(instance); } } diff --git a/src/main/java/com/lambda/mixin/input/KeyBindingMixin.java b/src/main/java/com/lambda/mixin/input/KeyBindingMixin.java index 21fd26578..87b8a524c 100644 --- a/src/main/java/com/lambda/mixin/input/KeyBindingMixin.java +++ b/src/main/java/com/lambda/mixin/input/KeyBindingMixin.java @@ -20,23 +20,23 @@ import com.lambda.module.modules.movement.Speed; import com.lambda.module.modules.movement.Sprint; import com.lambda.module.modules.movement.TargetStrafe; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import net.minecraft.client.option.KeyBinding; 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 java.util.Objects; @Mixin(KeyBinding.class) public class KeyBindingMixin { - @Inject(method = "isPressed", at = @At("HEAD"), cancellable = true) - void autoSprint(CallbackInfoReturnable cir) { + @ModifyReturnValue(method = "isPressed", at = @At("RETURN")) + boolean modifyIsPressed(boolean original) { KeyBinding instance = (KeyBinding) (Object) this; - if (!Objects.equals(instance.getTranslationKey(), "key.sprint")) return; + if (!Objects.equals(instance.getTranslationKey(), "key.sprint")) return original; - if (Sprint.INSTANCE.isEnabled()) cir.setReturnValue(true); - if (Speed.INSTANCE.isEnabled() && Speed.getMode() == Speed.Mode.GrimStrafe) cir.setReturnValue(true); - if (TargetStrafe.INSTANCE.isEnabled() && TargetStrafe.isActive()) cir.setReturnValue(true); + if (Sprint.INSTANCE.isEnabled()) return true; + if (Speed.INSTANCE.isEnabled() && Speed.getMode() == Speed.Mode.GrimStrafe) return true; + if (TargetStrafe.INSTANCE.isEnabled() && TargetStrafe.isActive()) return true; + return original; } } diff --git a/src/main/java/com/lambda/mixin/input/MouseMixin.java b/src/main/java/com/lambda/mixin/input/MouseMixin.java index f72f697b3..6fb6b6f31 100644 --- a/src/main/java/com/lambda/mixin/input/MouseMixin.java +++ b/src/main/java/com/lambda/mixin/input/MouseMixin.java @@ -21,15 +21,14 @@ import com.lambda.event.events.MouseEvent; import com.lambda.module.modules.render.Zoom; import com.lambda.util.math.Vec2d; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.client.Mouse; -import net.minecraft.client.option.GameOptions; import net.minecraft.client.option.SimpleOption; 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.Redirect; @Mixin(Mouse.class) public class MouseMixin { @@ -61,16 +60,15 @@ private void onCursorPos(long window, double x, double y, Operation origin original.call(window, x, y); } - @Redirect(method = "updateMouse", at = @At(value = "FIELD", target = "Lnet/minecraft/client/option/GameOptions;smoothCameraEnabled:Z")) - private boolean redirectSmoothCameraEnabled(GameOptions instance) { + @ModifyExpressionValue(method = "updateMouse", at = @At(value = "FIELD", target = "Lnet/minecraft/client/option/GameOptions;smoothCameraEnabled:Z")) + private boolean modifySmoothCameraEnabled(boolean original) { if (Zoom.INSTANCE.isEnabled() && Zoom.getSmoothMovement()) return true; - else return instance.smoothCameraEnabled; + else return original; } - @SuppressWarnings("rawtypes") - @Redirect(method = "updateMouse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/SimpleOption;getValue()Ljava/lang/Object;", ordinal = 0)) - private Object redirectGetValue(SimpleOption instance) { - if (Zoom.INSTANCE.isEnabled()) return ((Double) instance.getValue()) / Zoom.getTargetZoom(); - else return instance.getValue(); + @ModifyExpressionValue(method = "updateMouse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/SimpleOption;getValue()Ljava/lang/Object;", ordinal = 0)) + private Object modifyGetValue(Object original) { + if (Zoom.INSTANCE.isEnabled()) return ((Double) original) / Zoom.getTargetZoom(); + else return original; } } diff --git a/src/main/java/com/lambda/mixin/items/BarrierBlockMixin.java b/src/main/java/com/lambda/mixin/items/BarrierBlockMixin.java index 4c843ab07..b4775b72f 100644 --- a/src/main/java/com/lambda/mixin/items/BarrierBlockMixin.java +++ b/src/main/java/com/lambda/mixin/items/BarrierBlockMixin.java @@ -18,25 +18,25 @@ package com.lambda.mixin.items; import com.lambda.module.modules.render.BlockESP; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import net.minecraft.block.BarrierBlock; import net.minecraft.block.BlockRenderType; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; 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(BarrierBlock.class) public class BarrierBlockMixin { /** * Modifies barrier block render type to {@link BlockRenderType#MODEL} when {@link BlockESP} is enabled and {@link BlockESP#getBarrier()} is true */ - @Inject(method = "getRenderType", at = @At("RETURN"), cancellable = true) - private void getRenderType(BlockState state, CallbackInfoReturnable cir) { + @ModifyReturnValue(method = "getRenderType", at = @At("RETURN")) + private BlockRenderType modifyGetRenderType(BlockRenderType original, BlockState state) { if (BlockESP.INSTANCE.isEnabled() && BlockESP.getBarrier() && state.getBlock() == Blocks.BARRIER - ) cir.setReturnValue(BlockRenderType.MODEL); + ) return BlockRenderType.MODEL; + return original; } } diff --git a/src/main/java/com/lambda/mixin/network/ClientPlayNetworkHandlerMixin.java b/src/main/java/com/lambda/mixin/network/ClientPlayNetworkHandlerMixin.java index 09ddeba56..49da330b8 100644 --- a/src/main/java/com/lambda/mixin/network/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/com/lambda/mixin/network/ClientPlayNetworkHandlerMixin.java @@ -23,6 +23,7 @@ import com.lambda.interaction.managers.inventory.InventoryManager; import com.lambda.module.modules.movement.Velocity; 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.network.ClientPlayNetworkHandler; @@ -31,7 +32,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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ClientPlayNetworkHandler.class) @@ -74,9 +74,9 @@ private void onScreenHandlerSlotUpdate(ScreenHandlerSlotUpdateS2CPacket packet, * } * } */ - @Redirect(method = "onGameJoin(Lnet/minecraft/network/packet/s2c/play/GameJoinS2CPacket;)V", at = @At(value = "FIELD", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;displayedUnsecureChatWarning:Z", ordinal = 0)) - public boolean onServerMetadata(ClientPlayNetworkHandler clientPlayNetworkHandler) { - return NoRender.getNoChatVerificationToast() && NoRender.INSTANCE.isEnabled(); + @ModifyExpressionValue(method = "onGameJoin(Lnet/minecraft/network/packet/s2c/play/GameJoinS2CPacket;)V", at = @At(value = "FIELD", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;displayedUnsecureChatWarning:Z", ordinal = 0)) + public boolean onServerMetadata(boolean original) { + return (NoRender.getNoChatVerificationToast() && NoRender.INSTANCE.isEnabled()) || original; } /** diff --git a/src/main/java/com/lambda/mixin/render/BackgroundRendererMixin.java b/src/main/java/com/lambda/mixin/render/BackgroundRendererMixin.java index 1fe1c7192..f0f02d1d2 100644 --- a/src/main/java/com/lambda/mixin/render/BackgroundRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/BackgroundRendererMixin.java @@ -19,6 +19,7 @@ import com.lambda.module.modules.render.NoRender; import com.lambda.module.modules.render.WorldColors; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import net.minecraft.client.render.BackgroundRenderer; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; @@ -29,7 +30,6 @@ 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.List; @@ -46,29 +46,21 @@ * blue = (float)vec3d3.getZ(); * } */ -// FixMe: This crashes the game @Mixin(BackgroundRenderer.class) public class BackgroundRendererMixin { @Shadow @Final private static List FOG_MODIFIERS; - @Redirect(method = "getFogColor", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/Vec3d;getX()D")) - private static double redirectRed(Vec3d baseColor) { - return WorldColors.fogOfWarColor(baseColor).getX(); + /** + * Modifies the fog color returned from CubicSampler.sampleColor + */ + @ModifyExpressionValue(method = "getFogColor", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/CubicSampler;sampleColor(Lnet/minecraft/util/math/Vec3d;Lnet/minecraft/util/CubicSampler$RgbFetcher;)Lnet/minecraft/util/math/Vec3d;")) + private static Vec3d modifyFogColor(Vec3d original) { + return WorldColors.fogOfWarColor(original); } - @Redirect(method = "getFogColor", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/Vec3d;getY()D")) - private static double redirectGreen(Vec3d baseColor) { - return WorldColors.fogOfWarColor(baseColor).getY(); - } - - @Redirect(method = "getFogColor", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/Vec3d;getZ()D")) - private static double redirectBlue(Vec3d baseColor) { - return WorldColors.fogOfWarColor(baseColor).getZ(); - } - - @Redirect(method = "getFogColor", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/biome/Biome;getWaterFogColor()I")) - private static int redirectWaterFogColor(Biome biome) { - return WorldColors.waterFogColor(biome.getWaterFogColor()); + @ModifyExpressionValue(method = "getFogColor", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/biome/Biome;getWaterFogColor()I")) + private static int modifyWaterFogColor(int original) { + return WorldColors.waterFogColor(original); } @Inject(method = "getFogModifier(Lnet/minecraft/entity/Entity;F)Lnet/minecraft/client/render/BackgroundRenderer$StatusEffectFogModifier;", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/com/lambda/mixin/render/ChatHudMixin.java b/src/main/java/com/lambda/mixin/render/ChatHudMixin.java index cc0dcd7e0..17772b1f7 100644 --- a/src/main/java/com/lambda/mixin/render/ChatHudMixin.java +++ b/src/main/java/com/lambda/mixin/render/ChatHudMixin.java @@ -18,13 +18,14 @@ package com.lambda.mixin.render; import com.lambda.module.modules.client.LambdaMoji; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.ChatHud; import net.minecraft.text.OrderedText; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(ChatHud.class) public class ChatHudMixin { @@ -36,8 +37,8 @@ public class ChatHudMixin { * context.getMatrices().pop(); * } */ - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithShadow(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/OrderedText;III)I")) - int redirectRenderCall(DrawContext instance, TextRenderer textRenderer, OrderedText text, int x, int y, int color) { - return instance.drawTextWithShadow(textRenderer, LambdaMoji.INSTANCE.parse(text, x, y, color), 0, y, 16777215 + (color << 24)); + @WrapOperation(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithShadow(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/OrderedText;III)I")) + int wrapRenderCall(DrawContext instance, TextRenderer textRenderer, OrderedText text, int x, int y, int color, Operation original) { + return original.call(instance, textRenderer, LambdaMoji.INSTANCE.parse(text, x, y, color), 0, y, 16777215 + (color << 24)); } } diff --git a/src/main/java/com/lambda/mixin/render/ChatInputSuggestorMixin.java b/src/main/java/com/lambda/mixin/render/ChatInputSuggestorMixin.java index a254f8f7d..ae9578474 100644 --- a/src/main/java/com/lambda/mixin/render/ChatInputSuggestorMixin.java +++ b/src/main/java/com/lambda/mixin/render/ChatInputSuggestorMixin.java @@ -30,6 +30,8 @@ import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.command.CommandSource; import org.jetbrains.annotations.Nullable; +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; @@ -37,7 +39,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.Map; @@ -61,8 +62,8 @@ private boolean refreshModify(boolean showCompletions) { return CommandManager.INSTANCE.isCommand(textField.getText()); } - @Redirect(method = "refresh", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;getCommandDispatcher()Lcom/mojang/brigadier/CommandDispatcher;")) - private CommandDispatcher refreshRedirect(ClientPlayNetworkHandler instance) { + @WrapOperation(method = "refresh", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;getCommandDispatcher()Lcom/mojang/brigadier/CommandDispatcher;")) + private CommandDispatcher wrapRefresh(ClientPlayNetworkHandler instance, Operation> original) { return CommandManager.INSTANCE.currentDispatcher(textField.getText()); } diff --git a/src/main/java/com/lambda/mixin/render/InGameOverlayRendererMixin.java b/src/main/java/com/lambda/mixin/render/InGameOverlayRendererMixin.java index 8cdf4eecd..49412089b 100644 --- a/src/main/java/com/lambda/mixin/render/InGameOverlayRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/InGameOverlayRendererMixin.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.MinecraftClient; import net.minecraft.client.gui.hud.InGameOverlayRenderer; import net.minecraft.client.render.VertexConsumerProvider; @@ -25,15 +27,15 @@ 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.ModifyArg; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(InGameOverlayRenderer.class) public class InGameOverlayRendererMixin { - @Inject(method = "renderFireOverlay", at = @At("HEAD"), cancellable = true) - private static void onRenderFireOverlay(MatrixStack matrices, VertexConsumerProvider vertexConsumers, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoFireOverlay()) ci.cancel(); + @WrapMethod(method = "renderFireOverlay") + private static void wrapRenderFireOverlay(MatrixStack matrices, VertexConsumerProvider vertexConsumers, Operation original) { + if (!(NoRender.INSTANCE.isEnabled() && NoRender.getNoFireOverlay())) { + original.call(matrices, vertexConsumers); + } } @ModifyArg(method = "renderFireOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;translate(FFF)V"), index = 1) @@ -45,13 +47,17 @@ private static float onRenderFireOverlayTranslate(float x) { } } - @Inject(method = "renderUnderwaterOverlay", at = @At("HEAD"), cancellable = true) - private static void onRenderUnderwaterOverlay(MinecraftClient client, MatrixStack matrices, VertexConsumerProvider vertexConsumers, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoFluidOverlay()) ci.cancel(); + @WrapMethod(method = "renderUnderwaterOverlay") + private static void wrapRenderUnderwaterOverlay(MinecraftClient client, MatrixStack matrices, VertexConsumerProvider vertexConsumers, Operation original) { + if (!(NoRender.INSTANCE.isEnabled() && NoRender.getNoFluidOverlay())) { + original.call(client, matrices, vertexConsumers); + } } - @Inject(method = "renderInWallOverlay", at = @At("HEAD"), cancellable = true) - private static void onRenderInWallOverlay(Sprite sprite, MatrixStack matrices, VertexConsumerProvider vertexConsumers, CallbackInfo ci) { - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoInWall()) ci.cancel(); + @WrapMethod(method = "renderInWallOverlay") + private static void wrapRenderInWallOverlay(Sprite sprite, MatrixStack matrices, VertexConsumerProvider vertexConsumers, Operation original) { + if (!(NoRender.INSTANCE.isEnabled() && NoRender.getNoInWall())) { + original.call(sprite, matrices, vertexConsumers); + } } } diff --git a/src/main/java/com/lambda/mixin/render/LightmapTextureManagerMixin.java b/src/main/java/com/lambda/mixin/render/LightmapTextureManagerMixin.java index d036b20f8..849a9b297 100644 --- a/src/main/java/com/lambda/mixin/render/LightmapTextureManagerMixin.java +++ b/src/main/java/com/lambda/mixin/render/LightmapTextureManagerMixin.java @@ -20,6 +20,7 @@ import com.lambda.module.modules.render.Fullbright; import com.lambda.module.modules.render.NoRender; import com.lambda.module.modules.render.XRay; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.textures.GpuTexture; import net.minecraft.client.render.LightmapTextureManager; @@ -31,7 +32,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 java.util.OptionalInt; @@ -46,8 +46,9 @@ private void injectUpdate(CallbackInfo ci) { } } - @Inject(method = "getDarkness", at = @At("HEAD"), cancellable = true) - private void getDarknessFactor(LivingEntity entity, float factor, float tickProgress, CallbackInfoReturnable cir) { - if (NoRender.getNoDarkness() && NoRender.INSTANCE.isEnabled()) cir.setReturnValue(0.0f); + @ModifyReturnValue(method = "getDarkness", at = @At("RETURN")) + private float modifyGetDarkness(float original) { + if (NoRender.getNoDarkness() && NoRender.INSTANCE.isEnabled()) 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 9183ca3e7..59702b7a1 100644 --- a/src/main/java/com/lambda/mixin/render/SplashOverlayMixin.java +++ b/src/main/java/com/lambda/mixin/render/SplashOverlayMixin.java @@ -23,13 +23,14 @@ 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; 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.io.InputStream; @@ -47,8 +48,8 @@ private void onInit(CallbackInfo ci) { LOGO = Identifier.of("lambda", "textures/lambda_banner.png"); } - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Ljava/util/function/IntSupplier;getAsInt()I")) - private int redirectBrandArgb(IntSupplier originalSupplier) { + @WrapOperation(method = "render", at = @At(value = "INVOKE", target = "Ljava/util/function/IntSupplier;getAsInt()I")) + private int wrapBrandArgb(IntSupplier originalSupplier, Operation original) { return ColorHelper.getArgb(255, 35, 35, 35); } @@ -58,8 +59,8 @@ public LogoTextureMixin(Identifier location) { super(location); } - @Redirect(method = "loadContents", at = @At(value = "INVOKE", target = "Lnet/minecraft/resource/ResourceFactory;open(Lnet/minecraft/util/Identifier;)Ljava/io/InputStream;")) - InputStream loadTextureData(ResourceFactory instance, Identifier id) { + @WrapOperation(method = "loadContents", at = @At(value = "INVOKE", target = "Lnet/minecraft/resource/ResourceFactory;open(Lnet/minecraft/util/Identifier;)Ljava/io/InputStream;")) + InputStream wrapLoadTextureData(ResourceFactory instance, Identifier id, Operation original) { return LambdaResourceKt.getStream("textures/lambda_banner.png"); } } diff --git a/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java b/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java index fa990d320..d8eb33e08 100644 --- a/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java +++ b/src/main/java/com/lambda/mixin/render/WorldRendererMixin.java @@ -20,6 +20,7 @@ import com.lambda.module.modules.player.Freecam; import com.lambda.module.modules.render.CameraTweaks; import com.lambda.module.modules.render.NoRender; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import net.minecraft.client.render.Camera; import net.minecraft.client.render.WorldRenderer; import net.minecraft.entity.Entity; @@ -29,14 +30,13 @@ 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(WorldRenderer.class) public class WorldRendererMixin { - @Redirect(method = "getEntitiesToRender(Lnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/Frustum;Ljava/util/List;)Z", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/Camera;isThirdPerson()Z")) - private boolean renderIsThirdPerson(Camera camera) { - return Freecam.INSTANCE.isEnabled() || camera.isThirdPerson(); + @ModifyExpressionValue(method = "getEntitiesToRender(Lnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/Frustum;Ljava/util/List;)Z", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/Camera;isThirdPerson()Z")) + private boolean renderIsThirdPerson(boolean original) { + return Freecam.INSTANCE.isEnabled() || original; } @ModifyArg(method = "render(Lnet/minecraft/client/util/ObjectAllocator;Lnet/minecraft/client/render/RenderTickCounter;ZLnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/GameRenderer;Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;setupTerrain(Lnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/Frustum;ZZ)V"), index = 3) diff --git a/src/main/java/com/lambda/mixin/world/AbstractBlockMixin.java b/src/main/java/com/lambda/mixin/world/AbstractBlockMixin.java index 8f858e5a6..b01c654a2 100644 --- a/src/main/java/com/lambda/mixin/world/AbstractBlockMixin.java +++ b/src/main/java/com/lambda/mixin/world/AbstractBlockMixin.java @@ -18,19 +18,19 @@ package com.lambda.mixin.world; 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; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(AbstractBlock.class) public class AbstractBlockMixin { - @Inject(method = "getAmbientOcclusionLightLevel", at = @At("HEAD"), cancellable = true) - private void injectGetAmbientOcclusionLightLevel(BlockState state, BlockView world, BlockPos pos, CallbackInfoReturnable cir) { - if (XRay.INSTANCE.isEnabled()) cir.setReturnValue(1f); + @ModifyReturnValue(method = "getAmbientOcclusionLightLevel", at = @At("RETURN")) + private float modifyGetAmbientOcclusionLightLevel(float original) { + if (XRay.INSTANCE.isEnabled()) return 1f; + return original; } } diff --git a/src/main/java/com/lambda/mixin/world/BlockCollisionSpliteratorMixin.java b/src/main/java/com/lambda/mixin/world/BlockCollisionSpliteratorMixin.java index e7f2ab1e2..fbe3ee240 100644 --- a/src/main/java/com/lambda/mixin/world/BlockCollisionSpliteratorMixin.java +++ b/src/main/java/com/lambda/mixin/world/BlockCollisionSpliteratorMixin.java @@ -24,17 +24,18 @@ 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; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(BlockCollisionSpliterator.class) public abstract class BlockCollisionSpliteratorMixin> { - @Redirect(method = "computeNext", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/ShapeContext;getCollisionShape(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/CollisionView;Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/util/shape/VoxelShape;")) - private VoxelShape collisionShapeRedirect(ShapeContext instance, BlockState blockState, CollisionView collisionView, BlockPos blockPos) { - VoxelShape collisionShape = instance.getCollisionShape(blockState, collisionView, blockPos); + @WrapOperation(method = "computeNext", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/ShapeContext;getCollisionShape(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/CollisionView;Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/util/shape/VoxelShape;")) + private VoxelShape wrapCollisionShape(ShapeContext instance, BlockState blockState, CollisionView collisionView, BlockPos blockPos, Operation original) { + VoxelShape collisionShape = original.call(instance, blockState, collisionView, blockPos); WorldEvent.Collision event = EventFlow.post(new WorldEvent.Collision(blockPos, blockState, collisionShape)); return event.getShape(); } diff --git a/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java b/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java index ec117bbbb..d98e1efb3 100644 --- a/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java +++ b/src/main/java/com/lambda/mixin/world/ClientWorldMixin.java @@ -21,6 +21,7 @@ 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; @@ -30,7 +31,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(ClientWorld.class) public class ClientWorldMixin { @@ -46,20 +46,20 @@ private void onRemoveEntity(int entityId, Entity.RemovalReason removalReason, Ca EventFlow.post(new EntityEvent.Removal(entity, removalReason)); } - @Inject(method = "getCloudsColor", at = @At("HEAD"), cancellable = true) - private void getCloudsColorInject(float tickDelta, CallbackInfoReturnable cir) { + @ModifyReturnValue(method = "getCloudsColor", at = @At("RETURN")) + private int modifyGetCloudsColor(int original) { if (WorldColors.INSTANCE.isEnabled() && WorldColors.getCustomClouds()) { - int rgb = WorldColors.getCloudColor().getRGB() & 0xFFFFFF; - cir.setReturnValue(rgb); + return WorldColors.getCloudColor().getRGB() & 0xFFFFFF; } + return original; } - @Inject(method = "getSkyColor", at = @At("HEAD"), cancellable = true) - private void getSkyColorInject(Vec3d cameraPos, float tickDelta, CallbackInfoReturnable cir) { + @ModifyReturnValue(method = "getSkyColor", at = @At("RETURN")) + private int modifyGetSkyColor(int original) { if (WorldColors.INSTANCE.isEnabled() && WorldColors.getCustomSky()) { - int rgb = WorldColors.getSkyColor().getRGB() & 0xFFFFFF; - cir.setReturnValue(rgb); + return WorldColors.getSkyColor().getRGB() & 0xFFFFFF; } + return original; }