From 42c9d6d612acd0a5204c180f75a060190f44e5d2 Mon Sep 17 00:00:00 2001 From: D4rkr34lm Date: Thu, 8 May 2025 17:56:12 +0200 Subject: [PATCH] Added cleanup of cursor --- .../bausystem/utils/cursor/RCursor.java | 5 ++++ .../utils/cursor/RCursorManager.java | 24 +++++++++++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/cursor/RCursor.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/cursor/RCursor.java index d4b72f6a..570c0a47 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/cursor/RCursor.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/cursor/RCursor.java @@ -112,6 +112,11 @@ public class RCursor { onClickHandler.handle(cursorLocation, isHittingEntity, action); } + public void close() { + cursorServer.close(); + RCursorManager.getInstance().unregisterCursor(this); + } + @AllArgsConstructor public enum CursorMode { FREE((player, rayTraceResult) -> { diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/cursor/RCursorManager.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/cursor/RCursorManager.java index b7052ba3..d6b5b7ac 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/cursor/RCursorManager.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/cursor/RCursorManager.java @@ -8,6 +8,7 @@ import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEvent; import java.lang.ref.SoftReference; @@ -18,7 +19,7 @@ import java.util.Set; import java.util.function.BiFunction; @Linked -public class RCursorManager { +public class RCursorManager implements Listener { @Getter private static RCursorManager instance; @@ -50,10 +51,23 @@ public class RCursorManager { TinyProtocol.instance.addFilter(positionLookPacketClass, function); } - public void registerCursor(RCursor cursor) { + void registerCursor(RCursor cursor) { + SoftReference currentPlayerCursorRef = activeCursors.get(cursor.getOwner()); + if(currentPlayerCursorRef != null) { + RCursor currentCursor = currentPlayerCursorRef.get(); + if(currentCursor != null) { + currentCursor.close(); + }; + }; + activeCursors.put(cursor.getOwner(), new SoftReference<>(cursor)); } + void unregisterCursor(RCursor cursor) { + activeCursors.remove(cursor.getOwner()); + } + + private void updateCursor(Player player) { if (!activeCursors.containsKey(player)) { return; @@ -85,9 +99,11 @@ public class RCursorManager { @EventHandler private void handlePlayerInteract(PlayerInteractEvent event) { Player player = event.getPlayer(); - RCursor cursorOfPlayer = activeCursors.get(player).get(); - if(cursorOfPlayer == null) return; + SoftReference cursorOfPlayerRef = activeCursors.get(player); + if(cursorOfPlayerRef == null) return; + + RCursor cursorOfPlayer = cursorOfPlayerRef.get(); cursorOfPlayer.handleClick(event.getAction()); }