From 2ec6185c46e271bca1e01c7d561bfb540631c2a8 Mon Sep 17 00:00:00 2001 From: RK_01 <50594595+RaphiMC@users.noreply.github.com> Date: Wed, 12 Jul 2023 19:10:49 +0200 Subject: [PATCH] Fix <= 1.14 position y sign reading (#3381) --- .../api/type/types/minecraft/PositionType.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/PositionType.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/PositionType.java index fc1e4e066..ace052781 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/PositionType.java +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/PositionType.java @@ -28,26 +28,24 @@ import com.viaversion.viaversion.api.type.Type; import io.netty.buffer.ByteBuf; public class PositionType extends Type { + public PositionType() { super(Position.class); } @Override public Position read(ByteBuf buffer) { - long val = buffer.readLong(); - long x = (val >> 38); // signed - long y = (val >> 26) & 0xfff; // unsigned - // this shifting madness is used to preserve sign - long z = (val << 38) >> 38; // signed + final long val = buffer.readLong(); + final long x = (val >> 38); + final long y = (val << 26) >> 52; + final long z = (val << 38) >> 38; return new Position((int) x, (short) y, (int) z); } @Override public void write(ByteBuf buffer, Position object) { - buffer.writeLong((((long) object.x() & 0x3ffffff) << 38) - | ((((long) object.y()) & 0xfff) << 26) - | (object.z() & 0x3ffffff)); + buffer.writeLong((object.x() & 0X3FFFFFFL) << 38 | (object.y() & 0XFFFL) << 26 | (object.z() & 0X3FFFFFFL)); } public static final class OptionalPositionType extends OptionalType {