geforkt von Mirrors/FastAsyncWorldEdit
Added pattern support to /replacenear, //walls, and //faces
Dieser Commit ist enthalten in:
Ursprung
9e13e25760
Commit
91b7b8444f
@ -1162,6 +1162,70 @@ public class EditSession {
|
|||||||
|
|
||||||
return affected;
|
return affected;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Make faces of the region (as if it was a cuboid if it's not).
|
||||||
|
*
|
||||||
|
* @param region
|
||||||
|
* @param pattern
|
||||||
|
* @return number of blocks affected
|
||||||
|
* @throws MaxChangedBlocksException
|
||||||
|
*/
|
||||||
|
public int makeCuboidFaces(Region region, Pattern pattern)
|
||||||
|
throws MaxChangedBlocksException {
|
||||||
|
int affected = 0;
|
||||||
|
|
||||||
|
Vector min = region.getMinimumPoint();
|
||||||
|
Vector max = region.getMaximumPoint();
|
||||||
|
|
||||||
|
int minX = min.getBlockX();
|
||||||
|
int minY = min.getBlockY();
|
||||||
|
int minZ = min.getBlockZ();
|
||||||
|
int maxX = max.getBlockX();
|
||||||
|
int maxY = max.getBlockY();
|
||||||
|
int maxZ = max.getBlockZ();
|
||||||
|
|
||||||
|
for (int x = minX; x <= maxX; ++x) {
|
||||||
|
for (int y = minY; y <= maxY; ++y) {
|
||||||
|
Vector minV = new Vector(x, y, minZ);
|
||||||
|
if (setBlock(min, pattern.next(minV))) {
|
||||||
|
++affected;
|
||||||
|
}
|
||||||
|
Vector maxV = new Vector(x, y, maxZ);
|
||||||
|
if (setBlock(maxV, pattern.next(maxV))) {
|
||||||
|
++affected;
|
||||||
|
}
|
||||||
|
++affected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int y = minY; y <= maxY; ++y) {
|
||||||
|
for (int z = minZ; z <= maxZ; ++z) {
|
||||||
|
Vector minV = new Vector(minX, y, z);
|
||||||
|
if (setBlock(minV, pattern.next(minV))) {
|
||||||
|
++affected;
|
||||||
|
}
|
||||||
|
Vector maxV = new Vector(maxX, y, z);
|
||||||
|
if (setBlock(maxV, pattern.next(maxV))) {
|
||||||
|
++affected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int z = minZ; z <= maxZ; ++z) {
|
||||||
|
for (int x = minX; x <= maxX; ++x) {
|
||||||
|
Vector minV = new Vector(x, minY, z);
|
||||||
|
if (setBlock(minV, pattern.next(minV))) {
|
||||||
|
++affected;
|
||||||
|
}
|
||||||
|
Vector maxV = new Vector(x, maxY, z);
|
||||||
|
if (setBlock(maxV, pattern.next(maxV))) {
|
||||||
|
++affected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return affected;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make walls of the region (as if it was a cuboid if it's not).
|
* Make walls of the region (as if it was a cuboid if it's not).
|
||||||
@ -1211,6 +1275,58 @@ public class EditSession {
|
|||||||
return affected;
|
return affected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make walls of the region (as if it was a cuboid if it's not).
|
||||||
|
*
|
||||||
|
* @param region
|
||||||
|
* @param block
|
||||||
|
* @return number of blocks affected
|
||||||
|
* @throws MaxChangedBlocksException
|
||||||
|
*/
|
||||||
|
public int makeCuboidWalls(Region region, Pattern pattern)
|
||||||
|
throws MaxChangedBlocksException {
|
||||||
|
int affected = 0;
|
||||||
|
|
||||||
|
Vector min = region.getMinimumPoint();
|
||||||
|
Vector max = region.getMaximumPoint();
|
||||||
|
|
||||||
|
int minX = min.getBlockX();
|
||||||
|
int minY = min.getBlockY();
|
||||||
|
int minZ = min.getBlockZ();
|
||||||
|
int maxX = max.getBlockX();
|
||||||
|
int maxY = max.getBlockY();
|
||||||
|
int maxZ = max.getBlockZ();
|
||||||
|
|
||||||
|
for (int x = minX; x <= maxX; ++x) {
|
||||||
|
for (int y = minY; y <= maxY; ++y) {
|
||||||
|
Vector minV = new Vector(x, y, minZ);
|
||||||
|
if (setBlock(minV, pattern.next(minV))) {
|
||||||
|
++affected;
|
||||||
|
}
|
||||||
|
Vector maxV = new Vector(x, y, maxZ);
|
||||||
|
if (setBlock(maxV, pattern.next(maxV))) {
|
||||||
|
++affected;
|
||||||
|
}
|
||||||
|
++affected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int y = minY; y <= maxY; ++y) {
|
||||||
|
for (int z = minZ; z <= maxZ; ++z) {
|
||||||
|
Vector minV = new Vector(minX, y, z);
|
||||||
|
if (setBlock(minV, pattern.next(minV))) {
|
||||||
|
++affected;
|
||||||
|
}
|
||||||
|
Vector maxV = new Vector(maxX, y, z);
|
||||||
|
if (setBlock(maxV, pattern.next(maxV))) {
|
||||||
|
++affected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return affected;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Overlays a layer of blocks over a cuboid area.
|
* Overlays a layer of blocks over a cuboid area.
|
||||||
*
|
*
|
||||||
|
@ -159,8 +159,13 @@ public class RegionCommands {
|
|||||||
LocalSession session, LocalPlayer player, EditSession editSession)
|
LocalSession session, LocalPlayer player, EditSession editSession)
|
||||||
throws WorldEditException {
|
throws WorldEditException {
|
||||||
|
|
||||||
BaseBlock block = we.getBlock(player, args.getString(0));
|
Pattern pattern = we.getBlockPattern(player, args.getString(0));
|
||||||
int affected = editSession.makeCuboidWalls(session.getSelection(player.getWorld()), block);
|
int affected;
|
||||||
|
if (pattern instanceof SingleBlockPattern) {
|
||||||
|
affected = editSession.makeCuboidWalls(session.getSelection(player.getWorld()), ((SingleBlockPattern) pattern).getBlock());
|
||||||
|
} else {
|
||||||
|
affected = editSession.makeCuboidWalls(session.getSelection(player.getWorld()), pattern);
|
||||||
|
}
|
||||||
|
|
||||||
player.print(affected + " block(s) have been changed.");
|
player.print(affected + " block(s) have been changed.");
|
||||||
}
|
}
|
||||||
@ -178,8 +183,14 @@ public class RegionCommands {
|
|||||||
LocalSession session, LocalPlayer player, EditSession editSession)
|
LocalSession session, LocalPlayer player, EditSession editSession)
|
||||||
throws WorldEditException {
|
throws WorldEditException {
|
||||||
|
|
||||||
BaseBlock block = we.getBlock(player, args.getString(0));
|
Pattern pattern = we.getBlockPattern(player, args.getString(0));
|
||||||
int affected = editSession.makeCuboidFaces(session.getSelection(player.getWorld()), block);
|
int affected;
|
||||||
|
if (pattern instanceof SingleBlockPattern) {
|
||||||
|
affected = editSession.makeCuboidFaces(session.getSelection(player.getWorld()), ((SingleBlockPattern) pattern).getBlock());
|
||||||
|
} else {
|
||||||
|
affected = editSession.makeCuboidFaces(session.getSelection(player.getWorld()), pattern);
|
||||||
|
}
|
||||||
|
|
||||||
player.print(affected + " block(s) have been changed.");
|
player.print(affected + " block(s) have been changed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,14 +238,15 @@ public class UtilityCommands {
|
|||||||
throws WorldEditException {
|
throws WorldEditException {
|
||||||
|
|
||||||
int size = Math.max(1, args.getInteger(0));
|
int size = Math.max(1, args.getInteger(0));
|
||||||
|
int affected;
|
||||||
Set<Integer> from;
|
Set<Integer> from;
|
||||||
BaseBlock to;
|
Pattern to;
|
||||||
if (args.argsLength() == 2) {
|
if (args.argsLength() == 2) {
|
||||||
from = null;
|
from = null;
|
||||||
to = we.getBlock(player, args.getString(1));
|
to = we.getBlockPattern(player, args.getString(1));
|
||||||
} else {
|
} else {
|
||||||
from = we.getBlockIDs(player, args.getString(1), true);
|
from = we.getBlockIDs(player, args.getString(1), true);
|
||||||
to = we.getBlock(player, args.getString(2));
|
to = we.getBlockPattern(player, args.getString(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector base = session.getPlacementPosition(player);
|
Vector base = session.getPlacementPosition(player);
|
||||||
@ -253,7 +254,11 @@ public class UtilityCommands {
|
|||||||
Vector max = base.add(size, size, size);
|
Vector max = base.add(size, size, size);
|
||||||
Region region = new CuboidRegion(min, max);
|
Region region = new CuboidRegion(min, max);
|
||||||
|
|
||||||
int affected = editSession.replaceBlocks(region, from, to);
|
if (to instanceof SingleBlockPattern) {
|
||||||
|
affected = editSession.replaceBlocks(region, from, ((SingleBlockPattern) to).getBlock());
|
||||||
|
} else {
|
||||||
|
affected = editSession.replaceBlocks(region, from, to);
|
||||||
|
}
|
||||||
player.print(affected + " block(s) have been replaced.");
|
player.print(affected + " block(s) have been replaced.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren