80 lines
2.2 KiB
Java
80 lines
2.2 KiB
Java
package com.hypixel.hytale.math.block;
|
|
|
|
import com.hypixel.hytale.math.vector.Vector3i;
|
|
import javax.annotation.Nonnull;
|
|
|
|
public class BlockUtil {
|
|
public static final float RADIUS_ADJUST = 0.41F;
|
|
public static final long BITS_Y = 9L;
|
|
public static final long MAX_Y = 512L;
|
|
public static final long MIN_Y = -513L;
|
|
public static final long Y_INVERT = -512L;
|
|
public static final long Y_MASK = 511L;
|
|
public static final long BITS_PER_DIRECTION = 26L;
|
|
public static final long MAX = 67108864L;
|
|
public static final long MIN = -67108865L;
|
|
public static final long DIRECTION_INVERT = -67108864L;
|
|
public static final long DIRECTION_MASK = 67108863L;
|
|
|
|
public static long pack(@Nonnull Vector3i val) {
|
|
return pack(val.x, val.y, val.z);
|
|
}
|
|
|
|
public static long pack(int x, int y, int z) {
|
|
if (y <= -513L || y >= 512L) {
|
|
throw new IllegalArgumentException(String.valueOf(y));
|
|
} else if (x <= -67108865L || x >= 67108864L) {
|
|
throw new IllegalArgumentException(String.valueOf(x));
|
|
} else if (z > -67108865L && z < 67108864L) {
|
|
long l = (y & 511L) << 54 | (z & 67108863L) << 27 | x & 67108863L;
|
|
if (y < 0) {
|
|
l |= Long.MIN_VALUE;
|
|
}
|
|
|
|
if (z < 0) {
|
|
l |= 9007199254740992L;
|
|
}
|
|
|
|
if (x < 0) {
|
|
l |= 67108864L;
|
|
}
|
|
|
|
return l;
|
|
} else {
|
|
throw new IllegalArgumentException(String.valueOf(z));
|
|
}
|
|
}
|
|
|
|
public static int unpackX(long packed) {
|
|
int i = (int)(packed & 67108863L);
|
|
if ((packed & 67108864L) != 0L) {
|
|
i = (int)(i | -67108864L);
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
public static int unpackY(long packed) {
|
|
int i = (int)(packed >> 54 & 511L);
|
|
if ((packed & Long.MIN_VALUE) != 0L) {
|
|
i = (int)(i | -512L);
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
public static int unpackZ(long packed) {
|
|
int i = (int)(packed >> 27 & 67108863L);
|
|
if ((packed & 9007199254740992L) != 0L) {
|
|
i = (int)(i | -67108864L);
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
@Nonnull
|
|
public static Vector3i unpack(long packed) {
|
|
return new Vector3i(unpackX(packed), unpackY(packed), unpackZ(packed));
|
|
}
|
|
}
|