package net.minecraft.world.gen.structure; import com.google.common.base.Objects; import net.minecraft.nbt.NBTTagIntArray; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.Vec3i; 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; private static final String __OBFID = "CL_00000442"; public StructureBoundingBox() {} public StructureBoundingBox(int[] p_i43000_1_) { if (p_i43000_1_.length == 6) { this.minX = p_i43000_1_[0]; this.minY = p_i43000_1_[1]; this.minZ = p_i43000_1_[2]; this.maxX = p_i43000_1_[3]; this.maxY = p_i43000_1_[4]; this.maxZ = p_i43000_1_[5]; } } /** * 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); } public static StructureBoundingBox func_175897_a(int p_175897_0_, int p_175897_1_, int p_175897_2_, int p_175897_3_, int p_175897_4_, int p_175897_5_, int p_175897_6_, int p_175897_7_, int p_175897_8_, EnumFacing p_175897_9_) { switch (StructureBoundingBox.SwitchEnumFacing.field_175895_a[p_175897_9_.ordinal()]) { case 1: return new StructureBoundingBox(p_175897_0_ + p_175897_3_, p_175897_1_ + p_175897_4_, p_175897_2_ - p_175897_8_ + 1 + p_175897_5_, p_175897_0_ + p_175897_6_ - 1 + p_175897_3_, p_175897_1_ + p_175897_7_ - 1 + p_175897_4_, p_175897_2_ + p_175897_5_); case 2: return new StructureBoundingBox(p_175897_0_ + p_175897_3_, p_175897_1_ + p_175897_4_, p_175897_2_ + p_175897_5_, p_175897_0_ + p_175897_6_ - 1 + p_175897_3_, p_175897_1_ + p_175897_7_ - 1 + p_175897_4_, p_175897_2_ + p_175897_8_ - 1 + p_175897_5_); case 3: return new StructureBoundingBox(p_175897_0_ - p_175897_8_ + 1 + p_175897_5_, p_175897_1_ + p_175897_4_, p_175897_2_ + p_175897_3_, p_175897_0_ + p_175897_5_, p_175897_1_ + p_175897_7_ - 1 + p_175897_4_, p_175897_2_ + p_175897_6_ - 1 + p_175897_3_); case 4: return new StructureBoundingBox(p_175897_0_ + p_175897_5_, p_175897_1_ + p_175897_4_, p_175897_2_ + p_175897_3_, p_175897_0_ + p_175897_8_ - 1 + p_175897_5_, p_175897_1_ + p_175897_7_ - 1 + p_175897_4_, p_175897_2_ + p_175897_6_ - 1 + p_175897_3_); default: return new StructureBoundingBox(p_175897_0_ + p_175897_3_, p_175897_1_ + p_175897_4_, p_175897_2_ + p_175897_5_, p_175897_0_ + p_175897_6_ - 1 + p_175897_3_, p_175897_1_ + p_175897_7_ - 1 + p_175897_4_, p_175897_2_ + p_175897_8_ - 1 + p_175897_5_); } } public static StructureBoundingBox func_175899_a(int p_175899_0_, int p_175899_1_, int p_175899_2_, int p_175899_3_, int p_175899_4_, int p_175899_5_) { return new StructureBoundingBox(Math.min(p_175899_0_, p_175899_3_), Math.min(p_175899_1_, p_175899_4_), Math.min(p_175899_2_, p_175899_5_), Math.max(p_175899_0_, p_175899_3_), Math.max(p_175899_1_, p_175899_4_), Math.max(p_175899_2_, p_175899_5_)); } public StructureBoundingBox(StructureBoundingBox p_i2031_1_) { this.minX = p_i2031_1_.minX; this.minY = p_i2031_1_.minY; this.minZ = p_i2031_1_.minZ; this.maxX = p_i2031_1_.maxX; this.maxY = p_i2031_1_.maxY; this.maxZ = p_i2031_1_.maxZ; } public StructureBoundingBox(int p_i2032_1_, int p_i2032_2_, int p_i2032_3_, int p_i2032_4_, int p_i2032_5_, int p_i2032_6_) { this.minX = p_i2032_1_; this.minY = p_i2032_2_; this.minZ = p_i2032_3_; this.maxX = p_i2032_4_; this.maxY = p_i2032_5_; this.maxZ = p_i2032_6_; } public StructureBoundingBox(Vec3i p_i45626_1_, Vec3i p_i45626_2_) { this.minX = Math.min(p_i45626_1_.getX(), p_i45626_2_.getX()); this.minY = Math.min(p_i45626_1_.getY(), p_i45626_2_.getY()); this.minZ = Math.min(p_i45626_1_.getZ(), p_i45626_2_.getZ()); this.maxX = Math.max(p_i45626_1_.getX(), p_i45626_2_.getX()); this.maxY = Math.max(p_i45626_1_.getY(), p_i45626_2_.getY()); this.maxZ = Math.max(p_i45626_1_.getZ(), p_i45626_2_.getZ()); } public StructureBoundingBox(int p_i2033_1_, int p_i2033_2_, int p_i2033_3_, int p_i2033_4_) { this.minX = p_i2033_1_; this.minZ = p_i2033_2_; this.maxX = p_i2033_3_; this.maxZ = p_i2033_4_; this.minY = 1; this.maxY = 512; } /** * Discover if bounding box can fit within the current bounding box object. */ public boolean intersectsWith(StructureBoundingBox p_78884_1_) { return this.maxX >= p_78884_1_.minX && this.minX <= p_78884_1_.maxX && this.maxZ >= p_78884_1_.minZ && this.minZ <= p_78884_1_.maxZ && this.maxY >= p_78884_1_.minY && this.minY <= p_78884_1_.maxY; } /** * Discover if a coordinate is inside the bounding box area. */ public boolean intersectsWith(int p_78885_1_, int p_78885_2_, int p_78885_3_, int p_78885_4_) { return this.maxX >= p_78885_1_ && this.minX <= p_78885_3_ && this.maxZ >= p_78885_2_ && this.minZ <= p_78885_4_; } /** * Expands a bounding box's dimensions to include the supplied bounding box. */ public void expandTo(StructureBoundingBox p_78888_1_) { this.minX = Math.min(this.minX, p_78888_1_.minX); this.minY = Math.min(this.minY, p_78888_1_.minY); this.minZ = Math.min(this.minZ, p_78888_1_.minZ); this.maxX = Math.max(this.maxX, p_78888_1_.maxX); this.maxY = Math.max(this.maxY, p_78888_1_.maxY); this.maxZ = Math.max(this.maxZ, p_78888_1_.maxZ); } /** * Offsets the current bounding box by the specified coordinates. Args: x, y, z */ public void offset(int p_78886_1_, int p_78886_2_, int p_78886_3_) { this.minX += p_78886_1_; this.minY += p_78886_2_; this.minZ += p_78886_3_; this.maxX += p_78886_1_; this.maxY += p_78886_2_; this.maxZ += p_78886_3_; } public boolean func_175898_b(Vec3i p_175898_1_) { return p_175898_1_.getX() >= this.minX && p_175898_1_.getX() <= this.maxX && p_175898_1_.getZ() >= this.minZ && p_175898_1_.getZ() <= this.maxZ && p_175898_1_.getY() >= this.minY && p_175898_1_.getY() <= this.maxY; } public Vec3i func_175896_b() { return new Vec3i(this.maxX - this.minX, this.maxY - this.minY, this.maxZ - this.minZ); } /** * Get dimension of the bounding box in the x direction. */ public int getXSize() { return this.maxX - this.minX + 1; } /** * Get dimension of the bounding box in the y direction. */ public int getYSize() { return this.maxY - this.minY + 1; } /** * Get dimension of the bounding box in the z direction. */ public int getZSize() { return this.maxZ - this.minZ + 1; } public Vec3i func_180717_f() { return new BlockPos(this.minX + (this.maxX - this.minX + 1) / 2, this.minY + (this.maxY - this.minY + 1) / 2, this.minZ + (this.maxZ - this.minZ + 1) / 2); } public String toString() { return Objects.toStringHelper(this).add("x0", this.minX).add("y0", this.minY).add("z0", this.minZ).add("x1", this.maxX).add("y1", this.maxY).add("z1", this.maxZ).toString(); } public NBTTagIntArray func_151535_h() { return new NBTTagIntArray(new int[] {this.minX, this.minY, this.minZ, this.maxX, this.maxY, this.maxZ}); } static final class SwitchEnumFacing { static final int[] field_175895_a = new int[EnumFacing.values().length]; private static final String __OBFID = "CL_00001999"; static { try { field_175895_a[EnumFacing.NORTH.ordinal()] = 1; } catch (NoSuchFieldError var4) { ; } try { field_175895_a[EnumFacing.SOUTH.ordinal()] = 2; } catch (NoSuchFieldError var3) { ; } try { field_175895_a[EnumFacing.WEST.ordinal()] = 3; } catch (NoSuchFieldError var2) { ; } try { field_175895_a[EnumFacing.EAST.ordinal()] = 4; } catch (NoSuchFieldError var1) { ; } } } }