Set BL/TR corners inside BuildData
This commit is contained in:
parent
d732d8a551
commit
07ea1bc9c7
@ -746,36 +746,24 @@ public class Build extends Game
|
||||
|
||||
public void teleportPlayers(BuildData data)
|
||||
{
|
||||
Location lowestLoc;
|
||||
Location highestLoc;
|
||||
|
||||
// Find the lowest corner by comparing y-values
|
||||
if (data.CornerA.getY() < data.CornerB.getY()) {
|
||||
lowestLoc = data.CornerA;
|
||||
highestLoc = data.CornerB;
|
||||
} else {
|
||||
lowestLoc = data.CornerB;
|
||||
highestLoc = data.CornerA;
|
||||
}
|
||||
|
||||
// We're going to expand the boundaries of the corners
|
||||
// by some number of blocks which will give us a square
|
||||
// to teleport players on the edge of.
|
||||
Location expandedBottomLeft = lowestLoc.clone();
|
||||
Location expandedTopRight = highestLoc.clone();
|
||||
Location expandedBottomLeft = data.CornerBottomLeft.clone();
|
||||
Location expandedTopRight = data.CornerTopRight.clone();
|
||||
|
||||
// Move the corners to the same Y-Level
|
||||
expandedTopRight.setY(lowestLoc.getY());
|
||||
expandedTopRight.setY(data.CornerBottomLeft.getY());
|
||||
|
||||
// Set the x of bottom left and top right to be left/right
|
||||
// respectively...
|
||||
expandedBottomLeft.setX(Math.min(lowestLoc.getX(), highestLoc.getX()) - TELEPORT_BORDER_DISTANCE);
|
||||
expandedTopRight.setX(Math.max(lowestLoc.getX(), highestLoc.getX()) + TELEPORT_BORDER_DISTANCE);
|
||||
expandedBottomLeft.setX(data.CornerBottomLeft.getX() - TELEPORT_BORDER_DISTANCE);
|
||||
expandedTopRight.setX(data.CornerTopRight.getX() + TELEPORT_BORDER_DISTANCE);
|
||||
|
||||
// Set the z of bottom left and top right to be bottom/top
|
||||
// respectively...
|
||||
expandedBottomLeft.setZ(Math.min(lowestLoc.getZ(), highestLoc.getZ()) - TELEPORT_BORDER_DISTANCE);
|
||||
expandedTopRight.setZ(Math.max(lowestLoc.getZ(), highestLoc.getZ()) + TELEPORT_BORDER_DISTANCE);
|
||||
expandedBottomLeft.setZ(data.CornerBottomLeft.getZ() - TELEPORT_BORDER_DISTANCE);
|
||||
expandedTopRight.setZ(data.CornerBottomLeft.getZ() + TELEPORT_BORDER_DISTANCE);
|
||||
|
||||
// Now that we have the two corners of the square, get a list with all
|
||||
// the locations for the square's edge.
|
||||
|
@ -54,8 +54,8 @@ public class BuildData
|
||||
|
||||
public Location Spawn;
|
||||
|
||||
public Location CornerA;
|
||||
public Location CornerB;
|
||||
public Location CornerBottomLeft;
|
||||
public Location CornerTopRight;
|
||||
|
||||
public HashSet<Block> Blocks = new HashSet<Block>();
|
||||
|
||||
@ -85,10 +85,12 @@ public class BuildData
|
||||
{
|
||||
this(player, spawn);
|
||||
|
||||
CornerA = UtilAlg.findClosest(spawn, buildBorders);
|
||||
Location CornerA = UtilAlg.findClosest(spawn, buildBorders);
|
||||
buildBorders.remove(CornerA);
|
||||
CornerB = UtilAlg.findClosest(spawn, buildBorders);
|
||||
Location CornerB = UtilAlg.findClosest(spawn, buildBorders);
|
||||
buildBorders.remove(CornerB);
|
||||
|
||||
setCorners(CornerA, CornerB);
|
||||
}
|
||||
|
||||
public BuildData(GameTeam team, Location spawn, ArrayList<Location> buildBorders)
|
||||
@ -97,10 +99,43 @@ public class BuildData
|
||||
Team = team;
|
||||
Spawn = spawn;
|
||||
|
||||
CornerA = UtilAlg.findClosest(spawn, buildBorders);
|
||||
Location CornerA = UtilAlg.findClosest(spawn, buildBorders);
|
||||
buildBorders.remove(CornerA);
|
||||
CornerB = UtilAlg.findClosest(spawn, buildBorders);
|
||||
Location CornerB = UtilAlg.findClosest(spawn, buildBorders);
|
||||
buildBorders.remove(CornerB);
|
||||
|
||||
setCorners(CornerA, CornerB);
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes corners by setting
|
||||
* CornerBottomLeft to be the "bottom-left"
|
||||
* corner (lowest y-value, lowest x, and
|
||||
* lowest z) and CornerTopRight to be the
|
||||
* "top-right" corner (highest y-value,
|
||||
* highest x, and highest z)
|
||||
*/
|
||||
private void setCorners(Location CornerA, Location CornerB) {
|
||||
Location bottomLeft;
|
||||
Location topRight;
|
||||
|
||||
// Find the lowest corner by comparing y-values
|
||||
if (CornerA.getY() < CornerB.getY()) {
|
||||
bottomLeft = CornerA.clone();
|
||||
topRight = CornerB.clone();
|
||||
} else {
|
||||
bottomLeft = CornerB.clone();
|
||||
topRight = CornerA.clone();
|
||||
}
|
||||
|
||||
bottomLeft.setX(Math.min(CornerA.getX(), CornerB.getX()));
|
||||
topRight.setX(Math.max(CornerA.getX(), CornerB.getX()));
|
||||
|
||||
bottomLeft.setZ(Math.min(CornerA.getZ(), CornerB.getZ()));
|
||||
topRight.setZ(Math.min(CornerA.getZ(), CornerB.getZ()));
|
||||
|
||||
CornerBottomLeft = bottomLeft;
|
||||
CornerTopRight = topRight;
|
||||
}
|
||||
|
||||
public boolean addItem(Item item)
|
||||
@ -219,27 +254,27 @@ public class BuildData
|
||||
{
|
||||
if (!block.getWorld().getName().equals(Spawn.getWorld().getName())) return false;
|
||||
|
||||
return inBuildArea(block.getLocation().add(0.5, 0, 0.5).toVector());
|
||||
return inBuildArea(block.getLocation().toVector());
|
||||
}
|
||||
|
||||
public boolean inBuildArea(Vector vec)
|
||||
{
|
||||
if (vec.getX() < Math.min(CornerA.getBlockX(), CornerB.getBlockX()))
|
||||
if (vec.getBlockX() <= CornerBottomLeft.getBlockX())
|
||||
return false;
|
||||
|
||||
if (vec.getY() < Math.min(CornerA.getBlockY(), CornerB.getBlockY()))
|
||||
if (vec.getBlockY() < CornerBottomLeft.getBlockY())
|
||||
return false;
|
||||
|
||||
if (vec.getZ() < Math.min(CornerA.getBlockZ(), CornerB.getBlockZ()))
|
||||
if (vec.getBlockZ() < CornerBottomLeft.getBlockZ())
|
||||
return false;
|
||||
|
||||
if (vec.getX() > Math.max(CornerA.getBlockX(), CornerB.getBlockX()))
|
||||
if (vec.getBlockX() > CornerTopRight.getBlockX())
|
||||
return false;
|
||||
|
||||
if (vec.getY() > Math.max(CornerA.getBlockY(), CornerB.getBlockY()))
|
||||
if (vec.getBlockY() > CornerTopRight.getBlockY())
|
||||
return false;
|
||||
|
||||
if (vec.getZ() > Math.max(CornerA.getBlockZ(), CornerB.getBlockZ()))
|
||||
if (vec.getBlockZ() > CornerTopRight.getBlockZ())
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@ -391,29 +426,29 @@ public class BuildData
|
||||
//Set everything to air first to prevent the forming of obby.
|
||||
if (mat == Material.LAVA || mat == Material.WATER)
|
||||
{
|
||||
int y = Math.min(CornerA.getBlockY(), CornerB.getBlockY()) - 1;
|
||||
for (int x= Math.min(CornerA.getBlockX(), CornerB.getBlockX()) ; x <= Math.max(CornerA.getBlockX(), CornerB.getBlockX()) ; x++)
|
||||
int y = CornerBottomLeft.getBlockY() - 1;
|
||||
for (int x = CornerBottomLeft.getBlockX(); x <= CornerTopRight.getBlockX(); x++)
|
||||
{
|
||||
for (int z= Math.min(CornerA.getBlockZ(), CornerB.getBlockZ()) ; z <= Math.max(CornerA.getBlockZ(), CornerB.getBlockZ()) ; z++)
|
||||
for (int z = CornerBottomLeft.getBlockZ(); z <= CornerTopRight.getBlockZ(); z++)
|
||||
{
|
||||
MapUtil.QuickChangeBlockAt(player.getWorld(), x, y, z, Material.AIR, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int x = Math.min(CornerA.getBlockX(), CornerB.getBlockX());
|
||||
int y = Math.min(CornerA.getBlockY(), CornerB.getBlockY()) - 1;
|
||||
int z = Math.min(CornerA.getBlockZ(), CornerB.getBlockZ());
|
||||
int x = CornerBottomLeft.getBlockX();
|
||||
int y = CornerBottomLeft.getBlockY() - 1;
|
||||
int z = CornerBottomLeft.getBlockZ();
|
||||
|
||||
if (ground.hasSchematic())
|
||||
{
|
||||
ground.getSchematic().paste(new Location(CornerA.getWorld(), x, y, z), true);
|
||||
ground.getSchematic().paste(new Location(CornerBottomLeft.getWorld(), x, y, z), true);
|
||||
return;
|
||||
}
|
||||
|
||||
for (int dx = x; dx <= Math.max(CornerA.getBlockX(), CornerB.getBlockX()) ; dx++)
|
||||
for (int dx = x; dx <= CornerTopRight.getBlockX(); dx++)
|
||||
{
|
||||
for (int dz = z; dz <= Math.max(CornerA.getBlockZ(), CornerB.getBlockZ()) ; dz++)
|
||||
for (int dz = z; dz <= CornerTopRight.getBlockZ(); dz++)
|
||||
{
|
||||
MapUtil.QuickChangeBlockAt(player.getWorld(), dx, y, dz, mat, data);
|
||||
}
|
||||
@ -437,22 +472,22 @@ public class BuildData
|
||||
|
||||
protected Location getMin()
|
||||
{
|
||||
return Vector.getMinimum(CornerA.toVector(), CornerB.toVector()).toBlockVector().toLocation(CornerA.getWorld()).subtract(0, 1, 0);
|
||||
return Vector.getMinimum(CornerBottomLeft.toVector(), CornerTopRight.toVector()).toBlockVector().toLocation(CornerBottomLeft.getWorld()).subtract(0, 1, 0);
|
||||
}
|
||||
|
||||
protected Location getMax()
|
||||
{
|
||||
return Vector.getMaximum(CornerA.toVector(), CornerB.toVector()).toBlockVector().toLocation(CornerA.getWorld());
|
||||
return Vector.getMaximum(CornerBottomLeft.toVector(), CornerTopRight.toVector()).toBlockVector().toLocation(CornerBottomLeft.getWorld());
|
||||
}
|
||||
|
||||
public double getMaxHeight()
|
||||
{
|
||||
return Math.max(CornerA.getY(), CornerB.getY());
|
||||
return CornerTopRight.getY();
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts all the blocks inside the build to a schematic
|
||||
* @return
|
||||
* @return Returns a schematic of the build
|
||||
*/
|
||||
public Schematic convertToSchematic()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user