/* * ChunkAPI * * Copyright (C) 2023-2025 FalsePattern, The MEGA Team, LegacyModdingMC contributors * All Rights Reserved * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, only version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ package com.falsepattern.chunk.internal; public class BlockPosUtil { private static final int NUM_X_BITS = 26; private static final int NUM_Z_BITS = 26; private static final int NUM_Y_BITS = 64 - NUM_X_BITS - NUM_Z_BITS; private static final long Y_MASK = (1L << NUM_Y_BITS) - 1L; private static final int Y_SHIFT = NUM_Z_BITS; private static final int X_SHIFT = Y_SHIFT + NUM_Y_BITS; private static final long Z_MASK = (1L << NUM_Z_BITS) - 1L; private static final long X_MASK = (1L << NUM_X_BITS) - 1L; public static long packToLong(int x, int y, int z) { return ((long) x & X_MASK) << X_SHIFT | ((long) y & Y_MASK) << Y_SHIFT | ((long) z & Z_MASK); } public static int getX(long packed) { return (int) (packed << 64 - X_SHIFT - NUM_X_BITS >> 64 - NUM_X_BITS); } public static int getY(long packed) { return (int) (packed << 64 - Y_SHIFT - NUM_Y_BITS >> 64 - NUM_Y_BITS); } public static int getZ(long packed) { return (int) (packed << 64 - NUM_Z_BITS >> 64 - NUM_Z_BITS); } }