Allow copyEntities to be used in ForwardExtentCopy again.

The -e flag should now work for //copy and //cut as it used to.

Fixes WORLDEDIT-3557.
Dieser Commit ist enthalten in:
wizjany 2017-03-19 11:56:04 -04:00
Ursprung e511758d99
Commit 41de204186
2 geänderte Dateien mit 34 neuen und 9 gelöschten Zeilen

Datei anzeigen

@ -70,7 +70,7 @@ public class ClipboardCommands {
desc = "Copy the selection to the clipboard", desc = "Copy the selection to the clipboard",
help = "Copy the selection to the clipboard\n" + help = "Copy the selection to the clipboard\n" +
"Flags:\n" + "Flags:\n" +
" -e controls whether entities are copied\n" + " -e will also copy entities\n" +
" -m sets a source mask so that excluded blocks become air\n" + " -m sets a source mask so that excluded blocks become air\n" +
"WARNING: Pasting entities cannot yet be undone!", "WARNING: Pasting entities cannot yet be undone!",
min = 0, min = 0,
@ -84,6 +84,7 @@ public class ClipboardCommands {
BlockArrayClipboard clipboard = new BlockArrayClipboard(region); BlockArrayClipboard clipboard = new BlockArrayClipboard(region);
clipboard.setOrigin(session.getPlacementPosition(player)); clipboard.setOrigin(session.getPlacementPosition(player));
ForwardExtentCopy copy = new ForwardExtentCopy(editSession, region, clipboard, region.getMinimumPoint()); ForwardExtentCopy copy = new ForwardExtentCopy(editSession, region, clipboard, region.getMinimumPoint());
copy.setCopyingEntities(copyEntities);
if (mask != null) { if (mask != null) {
copy.setSourceMask(mask); copy.setSourceMask(mask);
} }
@ -100,10 +101,9 @@ public class ClipboardCommands {
desc = "Cut the selection to the clipboard", desc = "Cut the selection to the clipboard",
help = "Copy the selection to the clipboard\n" + help = "Copy the selection to the clipboard\n" +
"Flags:\n" + "Flags:\n" +
" -e controls whether entities are copied\n" + " -e will also cut entities\n" +
" -m sets a source mask so that excluded blocks become air\n" + " -m sets a source mask so that excluded blocks become air\n" +
"WARNING: Cutting and pasting entities cannot yet be undone!", "WARNING: Cutting and pasting entities cannot yet be undone!",
min = 0,
max = 1 max = 1
) )
@CommandPermissions("worldedit.clipboard.cut") @CommandPermissions("worldedit.clipboard.cut")
@ -116,6 +116,8 @@ public class ClipboardCommands {
clipboard.setOrigin(session.getPlacementPosition(player)); clipboard.setOrigin(session.getPlacementPosition(player));
ForwardExtentCopy copy = new ForwardExtentCopy(editSession, region, clipboard, region.getMinimumPoint()); ForwardExtentCopy copy = new ForwardExtentCopy(editSession, region, clipboard, region.getMinimumPoint());
copy.setSourceFunction(new BlockReplace(editSession, leavePattern)); copy.setSourceFunction(new BlockReplace(editSession, leavePattern));
copy.setCopyingEntities(copyEntities);
copy.setRemovingEntities(true);
if (mask != null) { if (mask != null) {
copy.setSourceMask(mask); copy.setSourceMask(mask);
} }

Datei anzeigen

@ -58,6 +58,7 @@ public class ForwardExtentCopy implements Operation {
private int repetitions = 1; private int repetitions = 1;
private Mask sourceMask = Masks.alwaysTrue(); private Mask sourceMask = Masks.alwaysTrue();
private boolean removingEntities; private boolean removingEntities;
private boolean copyingEntities = true; // default to true for backwards compatibility, sort of
private RegionFunction sourceFunction = null; private RegionFunction sourceFunction = null;
private Transform transform = new Identity(); private Transform transform = new Identity();
private Transform currentTransform = null; private Transform currentTransform = null;
@ -183,6 +184,24 @@ public class ForwardExtentCopy implements Operation {
this.repetitions = repetitions; this.repetitions = repetitions;
} }
/**
* Return whether entities should be copied along with blocks.
*
* @return true if copying
*/
public boolean isCopyingEntities() {
return copyingEntities;
}
/**
* Set whether entities should be copied along with blocks.
*
* @param copyingEntities true if copying
*/
public void setCopyingEntities(boolean copyingEntities) {
this.copyingEntities = copyingEntities;
}
/** /**
* Return whether entities that are copied should be removed. * Return whether entities that are copied should be removed.
* *
@ -229,14 +248,18 @@ public class ForwardExtentCopy implements Operation {
RegionFunction function = sourceFunction != null ? new CombinedRegionFunction(filter, sourceFunction) : filter; RegionFunction function = sourceFunction != null ? new CombinedRegionFunction(filter, sourceFunction) : filter;
RegionVisitor blockVisitor = new RegionVisitor(region, function); RegionVisitor blockVisitor = new RegionVisitor(region, function);
ExtentEntityCopy entityCopy = new ExtentEntityCopy(from, destination, to, currentTransform);
entityCopy.setRemoving(removingEntities);
List<? extends Entity> entities = source.getEntities(region);
EntityVisitor entityVisitor = new EntityVisitor(entities.iterator(), entityCopy);
lastVisitor = blockVisitor; lastVisitor = blockVisitor;
currentTransform = currentTransform.combine(transform); currentTransform = currentTransform.combine(transform);
return new DelegateOperation(this, new OperationQueue(blockVisitor, entityVisitor));
if (copyingEntities) {
ExtentEntityCopy entityCopy = new ExtentEntityCopy(from, destination, to, currentTransform);
entityCopy.setRemoving(removingEntities);
List<? extends Entity> entities = source.getEntities(region);
EntityVisitor entityVisitor = new EntityVisitor(entities.iterator(), entityCopy);
return new DelegateOperation(this, new OperationQueue(blockVisitor, entityVisitor));
} else {
return new DelegateOperation(this, blockVisitor);
}
} else { } else {
return null; return null;
} }