package tc.oc.pgm.regions; import java.util.Random; import org.bukkit.geometry.Cuboid; import org.bukkit.util.ImVector; import org.bukkit.util.Vector; public class CuboidRegion extends Region.Impl { private final Cuboid bounds; public CuboidRegion(Vector pos1, Vector pos2) { this.bounds = Cuboid.between(Vector.getMinimum(pos1, pos2), Vector.getMaximum(pos1, pos2)); } @Inspect public ImVector min() { return bounds.minimum(); } @Inspect public ImVector max() { return bounds.maximum(); } @Override public boolean contains(Vector point) { return this.bounds.contains(point); } @Override public boolean canGetRandom() { return bounds.isFinite(); } @Override public boolean isBlockBounded() { return bounds.isFinite(); } @Override public Cuboid getBounds() { return this.bounds; } @Override public Vector getRandom(Random random) { if(this.bounds.isEmpty()) { throw new ArithmeticException("Region is empty"); } double x = this.randomRange(random, this.bounds.minimum().getX(), this.bounds.maximum().getX()); double y = this.randomRange(random, this.bounds.minimum().getY(), this.bounds.maximum().getY()); double z = this.randomRange(random, this.bounds.minimum().getZ(), this.bounds.maximum().getZ()); return new Vector(x, y, z); } private double randomRange(Random random, double min, double max) { return (max - min) * random.nextDouble() + min; } }