diff --git a/src/main/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintCopyCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintCopyCommand.java index 403ec8891..dc6930e91 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintCopyCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintCopyCommand.java @@ -41,14 +41,15 @@ public boolean execute(User user, String label, List args) boolean copyAir = args.stream().anyMatch(key -> key.equalsIgnoreCase("air")); boolean copyBiome = args.stream().anyMatch(key -> key.equalsIgnoreCase("biome")); + boolean noWater = args.stream().anyMatch(key -> key.equalsIgnoreCase("nowater")); - return clipboard.copy(user, copyAir, copyBiome); + return clipboard.copy(user, copyAir, copyBiome, noWater); } @Override public Optional> tabComplete(User user, String alias, List args) { - return Optional.of(List.of("air", "biome")); + return Optional.of(List.of("air", "biome", "nowater")); } } diff --git a/src/main/java/world/bentobox/bentobox/blueprints/BlueprintClipboard.java b/src/main/java/world/bentobox/bentobox/blueprints/BlueprintClipboard.java index 5522ea867..2b3c6c43e 100644 --- a/src/main/java/world/bentobox/bentobox/blueprints/BlueprintClipboard.java +++ b/src/main/java/world/bentobox/bentobox/blueprints/BlueprintClipboard.java @@ -102,7 +102,7 @@ public BlueprintClipboard() { * @param user - user * @return true if successful, false if pos1 or pos2 are undefined. */ - public boolean copy(User user, boolean copyAir, boolean copyBiome) { + public boolean copy(User user, boolean copyAir, boolean copyBiome, boolean noWater) { if (copying) { user.sendMessage("commands.admin.blueprint.mid-copy"); return false; @@ -137,11 +137,13 @@ public boolean copy(User user, boolean copyAir, boolean copyBiome) { int speed = plugin.getSettings().getPasteSpeed(); List vectorsToCopy = getVectors(toCopy); - Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> copyAsync(world, user, vectorsToCopy, speed, copyAir, copyBiome)); + Bukkit.getScheduler().runTaskAsynchronously(plugin, + () -> copyAsync(world, user, vectorsToCopy, speed, copyAir, copyBiome, noWater)); return true; } - private void copyAsync(World world, User user, List vectorsToCopy, int speed, boolean copyAir, boolean copyBiome) { + private void copyAsync(World world, User user, List vectorsToCopy, int speed, boolean copyAir, + boolean copyBiome, boolean noWater) { copying = false; // FancyNpcs if (npc.isPresent()) { @@ -167,7 +169,7 @@ private void copyAsync(World world, User user, List vectorsToCopy, int s .filter(e -> new Vector(e.getLocation().getBlockX(), e.getLocation().getBlockY(), e.getLocation().getBlockZ()).equals(v)) .toList(); - if (copyBlock(v.toLocation(world), copyAir, copyBiome, ents)) { + if (copyBlock(v.toLocation(world), copyAir, copyBiome, ents, noWater)) { count++; } }); @@ -208,11 +210,14 @@ protected List getVectors(BoundingBox b) { return r; } - private boolean copyBlock(Location l, boolean copyAir, boolean copyBiome, List ents) { + private boolean copyBlock(Location l, boolean copyAir, boolean copyBiome, List ents, boolean noWater) { Block block = l.getBlock(); if (!copyAir && block.getType().equals(Material.AIR) && ents.isEmpty()) { return false; } + if (noWater && block.getType() == Material.WATER && ents.isEmpty()) { + return false; + } // Create position Vector origin2 = origin == null ? new Vector(0,0,0) : origin; int x = l.getBlockX() - origin2.getBlockX(); @@ -231,6 +236,9 @@ private boolean copyBlock(Location l, boolean copyAir, boolean copyBiome, List diff --git a/src/test/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintCopyCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintCopyCommandTest.java index 0882cfdc0..7082068ef 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintCopyCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/admin/blueprints/AdminBlueprintCopyCommandTest.java @@ -101,7 +101,7 @@ public void setUp() throws Exception { when(ac.getClipboards()).thenReturn(map); // Clipboard - when(clip.copy(any(), anyBoolean(), anyBoolean())).thenReturn(true); + when(clip.copy(any(), anyBoolean(), anyBoolean(), anyBoolean())).thenReturn(true); // Locales LocalesManager lm = mock(LocalesManager.class); @@ -156,7 +156,7 @@ public void testExecuteUserStringListOfStringHelp() { @Test public void testExecuteUserStringListOfStringSuccess() { assertTrue(abcc.execute(user, "", List.of("air", "biome"))); - verify(clip).copy(user, true, true); + verify(clip).copy(user, true, true, false); } /** @@ -165,7 +165,7 @@ public void testExecuteUserStringListOfStringSuccess() { @Test public void testExecuteUserStringListOfStringSuccessCaps() { assertTrue(abcc.execute(user, "", List.of("AIR", "BIOME"))); - verify(clip).copy(user, true, true); + verify(clip).copy(user, true, true, false); } /** @@ -174,7 +174,7 @@ public void testExecuteUserStringListOfStringSuccessCaps() { @Test public void testExecuteUserStringListOfStringJunk() { assertTrue(abcc.execute(user, "", List.of("junk", "junk"))); - verify(clip).copy(user, false, false); + verify(clip).copy(user, false, false, false); } /** @@ -183,7 +183,7 @@ public void testExecuteUserStringListOfStringJunk() { @Test public void testExecuteUserStringListOfStringNothing() { assertTrue(abcc.execute(user, "", Collections.emptyList())); - verify(clip).copy(user, false, false); + verify(clip).copy(user, false, false, false); } /** diff --git a/src/test/java/world/bentobox/bentobox/blueprints/BlueprintClipboardTest.java b/src/test/java/world/bentobox/bentobox/blueprints/BlueprintClipboardTest.java index 2a4859090..20a55a8e0 100644 --- a/src/test/java/world/bentobox/bentobox/blueprints/BlueprintClipboardTest.java +++ b/src/test/java/world/bentobox/bentobox/blueprints/BlueprintClipboardTest.java @@ -107,7 +107,7 @@ public void testBlueprintClipboard() { */ @Test public void testCopy() { - assertFalse(bc.copy(user, false, false)); + assertFalse(bc.copy(user, false, false, false)); verify(user, never()).sendMessage("commands.admin.blueprint.mid-copy"); verify(user).sendMessage("commands.admin.blueprint.need-pos1-pos2"); }