Package org.bukkit.util

# Class BoundingBox

java.lang.Object
org.bukkit.util.BoundingBox

All Implemented Interfaces:
  `Cloneable`, `ConfigurationSerializable`

public class BoundingBox extends Object implements Cloneable, ConfigurationSerializable
A mutable axis aligned bounding box (AABB).

This basically represents a rectangular box (specified by minimum and maximum corners) that can for example be used to describe the position and extents of an object (such as an entity, block, or rectangular region) in 3D space. Its edges and faces are parallel to the axes of the cartesian coordinate system.

The bounding box may be degenerate (one or more sides having the length 0).

Because bounding boxes are mutable, storing them long term may be dangerous if they get modified later. If you want to keep around a bounding box, it may be wise to call `clone()` in order to get a copy.

## Constructor Summary

Constructors
Constructor
Description
`BoundingBox()`
Creates a new (degenerate) bounding box with all corner coordinates at `0`.
`BoundingBox(double x1, double y1, double z1, double x2, double y2, double z2)`
Creates a new bounding box from the given corner coordinates.

## Method Summary

Modifier and Type
Method
Description
`@NotNull BoundingBox`
`clone()`
Creates a copy of this bounding box.
`boolean`
`contains(double x, double y, double z)`
Checks if this bounding box contains the specified position.
`boolean`
`contains(@NotNull BoundingBox other)`
Checks if this bounding box fully contains the given bounding box.
`boolean`
`contains(@NotNull Vector position)`
Checks if this bounding box contains the specified position.
`boolean`
`contains(@NotNull Vector min, @NotNull Vector max)`
Checks if this bounding box fully contains the bounding box that is defined by the given corners.
`@NotNull BoundingBox`
`copy(@NotNull BoundingBox other)`
Copies another bounding box.
`static @NotNull BoundingBox`
`deserialize(@NotNull Map<String,Object> args)`
`boolean`
`equals(Object obj)`
`@NotNull BoundingBox`
`expand(double expansion)`
Expands this bounding box uniformly by the given value in all directions.
`@NotNull BoundingBox`
`expand(double x, double y, double z)`
Expands this bounding box uniformly by the given values in both positive and negative directions.
`@NotNull BoundingBox`
`expand(double dirX, double dirY, double dirZ, double expansion)`
Expands this bounding box in the specified direction.
`@NotNull BoundingBox`
`expand(double negativeX, double negativeY, double negativeZ, double positiveX, double positiveY, double positiveZ)`
Expands this bounding box by the given values in the corresponding directions.
`@NotNull BoundingBox`
`expand(@NotNull BlockFace blockFace, double expansion)`
Expands this bounding box in the direction specified by the given block face.
`@NotNull BoundingBox`
`expand(@NotNull Vector expansion)`
Expands this bounding box uniformly by the given values in both positive and negative directions.
`@NotNull BoundingBox`
`expand(@NotNull Vector direction, double expansion)`
Expands this bounding box in the specified direction.
`@NotNull BoundingBox`
`expandDirectional(double dirX, double dirY, double dirZ)`
Expands this bounding box in the specified direction.
`@NotNull BoundingBox`
`expandDirectional(@NotNull Vector direction)`
Expands this bounding box in the specified direction.
`@NotNull Vector`
`getCenter()`
Gets the center of the bounding box.
`double`
`getCenterX()`
Gets the x coordinate of the center of the bounding box.
`double`
`getCenterY()`
Gets the y coordinate of the center of the bounding box.
`double`
`getCenterZ()`
Gets the z coordinate of the center of the bounding box.
`double`
`getHeight()`
Gets the height of the bounding box.
`@NotNull Vector`
`getMax()`
Gets the maximum corner as vector.
`double`
`getMaxX()`
Gets the maximum x value.
`double`
`getMaxY()`
Gets the maximum y value.
`double`
`getMaxZ()`
Gets the maximum z value.
`@NotNull Vector`
`getMin()`
Gets the minimum corner as vector.
`double`
`getMinX()`
Gets the minimum x value.
`double`
`getMinY()`
Gets the minimum y value.
`double`
`getMinZ()`
Gets the minimum z value.
`double`
`getVolume()`
Gets the volume of the bounding box.
`double`
`getWidthX()`
Gets the width of the bounding box in the x direction.
`double`
`getWidthZ()`
Gets the width of the bounding box in the z direction.
`int`
`hashCode()`
`@NotNull BoundingBox`
`intersection(@NotNull BoundingBox other)`
Resizes this bounding box to represent the intersection of this and the given bounding box.
`static @NotNull BoundingBox`
`of(@NotNull Block block)`
Creates a new 1x1x1 sized bounding box containing the given block.
`static @NotNull BoundingBox`
`of(@NotNull Block corner1, @NotNull Block corner2)`
Creates a new bounding box using the coordinates of the given blocks as corners.
`static @NotNull BoundingBox`
`of(@NotNull Location center, double x, double y, double z)`
Creates a new bounding box using the given center and extents.
`static @NotNull BoundingBox`
`of(@NotNull Location corner1, @NotNull Location corner2)`
Creates a new bounding box using the coordinates of the given locations as corners.
`static @NotNull BoundingBox`
`of(@NotNull Vector center, double x, double y, double z)`
Creates a new bounding box using the given center and extents.
`static @NotNull BoundingBox`
`of(@NotNull Vector corner1, @NotNull Vector corner2)`
Creates a new bounding box using the coordinates of the given vectors as corners.
`boolean`
`overlaps(@NotNull BoundingBox other)`
Checks if this bounding box overlaps with the given bounding box.
`boolean`
`overlaps(@NotNull Vector min, @NotNull Vector max)`
Checks if this bounding box overlaps with the bounding box that is defined by the given corners.
`@Nullable RayTraceResult`
`rayTrace(@NotNull Vector start, @NotNull Vector direction, double maxDistance)`
Calculates the intersection of this bounding box with the specified line segment.
`@NotNull BoundingBox`
`resize(double x1, double y1, double z1, double x2, double y2, double z2)`
Resizes this bounding box.
`@NotNull Map<String,Object>`
`serialize()`
Creates a Map representation of this class.
`@NotNull BoundingBox`
`shift(double shiftX, double shiftY, double shiftZ)`
Shifts this bounding box by the given amounts.
`@NotNull BoundingBox`
`shift(@NotNull Location shift)`
Shifts this bounding box by the given amounts.
`@NotNull BoundingBox`
`shift(@NotNull Vector shift)`
Shifts this bounding box by the given amounts.
`String`
`toString()`
`@NotNull BoundingBox`
`union(double posX, double posY, double posZ)`
Expands this bounding box to contain (or border) the specified position.
`@NotNull BoundingBox`
`union(@NotNull Location position)`
Expands this bounding box to contain (or border) the specified position.
`@NotNull BoundingBox`
`union(@NotNull BoundingBox other)`
Expands this bounding box to contain both this and the given bounding box.
`@NotNull BoundingBox`
`union(@NotNull Vector position)`
Expands this bounding box to contain (or border) the specified position.

### Methods inherited from class java.lang.Object

`finalize, getClass, notify, notifyAll, wait, wait, wait`

## Constructor Details

### BoundingBox

public BoundingBox()
Creates a new (degenerate) bounding box with all corner coordinates at `0`.

### BoundingBox

public BoundingBox(double x1, double y1, double z1, double x2, double y2, double z2)
Creates a new bounding box from the given corner coordinates.

Parameters:
  `x1` - the first corner's x value
  `y1` - the first corner's y value
  `z1` - the first corner's z value
  `x2` - the second corner's x value
  `y2` - the second corner's y value
  `z2` - the second corner's z value

## Method Details

### of

@NotNull public static @NotNull BoundingBox of(@NotNull @NotNull Vector corner1, @NotNull @NotNull Vector corner2)
Creates a new bounding box using the coordinates of the given vectors as corners.

Parameters:
  `corner1` - the first corner
  `corner2` - the second corner
Returns:
  the bounding box

### of

@NotNull public static @NotNull BoundingBox of(@NotNull @NotNull Location corner1, @NotNull @NotNull Location corner2)
Creates a new bounding box using the coordinates of the given locations as corners.

Parameters:
  `corner1` - the first corner
  `corner2` - the second corner
Returns:
  the bounding box

### of

@NotNull public static @NotNull BoundingBox of(@NotNull @NotNull Block corner1, @NotNull @NotNull Block corner2)
Creates a new bounding box using the coordinates of the given blocks as corners.

The bounding box will be sized to fully contain both blocks.

Parameters:
  `corner1` - the first corner block
  `corner2` - the second corner block
Returns:
  the bounding box

### of

@NotNull public static @NotNull BoundingBox of(@NotNull @NotNull Block block)
Creates a new 1x1x1 sized bounding box containing the given block.

Parameters:
  `block` - the block
Returns:
  the bounding box

### of

@NotNull public static @NotNull BoundingBox of(@NotNull @NotNull Vector center, double x, double y, double z)
Creates a new bounding box using the given center and extents.

Parameters:
  `center` - the center
  `x` - 1/2 the size of the bounding box along the x axis
  `y` - 1/2 the size of the bounding box along the y axis
  `z` - 1/2 the size of the bounding box along the z axis
Returns:
  the bounding box

### of

@NotNull public static @NotNull BoundingBox of(@NotNull @NotNull Location center, double x, double y, double z)
Creates a new bounding box using the given center and extents.

Parameters:
  `center` - the center
  `x` - 1/2 the size of the bounding box along the x axis
  `y` - 1/2 the size of the bounding box along the y axis
  `z` - 1/2 the size of the bounding box along the z axis
Returns:
  the bounding box

### resize

@NotNull public @NotNull BoundingBox resize(double x1, double y1, double z1, double x2, double y2, double z2)
Resizes this bounding box.

Parameters:
  `x1` - the first corner's x value
  `y1` - the first corner's y value
  `z1` - the first corner's z value
  `x2` - the second corner's x value
  `y2` - the second corner's y value
  `z2` - the second corner's z value
Returns:
  this bounding box (resized)

### getMinX

public double getMinX()
Gets the minimum x value.

Returns:
  the minimum x value

### getMinY

public double getMinY()
Gets the minimum y value.

Returns:
  the minimum y value

### getMinZ

public double getMinZ()
Gets the minimum z value.

Returns:
  the minimum z value

### getMin

@NotNull public @NotNull Vector getMin()
Gets the minimum corner as vector.

Returns:
  the minimum corner as vector

### getMaxX

public double getMaxX()
Gets the maximum x value.

Returns:
  the maximum x value

### getMaxY

public double getMaxY()
Gets the maximum y value.

Returns:
  the maximum y value

### getMaxZ

public double getMaxZ()
Gets the maximum z value.

Returns:
  the maximum z value

### getMax

@NotNull public @NotNull Vector getMax()
Gets the maximum corner as vector.

Returns:
  the maximum corner vector

### getWidthX

public double getWidthX()
Gets the width of the bounding box in the x direction.

Returns:
  the width in the x direction

### getWidthZ

public double getWidthZ()
Gets the width of the bounding box in the z direction.

Returns:
  the width in the z direction

### getHeight

public double getHeight()
Gets the height of the bounding box.

Returns:
  the height

### getVolume

public double getVolume()
Gets the volume of the bounding box.

Returns:
  the volume

### getCenterX

public double getCenterX()
Gets the x coordinate of the center of the bounding box.

Returns:
  the center's x coordinate

### getCenterY

public double getCenterY()
Gets the y coordinate of the center of the bounding box.

Returns:
  the center's y coordinate

### getCenterZ

public double getCenterZ()
Gets the z coordinate of the center of the bounding box.

Returns:
  the center's z coordinate

### getCenter

@NotNull public @NotNull Vector getCenter()
Gets the center of the bounding box.

Returns:
  the center

### copy

@NotNull public @NotNull BoundingBox copy(@NotNull @NotNull BoundingBox other)
Copies another bounding box.

Parameters:
  `other` - the other bounding box
Returns:
  this bounding box

### expand

@NotNull public @NotNull BoundingBox expand(double negativeX, double negativeY, double negativeZ, double positiveX, double positiveY, double positiveZ)
Expands this bounding box by the given values in the corresponding directions.

Negative values will shrink the bounding box in the corresponding direction. Shrinking will be limited to the point where the affected opposite faces would meet if the they shrank at uniform speeds.

Parameters:
  `negativeX` - the amount of expansion in the negative x direction
  `negativeY` - the amount of expansion in the negative y direction
  `negativeZ` - the amount of expansion in the negative z direction
  `positiveX` - the amount of expansion in the positive x direction
  `positiveY` - the amount of expansion in the positive y direction
  `positiveZ` - the amount of expansion in the positive z direction
Returns:
  this bounding box (now expanded)

### expand

@NotNull public @NotNull BoundingBox expand(double x, double y, double z)
Expands this bounding box uniformly by the given values in both positive and negative directions.

Negative values will shrink the bounding box. Shrinking will be limited to the bounding box's current size.

Parameters:
  `x` - the amount of expansion in both positive and negative x direction
  `y` - the amount of expansion in both positive and negative y direction
  `z` - the amount of expansion in both positive and negative z direction
Returns:
  this bounding box (now expanded)

### expand

@NotNull public @NotNull BoundingBox expand(@NotNull @NotNull Vector expansion)
Expands this bounding box uniformly by the given values in both positive and negative directions.

Negative values will shrink the bounding box. Shrinking will be limited to the bounding box's current size.

Parameters:
  `expansion` - the expansion values
Returns:
  this bounding box (now expanded)

### expand

@NotNull public @NotNull BoundingBox expand(double expansion)
Expands this bounding box uniformly by the given value in all directions.

A negative value will shrink the bounding box. Shrinking will be limited to the bounding box's current size.

Parameters:
  `expansion` - the amount of expansion
Returns:
  this bounding box (now expanded)

### expand

@NotNull public @NotNull BoundingBox expand(double dirX, double dirY, double dirZ, double expansion)
Expands this bounding box in the specified direction.

The magnitude of the direction will scale the expansion. A negative expansion value will shrink the bounding box in this direction. Shrinking will be limited to the bounding box's current size.

Parameters:
  `dirX` - the x direction component
  `dirY` - the y direction component
  `dirZ` - the z direction component
  `expansion` - the amount of expansion
Returns:
  this bounding box (now expanded)

### expand

@NotNull public @NotNull BoundingBox expand(@NotNull @NotNull Vector direction, double expansion)
Expands this bounding box in the specified direction.

The magnitude of the direction will scale the expansion. A negative expansion value will shrink the bounding box in this direction. Shrinking will be limited to the bounding box's current size.

Parameters:
  `direction` - the direction
  `expansion` - the amount of expansion
Returns:
  this bounding box (now expanded)

### expand

@NotNull public @NotNull BoundingBox expand(@NotNull @NotNull BlockFace blockFace, double expansion)
Expands this bounding box in the direction specified by the given block face.

A negative expansion value will shrink the bounding box in this direction. Shrinking will be limited to the bounding box's current size.

Parameters:
  `blockFace` - the block face
  `expansion` - the amount of expansion
Returns:
  this bounding box (now expanded)

### expandDirectional

@NotNull public @NotNull BoundingBox expandDirectional(double dirX, double dirY, double dirZ)
Expands this bounding box in the specified direction.

Negative values will expand the bounding box in the negative direction, positive values will expand it in the positive direction. The magnitudes of the direction components determine the corresponding amounts of expansion.

Parameters:
  `dirX` - the x direction component
  `dirY` - the y direction component
  `dirZ` - the z direction component
Returns:
  this bounding box (now expanded)

### expandDirectional

@NotNull public @NotNull BoundingBox expandDirectional(@NotNull @NotNull Vector direction)
Expands this bounding box in the specified direction.

Negative values will expand the bounding box in the negative direction, positive values will expand it in the positive direction. The magnitude of the direction vector determines the amount of expansion.

Parameters:
  `direction` - the direction and magnitude of the expansion
Returns:
  this bounding box (now expanded)

### union

@NotNull public @NotNull BoundingBox union(double posX, double posY, double posZ)
Expands this bounding box to contain (or border) the specified position.

Parameters:
  `posX` - the x position value
  `posY` - the y position value
  `posZ` - the z position value
Returns:
  this bounding box (now expanded)
See Also:
  - `contains(double, double, double)`

### union

@NotNull public @NotNull BoundingBox union(@NotNull @NotNull Vector position)
Expands this bounding box to contain (or border) the specified position.

Parameters:
  `position` - the position
Returns:
  this bounding box (now expanded)
See Also:
  - `contains(double, double, double)`

### union

@NotNull public @NotNull BoundingBox union(@NotNull @NotNull Location position)
Expands this bounding box to contain (or border) the specified position.

Parameters:
  `position` - the position
Returns:
  this bounding box (now expanded)
See Also:
  - `contains(double, double, double)`

### union

@NotNull public @NotNull BoundingBox union(@NotNull @NotNull BoundingBox other)
Expands this bounding box to contain both this and the given bounding box.

Parameters:
  `other` - the other bounding box
Returns:
  this bounding box (now expanded)

### intersection

@NotNull public @NotNull BoundingBox intersection(@NotNull @NotNull BoundingBox other)
Resizes this bounding box to represent the intersection of this and the given bounding box.

Parameters:
  `other` - the other bounding box
Returns:
  this bounding box (now representing the intersection)
Throws:
  `IllegalArgumentException` - if the bounding boxes don't overlap

### shift

@NotNull public @NotNull BoundingBox shift(double shiftX, double shiftY, double shiftZ)
Shifts this bounding box by the given amounts.

Parameters:
  `shiftX` - the shift in x direction
  `shiftY` - the shift in y direction
  `shiftZ` - the shift in z direction
Returns:
  this bounding box (now shifted)

### shift

@NotNull public @NotNull BoundingBox shift(@NotNull @NotNull Vector shift)
Shifts this bounding box by the given amounts.

Parameters:
  `shift` - the shift
Returns:
  this bounding box (now shifted)

### shift

@NotNull public @NotNull BoundingBox shift(@NotNull @NotNull Location shift)
Shifts this bounding box by the given amounts.

Parameters:
  `shift` - the shift
Returns:
  this bounding box (now shifted)

### overlaps

public boolean overlaps(@NotNull @NotNull BoundingBox other)
Checks if this bounding box overlaps with the given bounding box.

Bounding boxes that are only intersecting at the borders are not considered overlapping.

Parameters:
  `other` - the other bounding box
Returns:
  `true` if overlapping

### overlaps

public boolean overlaps(@NotNull @NotNull Vector min, @NotNull @NotNull Vector max)
Checks if this bounding box overlaps with the bounding box that is defined by the given corners.

Bounding boxes that are only intersecting at the borders are not considered overlapping.

Parameters:
  `min` - the first corner
  `max` - the second corner
Returns:
  `true` if overlapping

### contains

public boolean contains(double x, double y, double z)
Checks if this bounding box contains the specified position.

Positions exactly on the minimum borders of the bounding box are considered to be inside the bounding box, while positions exactly on the maximum borders are considered to be outside. This allows bounding boxes to reside directly next to each other with positions always only residing in exactly one of them.

Parameters:
  `x` - the position's x coordinates
  `y` - the position's y coordinates
  `z` - the position's z coordinates
Returns:
  `true` if the bounding box contains the position

### contains

public boolean contains(@NotNull @NotNull Vector position)
Checks if this bounding box contains the specified position.

Positions exactly on the minimum borders of the bounding box are considered to be inside the bounding box, while positions exactly on the maximum borders are considered to be outside. This allows bounding boxes to reside directly next to each other with positions always only residing in exactly one of them.

Parameters:
  `position` - the position
Returns:
  `true` if the bounding box contains the position

### contains

public boolean contains(@NotNull @NotNull BoundingBox other)
Checks if this bounding box fully contains the given bounding box.

Parameters:
  `other` - the other bounding box
Returns:
  `true` if the bounding box contains the given bounding box

### contains

public boolean contains(@NotNull @NotNull Vector min, @NotNull @NotNull Vector max)
Checks if this bounding box fully contains the bounding box that is defined by the given corners.

Parameters:
  `min` - the first corner
  `max` - the second corner
Returns:
  `true` if the bounding box contains the specified bounding box

### rayTrace

@Nullable public @Nullable RayTraceResult rayTrace(@NotNull @NotNull Vector start, @NotNull @NotNull Vector direction, double maxDistance)
Calculates the intersection of this bounding box with the specified line segment.

Intersections at edges and corners yield one of the affected block faces as hit result, but it is not defined which of them.

Parameters:
  `start` - the start position
  `direction` - the ray direction
  `maxDistance` - the maximum distance
Returns:
  the ray trace hit result, or `null` if there is no hit

### hashCode

public int hashCode()

Overrides:
  `hashCode` in class `Object`

### equals

public boolean equals(Object obj)

Overrides:
  `equals` in class `Object`

### toString

public String toString()

Overrides:
  `toString` in class `Object`

### clone

@NotNull public @NotNull BoundingBox clone()
Creates a copy of this bounding box.

Overrides:
  `clone` in class `Object`
Returns:
  the cloned bounding box

### serialize

@NotNull public @NotNull Map<String,Object> serialize()
Description copied from interface: `ConfigurationSerializable`
Creates a Map representation of this class.

This class must provide a method to restore this class, as defined in the `ConfigurationSerializable` interface javadocs.

Specified by:
  `serialize` in interface `ConfigurationSerializable`
Returns:
  Map containing the current state of this class

### deserialize

@NotNull public static @NotNull BoundingBox deserialize(@NotNull @NotNull Map<String,Object> args)