Add /center commmand

This commit is contained in:
aumgn 2012-08-29 10:00:26 +02:00
parent c759b9062c
commit 7fd5d1b61c
6 changed files with 53 additions and 0 deletions

View File

@ -1352,6 +1352,27 @@ public class EditSession {
return affected; return affected;
} }
public int center(Region region, Pattern pattern)
throws MaxChangedBlocksException {
Vector center = region.getCenter();
int x2 = center.getBlockX();
int y2 = center.getBlockY();
int z2 = center.getBlockZ();
int affected = 0;
for (int x = (int) center.getX(); x <= x2; x++) {
for (int y = (int) center.getY(); y <= y2; y++) {
for (int z = (int) center.getZ(); z <= z2; z++) {
if (setBlock(new Vector(x, y, z), pattern)) {
affected++;
}
}
}
}
return affected;
}
/** /**
* Make faces of the region (as if it was a cuboid if it's not). * Make faces of the region (as if it was a cuboid if it's not).
* *

View File

@ -144,6 +144,22 @@ public class RegionCommands {
player.print(affected + " block(s) have been overlayed."); player.print(affected + " block(s) have been overlayed.");
} }
@Command(
aliases = { "/center", "/middle" },
usage = "<block>",
desc = "Set the center block(s)",
min = 1,
max = 1
)
public void center(CommandContext args, LocalSession session, LocalPlayer player,
EditSession editSession) throws WorldEditException {
Pattern pattern = we.getBlockPattern(player, args.getString(0));
Region region = session.getSelection(player.getWorld());
int affected = editSession.center(region, pattern);
player.print("Center set ("+ affected + " blocks changed)");
}
@Command( @Command(
aliases = { "/naturalize" }, aliases = { "/naturalize" },
usage = "", usage = "",

View File

@ -35,6 +35,11 @@ public abstract class AbstractRegion implements Region {
this.world = world; this.world = world;
} }
@Override
public Vector getCenter() {
return getMinimumPoint().add(getMaximumPoint()).divide(2);
}
/** /**
* Get the iterator. * Get the iterator.
* *

View File

@ -87,6 +87,7 @@ public class CylinderRegion extends AbstractRegion implements FlatRegion {
* *
* @return * @return
*/ */
@Override
public Vector getCenter() { public Vector getCenter() {
return center.toVector((maxY + minY) / 2); return center.toVector((maxY + minY) / 2);
} }

View File

@ -175,6 +175,7 @@ public class EllipsoidRegion extends AbstractRegion {
* *
* @return center * @return center
*/ */
@Override
public Vector getCenter() { public Vector getCenter() {
return center; return center;
} }

View File

@ -44,6 +44,15 @@ public interface Region extends Iterable<BlockVector>, Cloneable {
*/ */
public Vector getMaximumPoint(); public Vector getMaximumPoint();
/**
* Get the center point of a region.
* Note: Coordinates will not be integers
* if the corresponding lengths are even.
*
* @return center point
*/
public Vector getCenter();
/** /**
* Get the number of blocks in the region. * Get the number of blocks in the region.
* *