From cc3b93a8f6d251ddc00b323ac997ecb3e0f50faf Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Fri, 7 Nov 2025 14:54:57 +0100 Subject: [PATCH] Improve SelectAdjacent --- .../features/worldedit/SelectAdjacent.java | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 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 518ca00c..3f6ca8f2 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 @@ -23,6 +23,7 @@ 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.SWPlayer; import de.steamwar.core.WorldEditRenderer; import de.steamwar.linkage.Linked; import de.steamwar.linkage.MinVersion; @@ -35,13 +36,10 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.scheduler.BukkitTask; import org.bukkit.util.Vector; -import java.util.HashMap; import java.util.HashSet; -import java.util.Map; import java.util.Set; import java.util.function.Predicate; @@ -71,32 +69,23 @@ public class SelectAdjacent implements Listener { new Vector(0, -1, -1), }; - private Map selectors = new HashMap<>(); - @EventHandler public void onPlayerInteract(PlayerInteractEvent event) { if (!event.hasItem()) return; if (event.getItem().getType() != Material.WOODEN_AXE) 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(); + Selector selector; if (material.isAir()) { selector = new Selector(event.getClickedBlock(), event.getPlayer(), __ -> true); } else { selector = new Selector(event.getClickedBlock(), event.getPlayer(), type -> type == material); } - selectors.put(event.getPlayer(), selector); + SWPlayer.of(event.getPlayer()).setComponent(selector); } - @EventHandler - public void onPlayerQuit(PlayerQuitEvent event) { - Selector selector = selectors.remove(event.getPlayer()); - if (selector != null) selector.cancel(); - } - - private class Selector { + private class Selector implements SWPlayer.Component { private static final int MAX_BLOCKS = 500_000; @@ -154,6 +143,7 @@ public class SelectAdjacent implements Listener { if (toCalc.isEmpty() || seen.size() > MAX_BLOCKS) { bukkitTask.cancel(); player.sendTitle("§aDone", "§e" + volume + " §7Blocks", 0, 20, 5); + SWPlayer.of(player).removeComponent(Selector.class); } }, 1, 1); } @@ -190,5 +180,10 @@ public class SelectAdjacent implements Listener { } } } + + @Override + public void onUnmount(SWPlayer player) { + cancel(); + } } }