ProjectAres/PGM/src/main/java/tc/oc/pgm/regions/Intersection.java

60 lines
1.4 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 Intersection extends CompoundRegion {
public Intersection(Iterable<? extends Region> regions) {
super(regions);
}
public Intersection(Region... regions) {
super(Arrays.asList(regions));
}
public static Region of(Iterable<? extends Region> regions) {
return IterableUtils.unify(regions, EverywhereRegion.INSTANCE, Intersection::new);
}
public static Region of(Stream<? extends Region> regions) {
return of(regions.collect(Collectors.toList()));
}
public static Region of(Region... regions) {
return of(Arrays.asList(regions));
}
@Override
public boolean contains(Vector point) {
return allMatch(r -> r.contains(point));
}
@Override
public boolean isBlockBounded() {
return anyMatch(Region::isBlockBounded);
}
@Override
public boolean isEmpty() {
return anyMatch(Region::isEmpty);
}
@Override
public boolean isEverywhere() {
return allMatch(Region::isEverywhere);
}
@Override
public Cuboid getBounds() {
return regions.stream()
.map(Region::getBounds)
.reduce(Cuboid.unbounded(), Cuboid::intersect);
}
}