Skip to content

Commit aa778af

Browse files
authored
Use a separate entity copy for //revolve -e (#2899)
1 parent fee61cf commit aa778af

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

worldedit-core/src/main/java/com/sk89q/worldedit/command/ClipboardCommands.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.sk89q.worldedit.extent.clipboard.Clipboard;
3333
import com.sk89q.worldedit.function.block.BlockReplace;
3434
import com.sk89q.worldedit.function.mask.Mask;
35+
import com.sk89q.worldedit.function.mask.Masks;
3536
import com.sk89q.worldedit.function.operation.ForwardExtentCopy;
3637
import com.sk89q.worldedit.function.operation.Operation;
3738
import com.sk89q.worldedit.function.operation.Operations;
@@ -308,18 +309,35 @@ void revolve(Actor actor, LocalSession session, EditSession editSession, @Select
308309
// Offset this by half a block to ensure rotations are aligned properly
309310
AffineTransform offsetTransform = new AffineTransform().translate(0.5, 0.5, 0.5);
310311

312+
// Entities can't be offset like blocks, so we need a separate transform. Ideally can be fixed in WE8 by always
313+
// offsetting block stuff in ExtentBlockCopy so we don't need the above to be offset.
314+
AffineTransform entityTransform = copyEntities ? new AffineTransform() : null;
315+
311316
// Now paste it multiple times, rotating each time
312317
for (int i = 1; i < pasteCount; i++) {
313-
holder.setTransform(offsetTransform.rotateY((reverse ? 1 : -1) * (360 * i) / (double) pasteCount));
318+
double theta = (reverse ? 1 : -1) * (360 * i) / (double) pasteCount;
319+
holder.setTransform(offsetTransform.rotateY(theta));
314320

315321
Operation operation = holder
316322
.createPaste(editSession)
317323
.ignoreAirBlocks(true)
318-
.copyEntities(copyEntities)
324+
.copyEntities(false)
319325
.copyBiomes(copyBiomes)
320326
.to(pasteOrigin)
321327
.build();
322328
Operations.complete(operation);
329+
330+
if (copyEntities) {
331+
// Paste entities separately with correct transform
332+
holder.setTransform(entityTransform.rotateY(theta));
333+
Operation entityOperation = holder
334+
.createPaste(editSession)
335+
.maskSource(Masks.negate(Masks.alwaysTrue()))
336+
.copyEntities(true)
337+
.to(pasteOrigin)
338+
.build();
339+
Operations.complete(entityOperation);
340+
}
323341
}
324342

325343
actor.printInfo(TranslatableComponent.of("worldedit.revolve.revolved", TextComponent.of(pasteCount)));

0 commit comments

Comments
 (0)