Class BoundingBox
- All Implemented Interfaces:
Cloneable
,ConfigurationSerializable
public class BoundingBox extends Object implements Cloneable, ConfigurationSerializable
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 at0
.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 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(BoundingBox other)
Checks if this bounding box fully contains the given bounding box.boolean
contains(Vector position)
Checks if this bounding box contains the specified position.boolean
contains(Vector min, Vector max)
Checks if this bounding box fully contains the bounding box that is defined by the given corners.BoundingBox
copy(BoundingBox other)
Copies another bounding box.static BoundingBox
deserialize(Map<String,Object> args)
boolean
equals(Object obj)
BoundingBox
expand(double expansion)
Expands this bounding box uniformly by the given value in all directions.BoundingBox
expand(double x, double y, double z)
Expands this bounding box uniformly by the given values in both positive and negative directions.BoundingBox
expand(double dirX, double dirY, double dirZ, double expansion)
Expands this bounding box in the specified direction.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.BoundingBox
expand(BlockFace blockFace, double expansion)
Expands this bounding box in the direction specified by the given block face.BoundingBox
expand(Vector expansion)
Expands this bounding box uniformly by the given values in both positive and negative directions.BoundingBox
expand(Vector direction, double expansion)
Expands this bounding box in the specified direction.BoundingBox
expandDirectional(double dirX, double dirY, double dirZ)
Expands this bounding box in the specified direction.BoundingBox
expandDirectional(Vector direction)
Expands this bounding box in the specified direction.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.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.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()
BoundingBox
intersection(BoundingBox other)
Resizes this bounding box to represent the intersection of this and the given bounding box.static BoundingBox
of(Block block)
Creates a new 1x1x1 sized bounding box containing the given block.static BoundingBox
of(Block corner1, Block corner2)
Creates a new bounding box using the coordinates of the given blocks as corners.static BoundingBox
of(Location center, double x, double y, double z)
Creates a new bounding box using the given center and extents.static BoundingBox
of(Location corner1, Location corner2)
Creates a new bounding box using the coordinates of the given locations as corners.static BoundingBox
of(Vector center, double x, double y, double z)
Creates a new bounding box using the given center and extents.static BoundingBox
of(Vector corner1, Vector corner2)
Creates a new bounding box using the coordinates of the given vectors as corners.boolean
overlaps(BoundingBox other)
Checks if this bounding box overlaps with the given bounding box.boolean
overlaps(Vector min, Vector max)
Checks if this bounding box overlaps with the bounding box that is defined by the given corners.RayTraceResult
rayTrace(Vector start, Vector direction, double maxDistance)
Calculates the intersection of this bounding box with the specified line segment.BoundingBox
resize(double x1, double y1, double z1, double x2, double y2, double z2)
Resizes this bounding box.Map<String,Object>
serialize()
Creates a Map representation of this class.BoundingBox
shift(double shiftX, double shiftY, double shiftZ)
Shifts this bounding box by the given amounts.BoundingBox
shift(Location shift)
Shifts this bounding box by the given amounts.BoundingBox
shift(Vector shift)
Shifts this bounding box by the given amounts.String
toString()
BoundingBox
union(double posX, double posY, double posZ)
Expands this bounding box to contain (or border) the specified position.BoundingBox
union(Location position)
Expands this bounding box to contain (or border) the specified position.BoundingBox
union(BoundingBox other)
Expands this bounding box to contain both this and the given bounding box.BoundingBox
union(Vector position)
Expands this bounding box to contain (or border) the specified position.
-
Constructor Details
-
BoundingBox
public BoundingBox()Creates a new (degenerate) bounding box with all corner coordinates at0
. -
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 valuey1
- the first corner's y valuez1
- the first corner's z valuex2
- the second corner's x valuey2
- the second corner's y valuez2
- the second corner's z value
-
-
Method Details
-
of
Creates a new bounding box using the coordinates of the given vectors as corners.- Parameters:
corner1
- the first cornercorner2
- the second corner- Returns:
- the bounding box
-
of
Creates a new bounding box using the coordinates of the given locations as corners.- Parameters:
corner1
- the first cornercorner2
- the second corner- Returns:
- the bounding box
-
of
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 blockcorner2
- the second corner block- Returns:
- the bounding box
-
of
Creates a new 1x1x1 sized bounding box containing the given block.- Parameters:
block
- the block- Returns:
- the bounding box
-
of
Creates a new bounding box using the given center and extents.- Parameters:
center
- the centerx
- 1/2 the size of the bounding box along the x axisy
- 1/2 the size of the bounding box along the y axisz
- 1/2 the size of the bounding box along the z axis- Returns:
- the bounding box
-
of
Creates a new bounding box using the given center and extents.- Parameters:
center
- the centerx
- 1/2 the size of the bounding box along the x axisy
- 1/2 the size of the bounding box along the y axisz
- 1/2 the size of the bounding box along the z axis- Returns:
- the bounding box
-
resize
@NotNull public 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 valuey1
- the first corner's y valuez1
- the first corner's z valuex2
- the second corner's x valuey2
- the second corner's y valuez2
- 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
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
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
Gets the center of the bounding box.- Returns:
- the center
-
copy
Copies another bounding box.- Parameters:
other
- the other bounding box- Returns:
- this bounding box
-
expand
@NotNull public 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 directionnegativeY
- the amount of expansion in the negative y directionnegativeZ
- the amount of expansion in the negative z directionpositiveX
- the amount of expansion in the positive x directionpositiveY
- the amount of expansion in the positive y directionpositiveZ
- the amount of expansion in the positive z direction- Returns:
- this bounding box (now expanded)
-
expand
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 directiony
- the amount of expansion in both positive and negative y directionz
- the amount of expansion in both positive and negative z direction- Returns:
- this bounding box (now expanded)
-
expand
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
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
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 componentdirY
- the y direction componentdirZ
- the z direction componentexpansion
- the amount of expansion- Returns:
- this bounding box (now expanded)
-
expand
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 directionexpansion
- the amount of expansion- Returns:
- this bounding box (now expanded)
-
expand
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 faceexpansion
- the amount of expansion- Returns:
- this bounding box (now expanded)
-
expandDirectional
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 componentdirY
- the y direction componentdirZ
- the z direction component- Returns:
- this bounding box (now expanded)
-
expandDirectional
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
Expands this bounding box to contain (or border) the specified position.- Parameters:
posX
- the x position valueposY
- the y position valueposZ
- the z position value- Returns:
- this bounding box (now expanded)
- See Also:
contains(double, double, double)
-
union
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
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
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
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
Shifts this bounding box by the given amounts.- Parameters:
shiftX
- the shift in x directionshiftY
- the shift in y directionshiftZ
- the shift in z direction- Returns:
- this bounding box (now shifted)
-
shift
Shifts this bounding box by the given amounts.- Parameters:
shift
- the shift- Returns:
- this bounding box (now shifted)
-
shift
Shifts this bounding box by the given amounts.- Parameters:
shift
- the shift- Returns:
- this bounding box (now shifted)
-
overlaps
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
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 cornermax
- 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 coordinatesy
- the position's y coordinatesz
- the position's z coordinates- Returns:
true
if the bounding box contains the position
-
contains
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
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
Checks if this bounding box fully contains the bounding box that is defined by the given corners.- Parameters:
min
- the first cornermax
- the second corner- Returns:
true
if the bounding box contains the specified bounding box
-
rayTrace
@Nullable public RayTraceResult rayTrace(@NotNull Vector start, @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 positiondirection
- the ray directionmaxDistance
- the maximum distance- Returns:
- the ray trace hit result, or
null
if there is no hit
-
hashCode
public int hashCode() -
equals
-
toString
-
clone
Creates a copy of this bounding box. -
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 interfaceConfigurationSerializable
- Returns:
- Map containing the current state of this class
-
deserialize
-