Updated APIPlayer Caching

---Untested Code---

Updated the BukkitPlayer caching objects to use UUIDs instead of Player objects as Player objects generate a new hash when rejoining the server and get out of sync therefore will horde memory and stay unavailable till the programs termination.
This commit is contained in:
Kekschen
2022-02-20 21:59:54 +01:00
parent e03deb6ba6
commit 58b48dceb4
@@ -11,7 +11,7 @@ import java.util.stream.Collectors;
public class BukkitPlayerExecutor implements PlayerExecutor {
private final Map<Player, BukkitPlayer> cachedPlayers = new WeakHashMap<>();
private final Map<UUID, BukkitPlayer> cachedPlayers = new WeakHashMap<>();
@Override
public Optional<APIPlayer> getPlayer(String name) {
@@ -21,7 +21,7 @@ public class BukkitPlayerExecutor implements PlayerExecutor {
return Optional.empty();
}
return Optional.of(cachedPlayers.computeIfAbsent(player, BukkitPlayer::new));
return Optional.of(cachedPlayers.getOrDefault(player.getUniqueId(), new BukkitPlayer(player)));
}
@Override
@@ -32,14 +32,14 @@ public class BukkitPlayerExecutor implements PlayerExecutor {
return Optional.empty();
}
return Optional.of(cachedPlayers.computeIfAbsent(player, BukkitPlayer::new));
return Optional.of(cachedPlayers.getOrDefault(player.getUniqueId(), new BukkitPlayer(player)));
}
@Override
public List<APIPlayer> getOnlinePlayers() {
return Bukkit.getOnlinePlayers().stream()
.map(pl -> cachedPlayers.computeIfAbsent(pl, BukkitPlayer::new))
.map(pl -> cachedPlayers.getOrDefault(pl.getUniqueId(), new BukkitPlayer(pl)))
.collect(Collectors.toList());
}