Apply source function after source mask in ForwardExtentCopy.

The source function should only get applied to actually copied blocks.
This commit is contained in:
wizjany 2019-03-01 21:15:21 -05:00
parent f46c70093c
commit e53962dadd
3 changed files with 9 additions and 7 deletions

View File

@ -1252,7 +1252,7 @@ public class EditSession implements Extent, AutoCloseable {
BlockVector3 to = region.getMinimumPoint();
// Remove the original blocks
com.sk89q.worldedit.function.pattern.Pattern pattern = replacement != null ?
Pattern pattern = replacement != null ?
replacement :
new BlockPattern(BlockTypes.AIR.getDefaultState());
BlockReplace remove = new BlockReplace(this, pattern);

View File

@ -262,11 +262,12 @@ public class RegionCommands {
@Command(
aliases = { "/move" },
usage = "[count] [direction] [leave-id]",
flags = "s",
flags = "sa",
desc = "Move the contents of the selection",
help =
"Moves the contents of the selection.\n" +
"The -s flag shifts the selection to the target location.\n" +
"The -a flag skips air blocks.\n" +
"Optionally fills the old location with <leave-id>.",
min = 0,
max = 3
@ -278,9 +279,10 @@ public class RegionCommands {
@Optional("1") @Range(min = 1) int count,
@Optional(Direction.AIM) @Direction(includeDiagonals = true) BlockVector3 direction,
@Optional("air") Pattern replace,
@Switch('s') boolean moveSelection) throws WorldEditException {
@Switch('s') boolean moveSelection,
@Switch('a') boolean ignoreAirBlocks) throws WorldEditException {
int affected = editSession.moveRegion(region, direction, count, true, replace);
int affected = editSession.moveRegion(region, direction, count, !ignoreAirBlocks, replace);
if (moveSelection) {
try {

View File

@ -248,9 +248,9 @@ public class ForwardExtentCopy implements Operation {
}
ExtentBlockCopy blockCopy = new ExtentBlockCopy(source, from, destination, to, currentTransform);
RegionMaskingFilter filter = new RegionMaskingFilter(sourceMask, blockCopy);
RegionFunction function = sourceFunction != null ? new CombinedRegionFunction(filter, sourceFunction) : filter;
RegionVisitor blockVisitor = new RegionVisitor(region, function);
RegionMaskingFilter filteredFunction = new RegionMaskingFilter(sourceMask,
sourceFunction == null ? blockCopy : new CombinedRegionFunction(blockCopy, sourceFunction));
RegionVisitor blockVisitor = new RegionVisitor(region, filteredFunction);
lastVisitor = blockVisitor;