package org.bukkit; import org.bukkit.block.Block; import org.bukkit.util.NumberConversions; import org.bukkit.util.Vector; /** * Represents a 3-dimensional position in a world */ public class Location implements Cloneable { private World world; private double x; private double y; private double z; private float pitch; private float yaw; /** * Constructs a new Location with the given coordinates * * @param world The world in which this location resides * @param x The x-coordinate of this new location * @param y The y-coordinate of this new location * @param z The z-coordinate of this new location */ public Location(final World world, final double x, final double y, final double z) { this(world, x, y, z, 0, 0); } /** * Constructs a new Location with the given coordinates and direction * * @param world The world in which this location resides * @param x The x-coordinate of this new location * @param y The y-coordinate of this new location * @param z The z-coordinate of this new location * @param yaw The absolute rotation on the x-plane, in degrees * @param pitch The absolute rotation on the y-plane, in degrees */ public Location(final World world, final double x, final double y, final double z, final float yaw, final float pitch) { this.world = world; this.x = x; this.y = y; this.z = z; this.pitch = pitch; this.yaw = yaw; } /** * Sets the world that this location resides in * * @param world New world that this location resides in */ public void setWorld(World world) { this.world = world; } /** * Gets the world that this location resides in * * @return World that contains this location */ public World getWorld() { return world; } /** * Gets the chunk at the represented location * * @return Chunk at the represented location */ public Chunk getChunk() { return world.getChunkAt(this); } /** * Gets the block at the represented location * * @return Block at the represented location */ public Block getBlock() { return world.getBlockAt(this); } /** * Sets the x-coordinate of this location * * @param x X-coordinate */ public void setX(double x) { this.x = x; } /** * Gets the x-coordinate of this location * * @return x-coordinate */ public double getX() { return x; } /** * Gets the floored value of the X component, indicating the block that * this location is contained with. * * @return block X */ public int getBlockX() { return locToBlock(x); } /** * Sets the y-coordinate of this location * * @param y y-coordinate */ public void setY(double y) { this.y = y; } /** * Gets the y-coordinate of this location * * @return y-coordinate */ public double getY() { return y; } /** * Gets the floored value of the Y component, indicating the block that * this location is contained with. * * @return block y */ public int getBlockY() { return locToBlock(y); } /** * Sets the z-coordinate of this location * * @param z z-coordinate */ public void setZ(double z) { this.z = z; } /** * Gets the z-coordinate of this location * * @return z-coordinate */ public double getZ() { return z; } /** * Gets the floored value of the Z component, indicating the block that * this location is contained with. * * @return block z */ public int getBlockZ() { return locToBlock(z); } /** * Sets the yaw of this location, measured in degrees. * * Increasing yaw values are the equivalent of turning to your * right-facing, increasing the scale of the next respective axis, and * decreasing the scale of the previous axis. * * @param yaw new rotation's yaw */ public void setYaw(float yaw) { this.yaw = yaw; } /** * Gets the yaw of this location, measured in degrees. * * Increasing yaw values are the equivalent of turning to your * right-facing, increasing the scale of the next respective axis, and * decreasing the scale of the previous axis. * * @return the rotation's yaw */ public float getYaw() { return yaw; } /** * Sets the pitch of this location, measured in degrees. *