From c38777158a69496c66ede2494b9ef8eb92972f3f Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Fri, 3 Oct 2025 11:55:37 +0200 Subject: [PATCH] Improving SelectAdjacent --- .../features/worldedit/SelectAdjacent.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/worldedit/SelectAdjacent.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/worldedit/SelectAdjacent.java index 7e3ade3c..abc8064e 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/worldedit/SelectAdjacent.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/worldedit/SelectAdjacent.java @@ -21,6 +21,7 @@ package de.steamwar.bausystem.features.worldedit; import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.region.Point; +import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.utils.FlatteningWrapper; import de.steamwar.core.WorldEditRenderer; import de.steamwar.linkage.Linked; @@ -76,10 +77,10 @@ public class SelectAdjacent implements Listener { public void onPlayerInteract(PlayerInteractEvent event) { if (!event.hasItem()) return; if (event.getItem().getType() != Material.WOODEN_AXE) return; - if (!event.getPlayer().isSneaking()) return; - if (event.getAction() != Action.LEFT_CLICK_BLOCK) return; Selector selector = selectors.get(event.getPlayer()); if (selector != null) selector.cancel(); + if (!event.getPlayer().isSneaking()) return; + if (event.getAction() != Action.LEFT_CLICK_BLOCK) return; Material material = event.getPlayer().getInventory().getItemInOffHand().getType(); if (material.isAir()) { selector = new Selector(event.getClickedBlock(), event.getPlayer(), __ -> true); @@ -111,6 +112,8 @@ public class SelectAdjacent implements Listener { private Set seen = new HashSet<>(); private Set toCalc = new HashSet<>(); + private Region.Area area; + public Selector(Block block, Player player, Predicate predicate) { this.predicate = predicate; toCalc.add(block.getLocation()); @@ -121,6 +124,16 @@ public class SelectAdjacent implements Listener { maxY = block.getY(); maxZ = block.getZ(); + Region region = Region.getRegion(block.getLocation()); + area = Region.Area.EMPTY; + if (region.getBuildArea().inRegion(block.getLocation(), true)) { + area = region.getBuildArea(); + } else if (region.getTestblockArea().inRegion(block.getLocation(), true)) { + area = region.getTestblockArea(); + } else if (region.getArea().inRegion(block.getLocation(), true)) { + area = region.getArea(); + } + bukkitTask = Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), () -> { run(); @@ -158,6 +171,7 @@ public class SelectAdjacent implements Listener { if (block.isEmpty() || block.isLiquid()) continue; if (!predicate.test(block.getType())) continue; seen.add(location); + if (!area.inRegion(block.getLocation(), true)) continue; minX = Math.min(minX, location.getBlockX()); maxX = Math.max(maxX, location.getBlockX());