package tc.oc.commons.bukkit.util; import java.util.Objects; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.geometry.Vec3; import tc.oc.commons.core.util.Utils; public class ChunkPosition { final int x, z; public ChunkPosition(int x, int z) { this.x = x; this.z = z; } public int x() { return x; } public int z() { return z; } public Chunk getChunk(World world) { return world.getChunkAt(x, z); } @Override public final boolean equals(Object obj) { return Utils.equals(ChunkPosition.class, this, obj, that -> this.x() == that.x() && this.z() == that.z() ); } @Override public final int hashCode() { return Objects.hash(x(), z()); } @Override public String toString() { return getClass().getSimpleName() + "(" + x + ", " + z + ")"; } public static ChunkPosition of(Chunk chunk) { return new ChunkPosition(chunk.getX(), chunk.getZ()); } public static ChunkPosition ofBlock(int x, int y, int z) { return new ChunkPosition(x >> 4, z >> 4); } public static ChunkPosition ofBlock(Vec3 pos) { return ofBlock(pos.coarseX(), pos.coarseY(), pos.coarseZ()); } public static ChunkPosition ofBlock(Location loc) { return ofBlock(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); } public static ChunkPosition ofBlock(Block block) { return ofBlock(block.getX(), block.getY(), block.getZ()); } }