Fixed a few clipboard related issues.

Dieser Commit ist enthalten in:
Matthew Miller 2018-07-30 21:55:53 +10:00
Ursprung db21f51a18
Commit 521238b4eb
8 geänderte Dateien mit 24 neuen und 28 gelöschten Zeilen

Datei anzeigen

@ -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

Datei anzeigen

@ -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

Datei anzeigen

@ -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);
}

Datei anzeigen

@ -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());
}
}
}

Datei anzeigen

@ -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<? extends Entity> entities = source.getEntities(region);
// Switch to entities.removeIf after Java 8 cutoff.
Iterator<? extends Entity> entityIterator = entities.iterator();
while (entityIterator.hasNext()) {
EntityProperties type = entityIterator.next().getFacet(EntityProperties.class);
if (type != null && !type.isPasteable()) {
entityIterator.remove();
}
}
List<? extends Entity> 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 {

Datei anzeigen

@ -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)));
}
}

Datei anzeigen

@ -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));
}
}

Datei anzeigen

@ -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);