forked from SteamWar/SteamWar
Remove softRef construct, add onPlayerLeave cleanup
This commit is contained in:
+16
-18
@@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user