FastAsyncWorldedit/src/main/java/com/boydti/fawe/bukkit/regions/FaweMask.java

98 lines
3.7 KiB
Java

package com.boydti.fawe.bukkit.regions;
import java.util.Arrays;
import java.util.HashSet;
import org.bukkit.Location;
import com.boydti.fawe.object.RegionWrapper;
public class FaweMask {
private String description = null;
private Location position1;
private Location position2;
public FaweMask(final Location pos1, final Location pos2, final String id) {
if ((pos1 == null) || (pos2 == null)) {
throw new IllegalArgumentException("Locations cannot be null!");
}
if (pos1.getWorld().equals(pos2.getWorld()) == false) {
throw new IllegalArgumentException("Locations must be in the same world!");
}
description = id;
position1 = new Location(pos1.getWorld(), Math.min(pos1.getBlockX(), pos2.getBlockX()), 0, Math.min(pos1.getBlockZ(), pos2.getBlockZ()));
position2 = new Location(pos1.getWorld(), Math.max(pos1.getBlockX(), pos2.getBlockX()), 256, Math.max(pos1.getBlockZ(), pos2.getBlockZ()));
}
public FaweMask(final Location pos1, final Location pos2) {
if ((pos1 == null) || (pos2 == null)) {
throw new IllegalArgumentException("Locations cannot be null!");
}
if (pos1.getWorld().equals(pos2.getWorld()) == false) {
throw new IllegalArgumentException("Locations must be in the same world!");
}
position1 = new Location(pos1.getWorld(), Math.min(pos1.getBlockX(), pos2.getBlockX()), 0, Math.min(pos1.getBlockZ(), pos2.getBlockZ()));
position2 = new Location(pos1.getWorld(), Math.max(pos1.getBlockX(), pos2.getBlockX()), 256, Math.max(pos1.getBlockZ(), pos2.getBlockZ()));
}
public HashSet<RegionWrapper> getRegions() {
final Location lower = getLowerBound();
final Location upper = getUpperBound();
return new HashSet<>(Arrays.asList(new RegionWrapper(lower.getBlockX(), upper.getBlockX(), lower.getBlockZ(), upper.getBlockZ())));
}
public String getName() {
return description;
}
public Location getLowerBound() {
return position1;
}
public Location getUpperBound() {
return position2;
}
public void setBounds(final Location pos1, final Location pos2) {
if ((pos1 == null) || (pos2 == null)) {
throw new IllegalArgumentException("Locations cannot be null!");
}
if (pos1.getWorld().equals(pos2.getWorld()) == false) {
throw new IllegalArgumentException("Locations must be in the same world!");
}
position1 = new Location(pos1.getWorld(), Math.min(pos1.getBlockX(), pos2.getBlockX()), 0, Math.min(pos1.getBlockZ(), pos2.getBlockZ()));
position2 = new Location(pos1.getWorld(), Math.max(pos1.getBlockX(), pos2.getBlockX()), 256, Math.max(pos1.getBlockZ(), pos2.getBlockZ()));
}
public Location[] getBounds() {
final Location[] locations = { position1, position2 };
return locations;
}
public boolean contains(final Location loc) {
if (position1.getWorld().equals(loc.getWorld())) {
if (loc.getBlockX() < position1.getBlockX()) {
return false;
}
if (loc.getBlockX() > position2.getBlockX()) {
return false;
}
if (loc.getBlockZ() < position1.getBlockZ()) {
return false;
}
if (loc.getBlockZ() > position2.getBlockZ()) {
return false;
}
if (loc.getBlockY() < position1.getBlockY()) {
return false;
}
if (loc.getBlockY() > position2.getBlockY()) {
return false;
}
} else {
return false;
}
return true;
}
}