From b75e4d59e4683a01ac8f94904ee4de85f706fd1f Mon Sep 17 00:00:00 2001 From: Auxilor Date: Thu, 21 Apr 2022 10:04:16 +0100 Subject: [PATCH] Changed getNearbyBlocks --- .../java/com/willfp/eco/util/BlockUtils.java | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/eco-api/src/main/java/com/willfp/eco/util/BlockUtils.java b/eco-api/src/main/java/com/willfp/eco/util/BlockUtils.java index 6afea843..9b7d9fa5 100644 --- a/eco-api/src/main/java/com/willfp/eco/util/BlockUtils.java +++ b/eco-api/src/main/java/com/willfp/eco/util/BlockUtils.java @@ -18,25 +18,31 @@ import java.util.Set; * Utilities / API methods for blocks. */ public final class BlockUtils { - private static Set getNearbyBlocks(@NotNull final Block start, + /** + * Max blocks to mine (yes, this is to prevent a stack overflow). + */ + private static final int MAX_BLOCKS = 2500; + + private static Set getNearbyBlocks(@NotNull final Block origin, @NotNull final List allowedMaterials, @NotNull final Set blocks, final int limit) { for (BlockFace face : BlockFace.values()) { - Block block = start.getRelative(face); + Block block = origin.getRelative(face); + + if (!allowedMaterials.contains(block.getType())) { + continue; + } + if (blocks.contains(block)) { continue; } - if (allowedMaterials.contains(block.getType())) { - blocks.add(block); - - if (blocks.size() > limit || blocks.size() > 2500) { - return blocks; - } - - blocks.addAll(getNearbyBlocks(block, allowedMaterials, blocks, limit)); + if (blocks.size() >= limit || blocks.size() > MAX_BLOCKS) { + return blocks; } + + blocks.addAll(getNearbyBlocks(block, allowedMaterials, blocks, limit)); } return blocks;