{Params="MinX, MaxX, MinY, MaxY, MinZ, MaxZ",Return="cBoundingBox",Notes="Creates a new bounding box with the specified edges"},
{Params="{{Vector3d|Min}}, {{Vector3d|Max}}",Return="cBoundingBox",Notes="Creates a new bounding box with the coords specified as two vectors"},
{Params="{{Vector3d|Pos}}, Radius, Height",Return="cBoundingBox",Notes="Creates a new bounding box from the position given and radius (X/Z) and height. Radius is added from X/Z to calculate the maximum coords and subtracted from X/Z to get the minimum; minimum Y is set to Pos.y and maxumim Y to Pos.y plus Height. This corresponds with how {{cEntity|entities}} are represented in Minecraft."},
{Params="OtherBoundingBox",Return="cBoundingBox",Notes="Creates a new copy of the given bounding box. Same result can be achieved by using a simple assignment."},
},
CalcLineIntersection={Params="{{Vector3d|LineStart}}, {{Vector3d|LinePt2}}",Return="DoesIntersect, LineCoeff, Face",Notes="Calculates the intersection of a ray (half-line), given by two of its points, with the bounding box. Returns false if the line doesn't intersect the bounding box, or true, together with coefficient of the intersection (how much of the difference between the two ray points is needed to reach the intersection), and the face of the box which is intersected.<br /><b>TODO</b>: Lua binding for this function is wrong atm."},
DoesIntersect={Params="OtherBoundingBox",Return="bool",Notes="Returns true if the two bounding boxes have an intersection of nonzero volume."},
Expand={Params="ExpandX, ExpandY, ExpandZ",Return="",Notes="Expands this bounding box by the specified amount in each direction (so the box becomes larger by 2 * Expand in each axis)."},
IsInside=
{
{Params="{{Vector3d|Point}}",Return="bool",Notes="Returns true if the specified point is inside (including on the edge) of the box."},
{Params="PointX, PointY, PointZ",Return="bool",Notes="Returns true if the specified point is inside (including on the edge) of the box."},
{Params="OtherBoundingBox",Return="bool",Notes="Returns true if OtherBoundingBox is inside of this box."},
{Params="{{Vector3d|OtherBoxMin}}, {{Vector3d|OtherBoxMax}}",Return="bool",Notes="Returns true if the other bounding box, specified by its 2 corners, is inside of this box."},
},
Move=
{
{Params="OffsetX, OffsetY, OffsetZ",Return="",Notes="Moves the bounding box by the specified offset in each axis"},
{Params="{{Vector3d|Offset}}",Return="",Notes="Moves the bounding box by the specified offset in each axis"},
},
Union={Params="OtherBoundingBox",Return="cBoundingBox",Notes="Returns the smallest bounding box that contains both OtherBoundingBox and this bounding box. Note that unlike the strict geometrical meaning of \"union\", this operation actually returns a cBoundingBox."},
{Params="{{Vector3i|Point1}}, {{Vector3i|Point2}}",Return="cCuboid",Notes="Creates a new Cuboid object with the specified points as its corners."},
{Params="X, Y, Z",Return="cCuboid",Notes="Creates a new Cuboid object with the specified point as both its corners (the cuboid has a size of 1 in each direction)."},
{Params="X1, Y1, Z1, X2, Y2, Z2",Return="cCuboid",Notes="Creates a new Cuboid object with the specified points as its corners."},
DifX={Params="",Return="number",Notes="Returns the difference between the two X coords (X-size minus 1). Assumes sorted."},
DifY={Params="",Return="number",Notes="Returns the difference between the two Y coords (Y-size minus 1). Assumes sorted."},
DifZ={Params="",Return="number",Notes="Returns the difference between the two Z coords (Z-size minus 1). Assumes sorted."},
DoesIntersect={Params="OtherCuboid",Return="bool",Notes="Returns true if this cuboid has at least one voxel in common with OtherCuboid. Note that edges are considered inclusive. Assumes both sorted."},
Expand={Params="SubMinX, AddMaxX, SubMinY, AddMaxY, SubMinZ, AddMaxZ",Return="",Notes="Expands the cuboid by the specified amount in each direction. Works on unsorted cuboids as well. NOTE: this function doesn't check for underflows."},
GetVolume={Params="",Return="number",Notes="Returns the volume of the cuboid, in blocks. Note that the volume considers both coords inclusive. Works on unsorted cuboids, too."},
IsCompletelyInside={Params="OuterCuboid",Return="bool",Notes="Returns true if this cuboid is completely inside (in all directions) in OuterCuboid. Assumes both sorted."},
IsInside=
{
{Params="X, Y, Z",Return="bool",Notes="Returns true if the specified point (integral coords) is inside this cuboid. Assumes sorted."},
{Params="{{Vector3i|Point}}",Return="bool",Notes="Returns true if the specified point (integral coords) is inside this cuboid. Assumes sorted."},
{Params="{{Vector3d|Point}}",Return="bool",Notes="Returns true if the specified point (floating-point coords) is inside this cuboid. Assumes sorted."},
},
IsSorted={Params="",Return="bool",Notes="Returns true if this cuboid is sorted"},
Move={Params="OffsetX, OffsetY, OffsetZ",Return="",Notes="Adds the specified offsets to each respective coord, effectively moving the Cuboid. Sort-state is ignored and preserved."},
Trace={Params="{{cWorld}}, Callbacks, StartX, StartY, StartZ, EndX, EndY, EndZ",Return="bool",Notes="(STATIC) Performs the trace on the specified line. Returns true if the entire trace was processed (no callback returned true)"},
{Params="{{Vector3f}}",Return="Vector3d",Notes="Creates a new Vector3d object by copying the coords from the given Vector3f."},
{Params="",Return="Vector3d",Notes="Creates a new Vector3d object with all its coords set to 0."},
{Params="X, Y, Z",Return="Vector3d",Notes="Creates a new Vector3d object with its coords set to the specified values."},
},
operator_div={Params="number",Return="Vector3d",Notes="Returns a new Vector3d with each coord divided by the specified number."},
operator_mul={Params="number",Return="Vector3d",Notes="Returns a new Vector3d with each coord multiplied."},
operator_sub={Params="Vector3d",Return="Vector3d",Notes="Returns a new Vector3d containing the difference between this object and the specified vector."},
operator_plus={Params="Vector3d",Return="Vector3d",Notes="Returns a new Vector3d containing the sum of this vector and the specified vector"},
Cross={Params="Vector3d",Return="Vector3d",Notes="Returns a new Vector3d that is a {{http://en.wikipedia.org/wiki/Cross_product|cross product}} of this vector and the specified vector."},
Dot={Params="Vector3d",Return="number",Notes="Returns the dot product of this vector and the specified vector."},
Equals={Params="Vector3d",Return="bool",Notes="Returns true if this vector is exactly equal to the specified vector."},
Length={Params="",Return="number",Notes="Returns the (euclidean) length of the vector."},
LineCoeffToXYPlane={Params="Vector3d, Z",Return="number",Notes="Returns the coefficient for the line from the specified vector through this vector to reach the specified Z coord. The result satisfies the following equation: (this + Result * (Param - this)).z = Z. Returns the NO_INTERSECTION constant if there's no intersection."},
LineCoeffToXZPlane={Params="Vector3d, Y",Return="number",Notes="Returns the coefficient for the line from the specified vector through this vector to reach the specified Y coord. The result satisfies the following equation: (this + Result * (Param - this)).y = Y. Returns the NO_INTERSECTION constant if there's no intersection."},
LineCoeffToYZPlane={Params="Vector3d, X",Return="number",Notes="Returns the coefficient for the line from the specified vector through this vector to reach the specified X coord. The result satisfies the following equation: (this + Result * (Param - this)).x = X. Returns the NO_INTERSECTION constant if there's no intersection."},
Normalize={Params="",Return="",Notes="Changes this vector so that it keeps current direction but is exactly 1 unit long. FIXME: Fails for a zero vector."},
NormalizeCopy={Params="",Return="Vector3d",Notes="Returns a new vector that has the same directino as this but is exactly 1 unit long. FIXME: Fails for a zero vector."},
Set={Params="X, Y, Z",Return="",Notes="Sets all the coords in this object."},
SqrLength={Params="",Return="number",Notes="Returns the (euclidean) length of this vector, squared. This operation is slightly less computationally expensive than Length(), while it conserves some properties of Length(), such as comparison. "},
},
Constants=
{
EPS={Notes="The max difference between two coords for which the coords are assumed equal (in LineCoeffToXYPlane() et al)."},
NO_INTERSECTION={Notes="Special return value for the LineCoeffToXYPlane() et al meaning that there's no intersectino with the plane."},
},
Variables=
{
x={Type="number",Notes="The X coord of the vector."},
y={Type="number",Notes="The Y coord of the vector."},
z={Type="number",Notes="The Z coord of the vector."},
{Params="",Return="Vector3f",Notes="Creates a new Vector3f object with zero coords"},
{Params="x, y, z",Return="Vector3f",Notes="Creates a new Vector3f object with the specified coords"},
{Params="Vector3f",Return="Vector3f",Notes="Creates a new Vector3f object as a copy of the specified vector"},
{Params="{{Vector3d}}",Return="Vector3f",Notes="Creates a new Vector3f object as a copy of the specified {{Vector3d}}"},
{Params="{{Vector3i}}",Return="Vector3f",Notes="Creates a new Vector3f object as a copy of the specified {{Vector3i}}"},
},
operator_mul=
{
{Params="number",Return="Vector3f",Notes="Returns a new Vector3f object that has each of its coords multiplied by the specified number"},
{Params="Vector3f",Return="Vector3f",Notes="Returns a new Vector3f object that has each of its coords multiplied by the respective coord of the specified vector."},
},
operator_plus={Params="Vector3f",Return="Vector3f",Notes="Returns a new Vector3f object that holds the vector sum of this vector and the specified vector."},
operator_sub={Params="Vector3f",Return="Vector3f",Notes="Returns a new Vector3f object that holds the vector differrence between this vector and the specified vector."},
Cross={Params="Vector3f",Return="Vector3f",Notes="Returns a new Vector3f object that holds the cross product of this vector and the specified vector."},
Dot={Params="Vector3f",Return="number",Notes="Returns the dot product of this vector and the specified vector."},
Equals={Params="Vector3f",Return="bool",Notes="Returns true if the specified vector is exactly equal to this vector."},
Length={Params="",Return="number",Notes="Returns the (euclidean) length of this vector"},
Normalize={Params="",Return="",Notes="Normalizes this vector (makes it 1 unit long while keeping the direction). FIXME: Fails for zero vectors."},
NormalizeCopy={Params="",Return="Vector3f",Notes="Returns a copy of this vector that is normalized (1 unit long while keeping the same direction). FIXME: Fails for zero vectors."},
Set={Params="x, y, z",Return="",Notes="Sets all the coords of the vector at once."},
SqrLength={Params="",Return="number",Notes="Returns the (euclidean) length of this vector, squared. This operation is slightly less computationally expensive than Length(), while it conserves some properties of Length(), such as comparison."},
},
Variables=
{
x={Type="number",Notes="The X coord of the vector."},
y={Type="number",Notes="The Y coord of the vector."},
z={Type="number",Notes="The Z coord of the vector."},
Set={Params="x, y, z",Return="",Notes="Sets all the coords of the vector at once"},
SqrLength={Params="",Return="number",Notes="Returns the (euclidean) length of this vector, squared. This operation is slightly less computationally expensive than Length(), while it conserves some properties of Length(), such as comparison."},
},
Variables=
{
x={Type="number",Notes="The X coord of the vector."},
y={Type="number",Notes="The Y coord of the vector."},
z={Type="number",Notes="The Z coord of the vector."},