Skip to content

Instantly share code, notes, and snippets.

@tildejustin
Last active February 7, 2026 16:07
Show Gist options
  • Select an option

  • Save tildejustin/1b05239c1607bc9ceb2c3777231573eb to your computer and use it in GitHub Desktop.

Select an option

Save tildejustin/1b05239c1607bc9ceb2c3777231573eb to your computer and use it in GitHub Desktop.
sneak clutch fix
package dev.tildejustin.xrayfix.mixin;
import com.llamalad7.mixinextras.sugar.*;
import com.llamalad7.mixinextras.sugar.ref.LocalRef;
import dev.tildejustin.xrayfix.mixin.accessor.EntityAccessor;
import net.minecraft.server.network.*;
import net.minecraft.util.math.*;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.*;
@Mixin(ServerPlayNetworkHandler.class)
public abstract class ServerPlayNetworkHandlerMixin {
@Shadow
public ServerPlayerEntity player;
@ModifyArg(method = "onPlayerMove", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerPlayerEntity;move(Lnet/minecraft/entity/MovementType;Lnet/minecraft/util/math/Vec3d;)V"))
private Vec3d captureTargetMovementVector(Vec3d original, @Share("x") LocalRef<Double> sharedX, @Share("z") LocalRef<Double> sharedZ) {
sharedX.set(this.player.getX());
sharedZ.set(this.player.getZ());
// calculates the player x & z position that would be set by Player#move if the player wasn't sneaking
Vec3d movement = original, movementMultiplier = ((EntityAccessor) this.player).getMovementMultiplier();
if (movementMultiplier.lengthSquared() > 1e-7) {
movement = movement.multiply(movementMultiplier);
}
/* movement = this.adjustMovementForSneaking(movement, type); */
Vec3d vec3d = ((EntityAccessor) this.player).callAdjustMovementForCollisions(movement);
if (vec3d.lengthSquared() > 1e-7) {
Box box = this.player.getBoundingBox().offset(vec3d);
// Entity#moveToBoundingBoxCenter
sharedX.set((box.minX + box.maxX) / 2);
sharedZ.set((box.minZ + box.maxZ) / 2);
}
return original;
}
@ModifyVariable(
method = "onPlayerMove",
at = @At(value = "LOAD"),
ordinal = 11,
slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerPlayerEntity;move(Lnet/minecraft/entity/MovementType;Lnet/minecraft/util/math/Vec3d;)V"))
)
private double qAfterMove(
double original,
@Local(ordinal = 4) double h,
@Local(ordinal = 6) double j,
@Local(ordinal = 8) double n,
@Share("x") LocalRef<Double> sharedX,
@Share("z") LocalRef<Double> sharedZ) {
if (original <= 0.0625) return original;
if (player.noClip) return original;
if (!this.player.isSneaking() || this.player.isOnGround()) return original;
double x = sharedX.get(), z = sharedZ.get();
double q = (h - x) * (h - x) * n * n * (j - z) * (j - z);
System.out.println("Would have warped back when sneaking, trying movement without sneaking: " + q);
return q;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment