diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByExplosionListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByExplosionListener.java index 8b57832..5e740aa 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByExplosionListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByExplosionListener.java @@ -31,7 +31,7 @@ public class PlayerHitByExplosionListener implements Listener { UUID damageruuid = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString()); if (!victim.getUniqueId().equals(damageruuid)) { ConfigCache config = TogglePvP.getPlugin().getConfigCache(); - boolean damagerPvpEnabled = (boolean) SmartCache.getPlayerData(damageruuid).get("pvpenabled"); + boolean damagerPvpEnabled = SmartCache.getPlayerData(damageruuid).isPvpEnabled(); if (!damagerPvpEnabled) { PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_attacker()); event.setCancelled(true); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerJoinAndLeaveListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerJoinAndLeaveListener.java index 6ee3f25..7ffba3d 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerJoinAndLeaveListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerJoinAndLeaveListener.java @@ -1,12 +1,12 @@ package eu.endermite.togglepvp.listeners.player; import eu.endermite.togglepvp.TogglePvP; +import eu.endermite.togglepvp.players.PlayerData; import eu.endermite.togglepvp.util.PluginMessages; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import java.time.Instant; -import java.util.HashMap; @eu.endermite.togglepvp.util.Listener public class PlayerJoinAndLeaveListener implements Listener { @@ -16,10 +16,8 @@ public class PlayerJoinAndLeaveListener implements Listener { @EventHandler(ignoreCancelled = true) public void onPlayerJoin(org.bukkit.event.player.PlayerJoinEvent event) { Player player = event.getPlayer(); - HashMap playerData; - playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(player.getUniqueId()); - playerData.put("cachetime", TogglePvP.getPlugin().getPlayerManager().refreshedCacheTime()); - playerData.put("combattime", Instant.now().getEpochSecond()-1); + + PlayerData playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(player.getUniqueId()); TogglePvP.getPlugin().getPlayerManager().addPlayer(player.getUniqueId(), playerData); } /** @@ -32,13 +30,13 @@ public class PlayerJoinAndLeaveListener implements Listener { TogglePvP.getPlugin().getSqLite().updatePlayerInfo(player.getUniqueId(), TogglePvP.getPlugin().getPlayerManager().getPlayer(player.getUniqueId())); if (TogglePvP.getPlugin().getConfigCache().isPunish_for_combat_logout()) { long now = Instant.now().getEpochSecond(); - long combatTime = (long) TogglePvP.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()).get("combattime"); + long combatTime = TogglePvP.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()).getCombattime(); if (combatTime > now) { player.setHealth(0); if (TogglePvP.getPlugin().getConfigCache().isPunish_for_combat_logout_announce()) { PluginMessages.broadcastMessage(player, TogglePvP.getPlugin().getConfigCache().getPunish_for_combat_logout_message()); } - TogglePvP.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()).replace("combattime", now-1); + TogglePvP.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()).setCombattime(now-1); } } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/WolfAttackPlayerListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/WolfAttackPlayerListener.java index 99b6961..45f7821 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/player/WolfAttackPlayerListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/WolfAttackPlayerListener.java @@ -22,7 +22,7 @@ public class WolfAttackPlayerListener implements Listener { Wolf wolf = (Wolf) event.getDamager(); if (wolf.getOwner() != null && event.getEntity() instanceof Player) { try { - boolean damagerPvpEnabled = (boolean) SmartCache.getPlayerData(wolf.getOwner().getUniqueId()).get("pvpenabled"); + boolean damagerPvpEnabled = SmartCache.getPlayerData(wolf.getOwner().getUniqueId()).isPvpEnabled(); Player victim = (Player) event.getEntity(); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId()); if (!victimPvpEnabled || !damagerPvpEnabled) { diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java index 0a14276..6d1282e 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java @@ -72,7 +72,7 @@ public class AreaEffectCloudApplyListener implements Listener { PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); continue; } - boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); + boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); if (!victimPvpEnabled) { it.remove(); PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/EntityHitByLightningListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/EntityHitByLightningListener.java index 711b9b6..73d1d48 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/EntityHitByLightningListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/EntityHitByLightningListener.java @@ -32,7 +32,7 @@ public class EntityHitByLightningListener implements Listener { } } else if (event.getEntity() instanceof Wolf) { Wolf victim = (Wolf) event.getEntity(); - boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); + boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); if (!victimPvpEnabled) { event.setCancelled(true); } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java index 37fce47..9469ad0 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java @@ -52,7 +52,7 @@ public class FishingListener implements Listener { PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); return; } - boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); + boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); if (!victimPvpEnabled) { event.setCancelled(true); PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java index a2c175c..21357cf 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java @@ -66,7 +66,7 @@ public class LavaDumpAndIgniteListener implements Listener { return; } try { - boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); + boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); if (!victimPvpEnabled) { PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); event.setCancelled(true); @@ -123,7 +123,7 @@ public class LavaDumpAndIgniteListener implements Listener { return; } try { - boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); + boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); if (!victimPvpEnabled) { PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); event.setCancelled(true); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LightningBlockIgniteListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LightningBlockIgniteListener.java index b90cfd1..1fe9290 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LightningBlockIgniteListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LightningBlockIgniteListener.java @@ -34,7 +34,7 @@ public class LightningBlockIgniteListener implements Listener { if (victim.getOwner() == null) { return; } - if (!(boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled")) { + if (!SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled()) { event.setCancelled(true); return; } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java index 478187e..4b91f9a 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java @@ -61,7 +61,7 @@ public class PlaceWitherRoseListener implements Listener { event.setCancelled(true); return; } - boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); + boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); if (!victimPvpEnabled) { PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); event.setCancelled(true); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerAttackWolfListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerAttackWolfListener.java index 1dce520..aa607cb 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerAttackWolfListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerAttackWolfListener.java @@ -34,7 +34,7 @@ public class PlayerAttackWolfListener implements Listener { event.setCancelled(true); return; } - boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(wolf.getOwner().getUniqueId()).get("pvpenabled"); + boolean victimPvpEnabled = SmartCache.getPlayerData(wolf.getOwner().getUniqueId()).isPvpEnabled(); if (!victimPvpEnabled) { PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); event.setCancelled(true); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerHitWolfWithProjectile.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerHitWolfWithProjectile.java index 2dee979..7efbc9a 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerHitWolfWithProjectile.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerHitWolfWithProjectile.java @@ -30,7 +30,7 @@ public class PlayerHitWolfWithProjectile implements Listener { } ConfigCache config = TogglePvP.getPlugin().getConfigCache(); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId()); - boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); + boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); if (!damagerPvpEnabled) { event.setCancelled(true); PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByExplosionListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByExplosionListener.java index 30ad44c..4ad1257 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByExplosionListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByExplosionListener.java @@ -34,13 +34,13 @@ public class WolfHitByExplosionListener implements Listener { return; } ConfigCache config = TogglePvP.getPlugin().getConfigCache(); - boolean damagerPvpEnabled = (boolean) SmartCache.getPlayerData(damageruuid).get("pvpenabled"); + boolean damagerPvpEnabled = SmartCache.getPlayerData(damageruuid).isPvpEnabled(); if (!damagerPvpEnabled) { PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_pets_attacker()); event.setCancelled(true); return; } - boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); + boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); if (!victimPvpEnabled) { PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_pets_victim()); event.setCancelled(true); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitBySplashPotionListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitBySplashPotionListener.java index 9f21a84..1d80602 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitBySplashPotionListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitBySplashPotionListener.java @@ -58,7 +58,7 @@ public class WolfHitBySplashPotionListener implements Listener { PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); continue; } - boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); + boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); if (!victimPvpEnabled) { event.setIntensity(victim, 0); PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfLeashListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfLeashListener.java index ffd5c28..02a47f1 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfLeashListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfLeashListener.java @@ -25,13 +25,13 @@ public class WolfLeashListener implements Listener { return; } ConfigCache config = TogglePvP.getPlugin().getConfigCache(); - boolean damagerPvpEnabled = (boolean) SmartCache.getPlayerData(damager.getUniqueId()).get("pvpenabled"); + boolean damagerPvpEnabled = SmartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled(); if (!damagerPvpEnabled) { PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); event.setCancelled(true); return; } - boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); + boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); if (!victimPvpEnabled) { PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); event.setCancelled(true); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingPlayerListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingPlayerListener.java index 1e01116..2153d37 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingPlayerListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingPlayerListener.java @@ -19,7 +19,7 @@ public class WolfTargettingPlayerListener implements Listener { Wolf wolf = (Wolf) event.getEntity(); if (wolf.getOwner() != null) { if (event.getTarget() instanceof Player) { - boolean attackerPvPEnabled = (boolean) SmartCache.getPlayerData(wolf.getOwner().getUniqueId()).get("pvpenabled"); + boolean attackerPvPEnabled = SmartCache.getPlayerData(wolf.getOwner().getUniqueId()).isPvpEnabled(); Player victim = (Player) event.getTarget(); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId()); if (!attackerPvPEnabled || !victimPvpEnabled) { diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingWolfListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingWolfListener.java index f11b428..27fa131 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingWolfListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfTargettingWolfListener.java @@ -16,8 +16,8 @@ public class WolfTargettingWolfListener implements Listener { Wolf victim = (Wolf) event.getEntity(); if (damager.getOwner() != null && damager.getOwner() != null) { try { - boolean damagerPvpEnabled = (boolean) SmartCache.getPlayerData(damager.getOwner().getUniqueId()).get("pvpenabled"); - boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); + boolean damagerPvpEnabled = SmartCache.getPlayerData(damager.getOwner().getUniqueId()).isPvpEnabled(); + boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); if (!victimPvpEnabled || !damagerPvpEnabled) { damager.setAngry(false); event.setCancelled(true); diff --git a/src/main/java/eu/endermite/togglepvp/players/PlayerData.java b/src/main/java/eu/endermite/togglepvp/players/PlayerData.java new file mode 100644 index 0000000..bac14ce --- /dev/null +++ b/src/main/java/eu/endermite/togglepvp/players/PlayerData.java @@ -0,0 +1,45 @@ +package eu.endermite.togglepvp.players; + +import eu.endermite.togglepvp.TogglePvP; + +import java.time.Instant; + +public class PlayerData { + + private long cachetime, combattime; + private boolean pvpEnabled; + + public PlayerData(boolean pvpEnabled) { + this.pvpEnabled = pvpEnabled; + this.combattime = Instant.now().getEpochSecond()-1; + refreshCachetime(); + } + + public boolean isPvpEnabled() { + return pvpEnabled; + } + + public void setPvpEnabled(boolean pvpEnabled) { + this.pvpEnabled = pvpEnabled; + } + + public long getCachetime() { + return cachetime; + } + + public void refreshCachetime() { + this.cachetime = Instant.now().getEpochSecond()+TogglePvP.getPlugin().getConfigCache().getCache_time(); + } + + public long getCombattime() { + return combattime; + } + + public void setCombattime(long combattime) { + this.combattime = combattime; + } + + public void refreshCombatTime() { + this.combattime = Instant.now().getEpochSecond()+TogglePvP.getPlugin().getConfigCache().getCombat_time(); + } +} diff --git a/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java b/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java index 440c343..3ce2aa6 100644 --- a/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java +++ b/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java @@ -11,14 +11,11 @@ import java.util.UUID; public class PlayerManager { - @Getter HashMap> playerList = new HashMap<>(); + @Getter HashMap playerList = new HashMap<>(); public PlayerManager() { - for (Player p : Bukkit.getOnlinePlayers()) { - HashMap playerData; - playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(p.getUniqueId()); - playerData.put("cachetime", refreshedCacheTime()); + PlayerData playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(p.getUniqueId()); playerList.put(p.getUniqueId(), playerData); } } @@ -35,20 +32,20 @@ public class PlayerManager { } public void refreshPlayersCacheTime(UUID uuid) { - playerList.get(uuid).replace("cachetime", refreshedCacheTime()); + playerList.get(uuid).refreshCachetime(); } public void refreshPlayersCombatTime(UUID uuid) { try { - playerList.get(uuid).replace("combattime", refreshedCombatTime()); + playerList.get(uuid).refreshCombatTime(); } catch (Exception ignored) {} } - public HashMap getPlayer(UUID uuid) { + public PlayerData getPlayer(UUID uuid) { return playerList.get(uuid); } - public void addPlayer(UUID uuid, HashMap data) { + public void addPlayer(UUID uuid, PlayerData data) { playerList.put(uuid, data); } @@ -57,20 +54,20 @@ public class PlayerManager { } public boolean getPlayerPvPState(UUID uuid) { - return (boolean) playerList.get(uuid).get("pvpenabled"); + return playerList.get(uuid).isPvpEnabled(); } public void setPlayerPvpState(UUID uuid, boolean state) { - playerList.get(uuid).replace("pvpenabled", state); + playerList.get(uuid).setPvpEnabled(state); } public boolean togglePlayerPvpState(UUID uuid) { - boolean currentState = (boolean) playerList.get(uuid).get("pvpenabled"); + boolean currentState = (boolean) playerList.get(uuid).isPvpEnabled(); if (currentState) { - playerList.get(uuid).replace("pvpenabled", false); + playerList.get(uuid).setPvpEnabled(false); return false; } else { - playerList.get(uuid).replace("pvpenabled", true); + playerList.get(uuid).setPvpEnabled(true); return true; } } diff --git a/src/main/java/eu/endermite/togglepvp/players/SmartCache.java b/src/main/java/eu/endermite/togglepvp/players/SmartCache.java index 971ca57..455bc6b 100644 --- a/src/main/java/eu/endermite/togglepvp/players/SmartCache.java +++ b/src/main/java/eu/endermite/togglepvp/players/SmartCache.java @@ -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> 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 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 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 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); } } } diff --git a/src/main/java/eu/endermite/togglepvp/util/CombatTimer.java b/src/main/java/eu/endermite/togglepvp/util/CombatTimer.java index 7c7fd16..1b4c846 100644 --- a/src/main/java/eu/endermite/togglepvp/util/CombatTimer.java +++ b/src/main/java/eu/endermite/togglepvp/util/CombatTimer.java @@ -11,7 +11,7 @@ public class CombatTimer { public static void refreshPlayersCombatTime(UUID uuid) { try { long now = Instant.now().getEpochSecond(); - long combattime = (long) SmartCache.getPlayerData(uuid).get("combattime"); + long combattime = SmartCache.getPlayerData(uuid).getCombattime(); if (combattime < now) { PluginMessages.sendActionBar(uuid, TogglePvP.getPlugin().getConfigCache().getEntering_combat()); } @@ -26,7 +26,7 @@ public class CombatTimer { public static boolean isInCombat(UUID uuid) { try { - long combattimer = (long) SmartCache.getPlayerData(uuid).get("combattime"); + long combattimer = SmartCache.getPlayerData(uuid).getCombattime(); long now = Instant.now().getEpochSecond(); return combattimer > now; } catch (Exception e) { diff --git a/src/main/java/eu/endermite/togglepvp/util/DatabaseSQLite.java b/src/main/java/eu/endermite/togglepvp/util/DatabaseSQLite.java index d217d92..b6fdcdb 100644 --- a/src/main/java/eu/endermite/togglepvp/util/DatabaseSQLite.java +++ b/src/main/java/eu/endermite/togglepvp/util/DatabaseSQLite.java @@ -1,6 +1,7 @@ package eu.endermite.togglepvp.util; import eu.endermite.togglepvp.TogglePvP; +import eu.endermite.togglepvp.players.PlayerData; import java.io.File; import java.sql.*; @@ -9,8 +10,8 @@ import java.util.UUID; public class DatabaseSQLite { - private String url; - private File folder; + private final String url; + private final File folder; public DatabaseSQLite(String url, File folder) { this.url = url; @@ -48,7 +49,6 @@ public class DatabaseSQLite { if (conn != null) { conn.close(); } - return true; } catch (SQLException ex) { System.out.println(ex.getMessage()); } @@ -56,8 +56,7 @@ public class DatabaseSQLite { return false; } - public HashMap getPlayerInfo(UUID uuid) { - HashMap dataHashMap = new HashMap<>(); + public PlayerData getPlayerInfo(UUID uuid) { try { Connection conn = DriverManager.getConnection(url); @@ -74,23 +73,21 @@ public class DatabaseSQLite { String sql = "SELECT * FROM `players` WHERE `player_uuid` = '" + uuid.toString() + "';"; statement.execute(sql); ResultSet result = statement.getResultSet(); - dataHashMap.put("pvpenabled", result.getBoolean("pvpenabled")); - conn.close(); - return dataHashMap; + return new PlayerData(result.getBoolean("pvpenabled")); } catch (SQLException throwables) { throwables.printStackTrace(); } return null; } - public void updatePlayerInfo(UUID uuid, HashMap data) { + public void updatePlayerInfo(UUID uuid, PlayerData data) { try { Connection conn = DriverManager.getConnection(url); Statement insertnewuser = conn.createStatement(); try { - String newuserdata = "UPDATE `players` SET pvpenabled = "+data.get("pvpenabled")+" WHERE `player_uuid` = '"+uuid.toString()+"';"; + String newuserdata = "UPDATE `players` SET pvpenabled = "+data.isPvpEnabled()+" WHERE `player_uuid` = '"+uuid.toString()+"';"; insertnewuser.execute(newuserdata); } catch (SQLException e) { TogglePvP.getPlugin().getLogger().severe("Error while saving player data!");