mirror of
https://github.com/ViaVersion/ViaVersion.git
synced 2024-11-26 03:55:28 +01:00
Fix <= 1.14 position y sign reading (#3381)
This commit is contained in:
parent
b22907748a
commit
2ec6185c46
@ -28,26 +28,24 @@ import com.viaversion.viaversion.api.type.Type;
|
|||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
|
||||||
public class PositionType extends Type<Position> {
|
public class PositionType extends Type<Position> {
|
||||||
|
|
||||||
public PositionType() {
|
public PositionType() {
|
||||||
super(Position.class);
|
super(Position.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Position read(ByteBuf buffer) {
|
public Position read(ByteBuf buffer) {
|
||||||
long val = buffer.readLong();
|
final long val = buffer.readLong();
|
||||||
long x = (val >> 38); // signed
|
final long x = (val >> 38);
|
||||||
long y = (val >> 26) & 0xfff; // unsigned
|
final long y = (val << 26) >> 52;
|
||||||
// this shifting madness is used to preserve sign
|
final long z = (val << 38) >> 38;
|
||||||
long z = (val << 38) >> 38; // signed
|
|
||||||
|
|
||||||
return new Position((int) x, (short) y, (int) z);
|
return new Position((int) x, (short) y, (int) z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(ByteBuf buffer, Position object) {
|
public void write(ByteBuf buffer, Position object) {
|
||||||
buffer.writeLong((((long) object.x() & 0x3ffffff) << 38)
|
buffer.writeLong((object.x() & 0X3FFFFFFL) << 38 | (object.y() & 0XFFFL) << 26 | (object.z() & 0X3FFFFFFL));
|
||||||
| ((((long) object.y()) & 0xfff) << 26)
|
|
||||||
| (object.z() & 0x3ffffff));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class OptionalPositionType extends OptionalType<Position> {
|
public static final class OptionalPositionType extends OptionalType<Position> {
|
||||||
|
Loading…
Reference in New Issue
Block a user