package net.minecraft.world.gen.structure; public class StructureBoundingBox { /** The first x coordinate of a bounding box. */ public int minX; /** The first y coordinate of a bounding box. */ public int minY; /** The first z coordinate of a bounding box. */ public int minZ; /** The second x coordinate of a bounding box. */ public int maxX; /** The second y coordinate of a bounding box. */ public int maxY; /** The second z coordinate of a bounding box. */ public int maxZ; public StructureBoundingBox() {} /** * returns a new StructureBoundingBox with MAX values */ public static StructureBoundingBox getNewBoundingBox() { return new StructureBoundingBox(Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE); } /** * used to project a possible new component Bounding Box - to check if it would cut anything already spawned */ public static StructureBoundingBox getComponentToAddBoundingBox(int par0, int par1, int par2, int par3, int par4, int par5, int par6, int par7, int par8, int par9) { switch (par9) { case 0: return new StructureBoundingBox(par0 + par3, par1 + par4, par2 + par5, par0 + par6 - 1 + par3, par1 + par7 - 1 + par4, par2 + par8 - 1 + par5); case 1: return new StructureBoundingBox(par0 - par8 + 1 + par5, par1 + par4, par2 + par3, par0 + par5, par1 + par7 - 1 + par4, par2 + par6 - 1 + par3); case 2: return new StructureBoundingBox(par0 + par3, par1 + par4, par2 - par8 + 1 + par5, par0 + par6 - 1 + par3, par1 + par7 - 1 + par4, par2 + par5); case 3: return new StructureBoundingBox(par0 + par5, par1 + par4, par2 + par3, par0 + par8 - 1 + par5, par1 + par7 - 1 + par4, par2 + par6 - 1 + par3); default: return new StructureBoundingBox(par0 + par3, par1 + par4, par2 + par5, par0 + par6 - 1 + par3, par1 + par7 - 1 + par4, par2 + par8 - 1 + par5); } } public StructureBoundingBox(StructureBoundingBox par1StructureBoundingBox) { this.minX = par1StructureBoundingBox.minX; this.minY = par1StructureBoundingBox.minY; this.minZ = par1StructureBoundingBox.minZ; this.maxX = par1StructureBoundingBox.maxX; this.maxY = par1StructureBoundingBox.maxY; this.maxZ = par1StructureBoundingBox.maxZ; } public StructureBoundingBox(int par1, int par2, int par3, int par4, int par5, int par6) { this.minX = par1; this.minY = par2; this.minZ = par3; this.maxX = par4; this.maxY = par5; this.maxZ = par6; } public StructureBoundingBox(int par1, int par2, int par3, int par4) { this.minX = par1; this.minZ = par2; this.maxX = par3; this.maxZ = par4; this.minY = 1; this.maxY = 512; } /** * Returns whether the given bounding box intersects with this one. Args: structureboundingbox */ public boolean intersectsWith(StructureBoundingBox par1StructureBoundingBox) { return this.maxX >= par1StructureBoundingBox.minX && this.minX <= par1StructureBoundingBox.maxX && this.maxZ >= par1StructureBoundingBox.minZ && this.minZ <= par1StructureBoundingBox.maxZ && this.maxY >= par1StructureBoundingBox.minY && this.minY <= par1StructureBoundingBox.maxY; } /** * Discover if a coordinate is inside the bounding box area. */ public boolean intersectsWith(int par1, int par2, int par3, int par4) { return this.maxX >= par1 && this.minX <= par3 && this.maxZ >= par2 && this.minZ <= par4; } /** * Expands a bounding box's dimensions to include the supplied bounding box. */ public void expandTo(StructureBoundingBox par1StructureBoundingBox) { this.minX = Math.min(this.minX, par1StructureBoundingBox.minX); this.minY = Math.min(this.minY, par1StructureBoundingBox.minY); this.minZ = Math.min(this.minZ, par1StructureBoundingBox.minZ); this.maxX = Math.max(this.maxX, par1StructureBoundingBox.maxX); this.maxY = Math.max(this.maxY, par1StructureBoundingBox.maxY); this.maxZ = Math.max(this.maxZ, par1StructureBoundingBox.maxZ); } /** * Offsets the current bounding box by the specified coordinates. Args: x, y, z */ public void offset(int par1, int par2, int par3) { this.minX += par1; this.minY += par2; this.minZ += par3; this.maxX += par1; this.maxY += par2; this.maxZ += par3; } /** * Returns true if block is inside bounding box */ public boolean isVecInside(int par1, int par2, int par3) { return par1 >= this.minX && par1 <= this.maxX && par3 >= this.minZ && par3 <= this.maxZ && par2 >= this.minY && par2 <= this.maxY; } /** * Returns width of a bounding box */ public int getXSize() { return this.maxX - this.minX + 1; } /** * Returns height of a bounding box */ public int getYSize() { return this.maxY - this.minY + 1; } /** * Returns length of a bounding box */ public int getZSize() { return this.maxZ - this.minZ + 1; } public int getCenterX() { return this.minX + (this.maxX - this.minX + 1) / 2; } public int getCenterY() { return this.minY + (this.maxY - this.minY + 1) / 2; } public int getCenterZ() { return this.minZ + (this.maxZ - this.minZ + 1) / 2; } public String toString() { return "(" + this.minX + ", " + this.minY + ", " + this.minZ + "; " + this.maxX + ", " + this.maxY + ", " + this.maxZ + ")"; } }