use object for PlayerData instead of hashmap

This commit is contained in:
YouHaveTrouble
2021-02-19 02:54:51 +01:00
parent b9a4286a64
commit 905861079f
21 changed files with 107 additions and 81 deletions
@@ -3,40 +3,32 @@ package eu.endermite.togglepvp.players;
import eu.endermite.togglepvp.TogglePvP;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import java.time.Instant;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
public class SmartCache {
public static void runSmartCache() {
new BukkitRunnable() {
@Override
public void run() {
// Refresh cache timer if player is online
for (Map.Entry<UUID, HashMap<String, Object>> e : TogglePvP.getPlugin().getPlayerManager().getPlayerList().entrySet()) {
try {
Player player = Bukkit.getPlayer(e.getKey());
if (player.isOnline()) {
TogglePvP.getPlugin().getPlayerManager().refreshPlayersCacheTime(e.getKey());
}
} catch (NullPointerException ignored) {}
}
// Check for entries that should be invalidated
Bukkit.getScheduler().runTaskTimerAsynchronously(TogglePvP.getPlugin(), () -> {
// Refresh cache timer if player is online
for (Map.Entry<UUID, PlayerData> e : TogglePvP.getPlugin().getPlayerManager().getPlayerList().entrySet()) {
try {
long now = Instant.now().getEpochSecond();
TogglePvP.getPlugin().getPlayerManager().getPlayerList().entrySet().removeIf(cacheEntry -> (Long) cacheEntry.getValue().get("cachetime") < now);
} catch (Exception ignored) {}
Player player = Bukkit.getPlayer(e.getKey());
if (player != null && player.isOnline()) {
TogglePvP.getPlugin().getPlayerManager().refreshPlayersCacheTime(e.getKey());
}
} catch (NullPointerException ignored) {}
}
}.runTaskTimerAsynchronously(TogglePvP.getPlugin(), 100, 100);
// Check for entries that should be invalidated
try {
long now = Instant.now().getEpochSecond();
TogglePvP.getPlugin().getPlayerManager().getPlayerList().entrySet().removeIf(cacheEntry -> cacheEntry.getValue().getCachetime() < now);
} catch (Exception ignored) {}
}, 100, 100);
}
public static HashMap<String, Object> getPlayerData(UUID uuid) {
public static PlayerData getPlayerData(UUID uuid) {
// Try to get data from cache and refresh it
try {
TogglePvP.getPlugin().getPlayerManager().refreshPlayersCacheTime(uuid);
@@ -44,15 +36,12 @@ public class SmartCache {
} catch (NullPointerException e) {
// If player data is not in cache get it from database and put into cache
try {
HashMap<String, Object> playerData;
playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(uuid);
playerData.put("cachetime", TogglePvP.getPlugin().getPlayerManager().refreshedCacheTime());
playerData.put("combattime", Instant.now().getEpochSecond()-1);
PlayerData playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(uuid);
TogglePvP.getPlugin().getPlayerManager().addPlayer(uuid, playerData);
return playerData;
} catch (NullPointerException ex) {
// Return null if database call fails
return null;
// Return false if database call fails
return new PlayerData(false);
}
}
}