From 698bae6145f5220d1982942ba91eaface6f4c404 Mon Sep 17 00:00:00 2001 From: JsKingBoo Date: Sun, 21 Jun 2020 17:16:27 -0700 Subject: [PATCH 1/3] Add clearblocks.py CraftScript --- contrib/craftscripts/clearblocks.js | 60 +++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 contrib/craftscripts/clearblocks.js diff --git a/contrib/craftscripts/clearblocks.js b/contrib/craftscripts/clearblocks.js new file mode 100644 index 0000000000..d3ec8f6b00 --- /dev/null +++ b/contrib/craftscripts/clearblocks.js @@ -0,0 +1,60 @@ +// Marks all blocks that have at least 3 exposed sides (adjacent to an air block) +// and then deletes those blocks. +// Based on jsa's MCEdit Filter clearBlocks.py + +importClass(Packages.com.sk89q.worldedit.world.block.BlockTypes) + +context.checkArgs(0, -1, "") + +var blocks = context.remember() +var region = context.getSession().getRegionSelector(player.getWorld()).getRegion() + +var min = region.getMinimumPoint() +var xi = region.getWidth() +var yi = region.getHeight() +var zi = region.getLength() + +function sidesExposed(block) { + if (blocks.getBlock(block).getBlockType().equals(BlockTypes.AIR)) { + return 0 + } + var sides = 0 + if (blocks.getBlock(block.add(0, 0, 1)).getBlockType().equals(BlockTypes.AIR)) { + sides += 1 + } + if (blocks.getBlock(block.add(0, 1, 0)).getBlockType().equals(BlockTypes.AIR)) { + sides += 1 + } + if (blocks.getBlock(block.add(1, 0, 0)).getBlockType().equals(BlockTypes.AIR)) { + sides += 1 + } + if (blocks.getBlock(block.add(0, 0, -1)).getBlockType().equals(BlockTypes.AIR)) { + sides += 1 + } + if (blocks.getBlock(block.add(0, -1, 0)).getBlockType().equals(BlockTypes.AIR)) { + sides += 1 + } + if (blocks.getBlock(block.add(-1, 0, 0)).getBlockType().equals(BlockTypes.AIR)) { + sides += 1 + } + return sides +} + +var destroyThese = [] + +for (var i = 0; i < xi; i += 1) { + for (var j = 0; j < zi; j += 1) { + for (var k = 0; k < yi; k += 1) { + var block = min.add(i, k, j) + if (sidesExposed(block) >= 3) { + destroyThese.push(block) + } + } + } +} + +for (var i = 0; i < destroyThese.length; i += 1) { + blocks.setBlock(destroyThese[i], BlockTypes.AIR.getDefaultState()) +} + +context.print("[Clear Blocks] " + destroyThese.length + " blocks cleared.") From f614988e1c43882085a7f7e5b84076fe0a25448b Mon Sep 17 00:00:00 2001 From: JsKingBoo Date: Fri, 26 Jun 2020 22:25:20 -0700 Subject: [PATCH 2/3] Rename variables for increased clarity (suggested by octylFractal) --- contrib/craftscripts/clearblocks.js | 34 ++++++++++++++--------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/contrib/craftscripts/clearblocks.js b/contrib/craftscripts/clearblocks.js index d3ec8f6b00..af23932788 100644 --- a/contrib/craftscripts/clearblocks.js +++ b/contrib/craftscripts/clearblocks.js @@ -1,40 +1,40 @@ // Marks all blocks that have at least 3 exposed sides (adjacent to an air block) -// and then deletes those blocks. -// Based on jsa's MCEdit Filter clearBlocks.py +// and then deletes those editSession. +// Based on jsa's MCEdit Filter cleareditSession.py importClass(Packages.com.sk89q.worldedit.world.block.BlockTypes) context.checkArgs(0, -1, "") -var blocks = context.remember() +var editSession = context.remember() var region = context.getSession().getRegionSelector(player.getWorld()).getRegion() var min = region.getMinimumPoint() -var xi = region.getWidth() -var yi = region.getHeight() -var zi = region.getLength() +var width = region.getWidth() +var height = region.getHeight() +var length = region.getLength() function sidesExposed(block) { - if (blocks.getBlock(block).getBlockType().equals(BlockTypes.AIR)) { + if (editSession.getBlock(block).getBlockType().equals(BlockTypes.AIR)) { return 0 } var sides = 0 - if (blocks.getBlock(block.add(0, 0, 1)).getBlockType().equals(BlockTypes.AIR)) { + if (editSession.getBlock(block.add(0, 0, 1)).getBlockType().equals(BlockTypes.AIR)) { sides += 1 } - if (blocks.getBlock(block.add(0, 1, 0)).getBlockType().equals(BlockTypes.AIR)) { + if (editSession.getBlock(block.add(0, 1, 0)).getBlockType().equals(BlockTypes.AIR)) { sides += 1 } - if (blocks.getBlock(block.add(1, 0, 0)).getBlockType().equals(BlockTypes.AIR)) { + if (editSession.getBlock(block.add(1, 0, 0)).getBlockType().equals(BlockTypes.AIR)) { sides += 1 } - if (blocks.getBlock(block.add(0, 0, -1)).getBlockType().equals(BlockTypes.AIR)) { + if (editSession.getBlock(block.add(0, 0, -1)).getBlockType().equals(BlockTypes.AIR)) { sides += 1 } - if (blocks.getBlock(block.add(0, -1, 0)).getBlockType().equals(BlockTypes.AIR)) { + if (editSession.getBlock(block.add(0, -1, 0)).getBlockType().equals(BlockTypes.AIR)) { sides += 1 } - if (blocks.getBlock(block.add(-1, 0, 0)).getBlockType().equals(BlockTypes.AIR)) { + if (editSession.getBlock(block.add(-1, 0, 0)).getBlockType().equals(BlockTypes.AIR)) { sides += 1 } return sides @@ -42,9 +42,9 @@ function sidesExposed(block) { var destroyThese = [] -for (var i = 0; i < xi; i += 1) { - for (var j = 0; j < zi; j += 1) { - for (var k = 0; k < yi; k += 1) { +for (var i = 0; i < width; i += 1) { + for (var j = 0; j < length; j += 1) { + for (var k = 0; k < height; k += 1) { var block = min.add(i, k, j) if (sidesExposed(block) >= 3) { destroyThese.push(block) @@ -54,7 +54,7 @@ for (var i = 0; i < xi; i += 1) { } for (var i = 0; i < destroyThese.length; i += 1) { - blocks.setBlock(destroyThese[i], BlockTypes.AIR.getDefaultState()) + editSession.setBlock(destroyThese[i], BlockTypes.AIR.getDefaultState()) } context.print("[Clear Blocks] " + destroyThese.length + " blocks cleared.") From 5d71bfb6cab6b535df55057cef3f0eb175fcb101 Mon Sep 17 00:00:00 2001 From: JsKingBoo Date: Sat, 27 Jun 2020 10:30:06 -0700 Subject: [PATCH 3/3] find+replace changes a man --- contrib/craftscripts/clearblocks.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/craftscripts/clearblocks.js b/contrib/craftscripts/clearblocks.js index af23932788..4953a853d3 100644 --- a/contrib/craftscripts/clearblocks.js +++ b/contrib/craftscripts/clearblocks.js @@ -1,6 +1,6 @@ // Marks all blocks that have at least 3 exposed sides (adjacent to an air block) -// and then deletes those editSession. -// Based on jsa's MCEdit Filter cleareditSession.py +// and then deletes those blocks. +// Based on jsa's MCEdit Filter clearBlocks.py importClass(Packages.com.sk89q.worldedit.world.block.BlockTypes)