From 22f46d14a941f78932539cfaa0446d73dc5ad33b Mon Sep 17 00:00:00 2001 From: BruceChen Date: Sat, 28 Mar 2026 02:16:04 +0800 Subject: [PATCH] Fix negative location error --- MinecraftClient/Protocol/Handlers/DataTypes.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/MinecraftClient/Protocol/Handlers/DataTypes.cs b/MinecraftClient/Protocol/Handlers/DataTypes.cs index 473757c1..78456c2d 100644 --- a/MinecraftClient/Protocol/Handlers/DataTypes.cs +++ b/MinecraftClient/Protocol/Handlers/DataTypes.cs @@ -1715,16 +1715,15 @@ namespace MinecraftClient.Protocol.Handlers public byte[] GetLocation(Location location) { byte[] locationBytes; + ulong x = (ulong)(int)Math.Floor(location.X) & 0x3FFFFFF; + ulong y = (ulong)(int)Math.Floor(location.Y) & 0xFFF; + ulong z = (ulong)(int)Math.Floor(location.Z) & 0x3FFFFFF; if (protocolversion >= Protocol18Handler.MC_1_14_Version) { - locationBytes = BitConverter.GetBytes(((((ulong)location.X) & 0x3FFFFFF) << 38) | - ((((ulong)location.Z) & 0x3FFFFFF) << 12) | - (((ulong)location.Y) & 0xFFF)); + locationBytes = BitConverter.GetBytes((x << 38) | (z << 12) | y); } else - locationBytes = BitConverter.GetBytes(((((ulong)location.X) & 0x3FFFFFF) << 38) | - ((((ulong)location.Y) & 0xFFF) << 26) | - (((ulong)location.Z) & 0x3FFFFFF)); + locationBytes = BitConverter.GetBytes((x << 38) | (y << 26) | z); Array.Reverse(locationBytes); //Endianness return locationBytes;