Remove softRef construct, add onPlayerLeave cleanup

This commit is contained in:
D4rkr34lm
2025-05-08 20:58:16 +02:00
parent 7a000efb93
commit a3d2d2be1e
@@ -10,6 +10,7 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import java.lang.ref.SoftReference; import java.lang.ref.SoftReference;
import java.util.HashMap; import java.util.HashMap;
@@ -24,7 +25,7 @@ public class RCursorManager implements Listener {
private static RCursorManager instance; private static RCursorManager instance;
private final Set<Player> calculationActive = new HashSet<>(); private final Set<Player> calculationActive = new HashSet<>();
private final Map<Player, SoftReference<RCursor>> activeCursors = new HashMap<>(); private final Map<Player, RCursor> activeCursors = new HashMap<>();
public RCursorManager() { public RCursorManager() {
if (instance == null) { if (instance == null) {
@@ -54,7 +55,7 @@ public class RCursorManager implements Listener {
void registerCursor(RCursor cursor) { void registerCursor(RCursor cursor) {
closeCursorOf(cursor.getOwner()); closeCursorOf(cursor.getOwner());
activeCursors.put(cursor.getOwner(), new SoftReference<>(cursor)); activeCursors.put(cursor.getOwner(), cursor);
} }
void unregisterCursor(RCursor cursor) { void unregisterCursor(RCursor cursor) {
@@ -62,13 +63,12 @@ public class RCursorManager implements Listener {
} }
private void closeCursorOf(Player player) { private void closeCursorOf(Player player) {
SoftReference<RCursor> currentPlayerCursorRef = activeCursors.get(player); RCursor currentPlayerCursor = activeCursors.get(player);
if(currentPlayerCursorRef != null) {
RCursor currentCursor = currentPlayerCursorRef.get(); if(currentPlayerCursor != null) {
if(currentCursor != null) { currentPlayerCursor.close();
currentCursor.close();
};
}; };
} }
@@ -85,13 +85,9 @@ public class RCursorManager implements Listener {
} }
} }
SoftReference<RCursor> cursorRef = activeCursors.get(player); RCursor cursor = activeCursors.get(player);
RCursor cursor = cursorRef.get(); if (cursor != null) {
if (cursor == null) {
activeCursors.remove(player);
} else {
cursor.render(); cursor.render();
} }
@@ -104,11 +100,13 @@ public class RCursorManager implements Listener {
private void handlePlayerInteract(PlayerInteractEvent event) { private void handlePlayerInteract(PlayerInteractEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
SoftReference<RCursor> cursorOfPlayerRef = activeCursors.get(player); RCursor cursorOfPlayer = activeCursors.get(player);
if(cursorOfPlayerRef == null) return;
RCursor cursorOfPlayer = cursorOfPlayerRef.get();
cursorOfPlayer.handleClick(event.getAction()); cursorOfPlayer.handleClick(event.getAction());
} }
@EventHandler
private void handlePlayerQuit(PlayerQuitEvent event) {
closeCursorOf(event.getPlayer());
}
} }