Files
Brewery/src/com/dre/brewery/utility/BoundingBox.java
T

60 lines
1.7 KiB
Java

package com.dre.brewery.utility;
import org.bukkit.Location;
import org.bukkit.block.Block;
public class BoundingBox {
private final int x1, y1, z1, x2, y2, z2;
public BoundingBox(int x1, int y1, int z1, int x2, int y2, int z2) {
this.x1 = Math.min(x1, x2);
this.y1 = Math.min(y1, y2);
this.z1 = Math.min(z1, z2);
this.x2 = Math.max(x2, x1);
this.y2 = Math.max(y2, y1);
this.z2 = Math.max(z2, z1);
}
public boolean contains(int x, int y, int z) {
return (x >= x1 && x <= x2) && (y >= y1 && y <= y2) && (z >= z1 && z <= z2);
}
public boolean contains(Location loc) {
return contains(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
}
public boolean contains(Block block) {
return contains(block.getX(), block.getY(), block.getZ());
}
public int area() {
return (x2 - x1 + 1) * (y2 - y1 + 1) * (z2 - z1 + 1);
}
public String serialize() {
return x1 + "," + y1 + "," + z1 + "," + x2 + "," + y2 + "," + z2;
}
public static BoundingBox fromPoints(int[] locations) {
if (locations.length % 3 != 0) throw new IllegalArgumentException("Locations has to be pairs of three");
int length = locations.length / 3;
int minx = Integer.MAX_VALUE,
miny = Integer.MAX_VALUE,
minz = Integer.MAX_VALUE,
maxx = Integer.MIN_VALUE,
maxy = Integer.MIN_VALUE,
maxz = Integer.MIN_VALUE;
for (int i = 0; i < length; i++) {
minx = Math.min(locations[i], minx);
miny = Math.min(locations[i + 1], miny);
minz = Math.min(locations[i + 2], minz);
maxx = Math.max(locations[i], maxx);
maxy = Math.max(locations[i + 1], maxy);
maxz = Math.max(locations[i + 2], maxz);
}
return new BoundingBox(minx, miny, minz, maxx, maxy, maxz);
}
}