63 lines
1.6 KiB
Java
63 lines
1.6 KiB
Java
package tc.oc.pgm.regions;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Stream;
|
|
|
|
import org.bukkit.geometry.Cuboid;
|
|
import org.bukkit.util.Vector;
|
|
import tc.oc.commons.core.IterableUtils;
|
|
|
|
public class Union extends CompoundRegion {
|
|
public Union(Iterable<? extends Region> regions) {
|
|
super(regions);
|
|
}
|
|
|
|
public static Region of(Iterable<? extends Region> regions) {
|
|
return IterableUtils.<Region>unify(regions, EmptyRegion.INSTANCE, Union::new);
|
|
}
|
|
|
|
public static Region of(Region... regions) {
|
|
return of(Arrays.asList(regions));
|
|
}
|
|
|
|
public static Region of(Stream<? extends Region> regions) {
|
|
return of(regions.collect(Collectors.toList()));
|
|
}
|
|
|
|
@Override
|
|
public boolean contains(Vector point) {
|
|
return anyMatch(r -> r.contains(point));
|
|
}
|
|
|
|
@Override
|
|
public boolean isBlockBounded() {
|
|
return allMatch(Region::isBlockBounded);
|
|
}
|
|
|
|
@Override
|
|
public boolean isEmpty() {
|
|
return allMatch(Region::isEmpty);
|
|
}
|
|
|
|
@Override
|
|
public boolean isEverywhere() {
|
|
return anyMatch(Region::isEverywhere);
|
|
}
|
|
|
|
@Override
|
|
public Cuboid getBounds() {
|
|
return regions.stream()
|
|
.map(Region::getBounds)
|
|
.reduce(Cuboid.empty(), Cuboid::union);
|
|
}
|
|
|
|
public static Stream<Region> expand(Region region) {
|
|
if(region.isInstanceOf(Union.class)) {
|
|
return region.asInstanceOf(Union.class).regions().stream().flatMap(Union::expand);
|
|
} else {
|
|
return Stream.of(region);
|
|
}
|
|
}
|
|
}
|