From a3f8d2998f625b84ea78f50a8af8cb6853126e08 Mon Sep 17 00:00:00 2001 From: tastybento Date: Fri, 17 May 2019 21:03:20 -0700 Subject: [PATCH] Fix pasting of blueprints from clipboard. Always pasted at y=0 --- .../AdminBlueprintOriginCommand.java | 2 +- .../blueprints/BlueprintClipboard.java | 19 ++++++++++--------- .../bentobox/blueprints/BlueprintPaster.java | 4 +--- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintOriginCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintOriginCommand.java index f716bde65..ae4834bd5 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintOriginCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintOriginCommand.java @@ -34,7 +34,7 @@ public class AdminBlueprintOriginCommand extends CompositeCommand { // Get the block player is looking at Block b = user.getPlayer().getLineOfSight(null, 20).stream().filter(x -> !x.getType().equals(Material.AIR)).findFirst().orElse(null); if (b != null) { - clipboard.setOrigin(b.getLocation()); + clipboard.setOrigin(b.getLocation().toVector()); user.getPlayer().sendBlockChange(b.getLocation(), Material.REDSTONE_BLOCK.createBlockData()); Bukkit.getScheduler().runTaskLater(getPlugin(), () -> user.getPlayer().sendBlockChange(b.getLocation(), b.getBlockData()), 20L); diff --git a/src/main/java/world/bentobox/bentobox/blueprints/BlueprintClipboard.java b/src/main/java/world/bentobox/bentobox/blueprints/BlueprintClipboard.java index 0728627ea..ebfbf7d2c 100644 --- a/src/main/java/world/bentobox/bentobox/blueprints/BlueprintClipboard.java +++ b/src/main/java/world/bentobox/bentobox/blueprints/BlueprintClipboard.java @@ -53,7 +53,7 @@ public class BlueprintClipboard { private @Nullable Blueprint blueprint; private @Nullable Location pos1; private @Nullable Location pos2; - private @Nullable Location origin; + private @Nullable Vector origin; private BukkitTask copyTask; private int count; private boolean copying; @@ -85,12 +85,13 @@ public class BlueprintClipboard { user.sendMessage("commands.admin.blueprint.mid-copy"); return false; } - origin = origin == null ? user.getLocation() : origin; if (pos1 == null || pos2 == null) { user.sendMessage("commands.admin.blueprint.need-pos1-pos2"); return false; } - + if (origin == null) { + setOrigin(user.getLocation().toVector()); + } user.sendMessage("commands.admin.blueprint.copying"); // World @@ -166,15 +167,15 @@ public class BlueprintClipboard { return r; } - private boolean copyBlock(Location l, Location copyOrigin, boolean copyAir, Collection entities) { + private boolean copyBlock(Location l, @Nullable Vector origin2, boolean copyAir, Collection entities) { Block block = l.getBlock(); if (!copyAir && block.getType().equals(Material.AIR) && entities.isEmpty()) { return false; } // Create position - int x = l.getBlockX() - copyOrigin.getBlockX(); - int y = l.getBlockY() - copyOrigin.getBlockY(); - int z = l.getBlockZ() - copyOrigin.getBlockZ(); + int x = l.getBlockX() - origin2.getBlockX(); + int y = l.getBlockY() - origin2.getBlockY(); + int z = l.getBlockZ() - origin2.getBlockZ(); Vector pos = new Vector(x, y, z); // Set entities @@ -279,7 +280,7 @@ public class BlueprintClipboard { * @return the origin */ @Nullable - public Location getOrigin() { + public Vector getOrigin() { return origin; } /** @@ -304,7 +305,7 @@ public class BlueprintClipboard { /** * @param origin the origin to set */ - public void setOrigin(@Nullable Location origin) { + public void setOrigin(@Nullable Vector origin) { this.origin = origin; } diff --git a/src/main/java/world/bentobox/bentobox/blueprints/BlueprintPaster.java b/src/main/java/world/bentobox/bentobox/blueprints/BlueprintPaster.java index fea448f01..b0f60a1eb 100644 --- a/src/main/java/world/bentobox/bentobox/blueprints/BlueprintPaster.java +++ b/src/main/java/world/bentobox/bentobox/blueprints/BlueprintPaster.java @@ -80,9 +80,7 @@ public class BlueprintPaster { this.plugin = plugin; this.clipboard = clipboard; // Calculate location for pasting - Vector offset = clipboard.getOrigin() != null ? clipboard.getOrigin().toVector() : new Vector(0, 0, 0); - Location loc = location.toVector().subtract(offset).toLocation(location.getWorld()); - paste(location.getWorld(), null, loc, clipboard.getBlueprint(), task); + paste(location.getWorld(), null, location, clipboard.getBlueprint(), task); } /**