From 521238b4eb4564f9089439e0de7d954d498276dd Mon Sep 17 00:00:00 2001 From: Matthew Miller Date: Mon, 30 Jul 2018 21:55:53 +1000 Subject: [PATCH] Fixed a few clipboard related issues. --- .../java/com/sk89q/worldedit/BlockVector.java | 6 ++--- .../com/sk89q/worldedit/BlockVector2D.java | 6 ++--- .../worldedit/extent/ChangeSetExtent.java | 3 ++- .../extent/clipboard/BlockArrayClipboard.java | 8 +++---- .../function/operation/ForwardExtentCopy.java | 23 ++++++++----------- .../function/pattern/ClipboardPattern.java | 2 +- .../pattern/RepeatingExtentPattern.java | 2 +- .../com/sk89q/worldedit/forge/ForgeWorld.java | 2 +- 8 files changed, 24 insertions(+), 28 deletions(-) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/BlockVector.java b/worldedit-core/src/main/java/com/sk89q/worldedit/BlockVector.java index 633bab3eb..c444d80d1 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/BlockVector.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/BlockVector.java @@ -37,7 +37,7 @@ public class BlockVector extends Vector { * @param position the other position */ public BlockVector(Vector position) { - this(position.getBlockX(), position.getBlockY(), position.getBlockZ()); + super(position); } /** @@ -59,7 +59,7 @@ public class BlockVector extends Vector { * @param z the Z coordinate */ public BlockVector(float x, float y, float z) { - this((int) x, (int) y, (int) z); + super(x, y, z); } /** @@ -70,7 +70,7 @@ public class BlockVector extends Vector { * @param z the Z coordinate */ public BlockVector(double x, double y, double z) { - this((int) x, (int) y, (int) z); + super(x, y, z); } @Override diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/BlockVector2D.java b/worldedit-core/src/main/java/com/sk89q/worldedit/BlockVector2D.java index cdf0cb36a..07d54430b 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/BlockVector2D.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/BlockVector2D.java @@ -36,7 +36,7 @@ public class BlockVector2D extends Vector2D { * @param position the position to copy */ public BlockVector2D(Vector2D position) { - this(position.getBlockX(), position.getBlockZ()); + super(position); } /** @@ -56,7 +56,7 @@ public class BlockVector2D extends Vector2D { * @param z the Z coordinate */ public BlockVector2D(float x, float z) { - this((int) x, (int) z); + super(x, z); } /** @@ -66,7 +66,7 @@ public class BlockVector2D extends Vector2D { * @param z the Z coordinate */ public BlockVector2D(double x, double z) { - this((int) x, (int) z); + super(x, z); } @Override diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/ChangeSetExtent.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/ChangeSetExtent.java index e9c78e088..f57056f7a 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/ChangeSetExtent.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/ChangeSetExtent.java @@ -21,6 +21,7 @@ package com.sk89q.worldedit.extent; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.WorldEditException; +import com.sk89q.worldedit.blocks.BaseBlock; import com.sk89q.worldedit.world.block.BlockStateHolder; import com.sk89q.worldedit.entity.BaseEntity; import com.sk89q.worldedit.entity.Entity; @@ -59,7 +60,7 @@ public class ChangeSetExtent extends AbstractDelegateExtent { @Override public boolean setBlock(Vector location, BlockStateHolder block) throws WorldEditException { - BlockStateHolder previous = getBlock(location); + BaseBlock previous = getFullBlock(location); changeSet.add(new BlockChange(location.toBlockVector(), previous, block)); return super.setBlock(location, block); } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/BlockArrayClipboard.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/BlockArrayClipboard.java index 8a0e19bfc..0cc32149c 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/BlockArrayClipboard.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/BlockArrayClipboard.java @@ -65,7 +65,7 @@ public class BlockArrayClipboard implements Clipboard { this.origin = region.getMinimumPoint(); Vector dimensions = getDimensions(); - blocks = new BaseBlock[dimensions.getBlockX()][dimensions.getBlockY()][dimensions.getBlockZ()]; + blocks = new BlockStateHolder[dimensions.getBlockX()][dimensions.getBlockY()][dimensions.getBlockZ()]; } @Override @@ -146,10 +146,10 @@ public class BlockArrayClipboard implements Clipboard { Vector v = position.subtract(region.getMinimumPoint()); BlockStateHolder block = blocks[v.getBlockX()][v.getBlockY()][v.getBlockZ()]; if (block != null) { - if (block instanceof BlockState) { - return new BaseBlock((BlockState) block); - } else if (block instanceof BaseBlock) { + if (block instanceof BaseBlock) { return (BaseBlock) block; + } else { + return new BaseBlock(block.toImmutableState()); } } } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/operation/ForwardExtentCopy.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/operation/ForwardExtentCopy.java index c5c1b10a1..3a9a38d4e 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/operation/ForwardExtentCopy.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/operation/ForwardExtentCopy.java @@ -19,6 +19,10 @@ package com.sk89q.worldedit.function.operation; +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; + +import com.google.common.collect.Lists; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.entity.Entity; @@ -37,12 +41,8 @@ import com.sk89q.worldedit.math.transform.Identity; import com.sk89q.worldedit.math.transform.Transform; import com.sk89q.worldedit.regions.Region; -import java.util.Iterator; import java.util.List; -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - /** * Makes a copy of a portion of one extent to another extent or another point. * @@ -257,16 +257,11 @@ public class ForwardExtentCopy implements Operation { if (copyingEntities) { ExtentEntityCopy entityCopy = new ExtentEntityCopy(from, destination, to, currentTransform); entityCopy.setRemoving(removingEntities); - List entities = source.getEntities(region); - // Switch to entities.removeIf after Java 8 cutoff. - Iterator entityIterator = entities.iterator(); - while (entityIterator.hasNext()) { - EntityProperties type = entityIterator.next().getFacet(EntityProperties.class); - - if (type != null && !type.isPasteable()) { - entityIterator.remove(); - } - } + List entities = Lists.newArrayList(source.getEntities(region)); + entities.removeIf(entity -> { + EntityProperties properties = entity.getFacet(EntityProperties.class); + return properties != null && !properties.isPasteable(); + }); EntityVisitor entityVisitor = new EntityVisitor(entities.iterator(), entityCopy); return new DelegateOperation(this, new OperationQueue(blockVisitor, entityVisitor)); } else { diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/ClipboardPattern.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/ClipboardPattern.java index 0c180c531..708f2bb4e 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/ClipboardPattern.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/ClipboardPattern.java @@ -50,7 +50,7 @@ public class ClipboardPattern extends AbstractPattern { int yp = Math.abs(position.getBlockY()) % size.getBlockY(); int zp = Math.abs(position.getBlockZ()) % size.getBlockZ(); - return clipboard.getBlock(clipboard.getMinimumPoint().add(new Vector(xp, yp, zp))); + return clipboard.getFullBlock(clipboard.getMinimumPoint().add(new Vector(xp, yp, zp))); } } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/RepeatingExtentPattern.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/RepeatingExtentPattern.java index c833a289d..6a9581ff3 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/RepeatingExtentPattern.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/pattern/RepeatingExtentPattern.java @@ -89,7 +89,7 @@ public class RepeatingExtentPattern extends AbstractPattern { int x = base.getBlockX() % size.getBlockX(); int y = base.getBlockY() % size.getBlockY(); int z = base.getBlockZ() % size.getBlockZ(); - return extent.getBlock(new Vector(x, y, z)); + return extent.getFullBlock(new Vector(x, y, z)); } } diff --git a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java index 86f458425..14d6bd107 100644 --- a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java +++ b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java @@ -305,7 +305,7 @@ public class ForgeWorld extends AbstractWorld { ForgeWorld from = new ForgeWorld(freshWorld); try { for (BlockVector vec : region) { - editSession.setBlock(vec, from.getBlock(vec)); + editSession.setBlock(vec, from.getFullBlock(vec)); } } catch (MaxChangedBlocksException e) { throw new RuntimeException(e);