Added cleanup of cursor

This commit is contained in:
D4rkr34lm
2025-05-08 17:56:12 +02:00
parent 67c679a20f
commit 42c9d6d612
2 changed files with 25 additions and 4 deletions
@@ -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) -> {
@@ -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<RCursor> 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<RCursor> cursorOfPlayerRef = activeCursors.get(player);
if(cursorOfPlayerRef == null) return;
RCursor cursorOfPlayer = cursorOfPlayerRef.get();
cursorOfPlayer.handleClick(event.getAction());
}