public CylinderRegion( String name, BlockRegion center, double radius, double height, boolean hollow) { super(name); this.values = new ArrayList<>(); if (!(center.isXInfinite() || center.isYInfinite() || center.isZInfinite())) { this.values = RegionUtil.cylinder(center, radius, height, hollow, false); } else if (center.isYInfinite() && !(center.isXInfinite() || center.isZInfinite())) { // Spork.get().getLogger().info("This @ method was called!"); this.values = RegionUtil.cylinder( new BlockRegion(center.getX() + "", center.getY() + "", center.getZ() + ""), radius, 1, hollow, false); this.infinite = true; } this.center = center; this.origin = new Vector(center.getX(), center.getY(), center.getZ()); this.radius = radius; this.height = height; this.hollow = hollow; }
@Override public boolean isInside(BlockRegion block) { Vector point = new Vector(block.getX(), block.getY(), block.getZ()); if (point.getY() >= origin.getY() && point.getY() <= origin.getY() + height) { return Math.pow(point.getX() - origin.getX(), 2.0D) + Math.pow(point.getZ() - origin.getZ(), 2.0D) < (radius * radius); } return false; /* if(infinite) { return matchesXZ(block); } BlockRegion check = new BlockRegion(block.getStringX(), values.get(0).getStringY(), block.getStringZ()); double max = check.getDoubleY() + height; for(BlockRegion region : getValues()) { if(region.isInside(check) && block.getDoubleY() <= max) { return true; } } return false; */ }
@Override public boolean isInside(BlockRegion block) { Vector point = new Vector(block.getX(), block.getY(), block.getZ()); return Math.pow(point.getX() - origin.getX(), 2.0D) + Math.pow(point.getZ() - origin.getZ(), 2.0D) < (radius * radius); }
public boolean isBelow(BlockRegion region) { if (infinite || !matchesXZ(region)) { return false; } CuboidRegion cube = new CuboidRegion( region, new BlockRegion(region.getX(), region.getY() + height, region.getZ())); return cube.isBelow(region); }
public boolean matchesXZ(BlockRegion region) { BlockRegion block = new BlockRegion(region.getX(), center.getY(), region.getZ()); CylinderRegion cyl = new CylinderRegion(center, radius, 1, hollow); return cyl.isInside(block); }