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
@@ -31,7 +31,7 @@ public class PlayerHitByExplosionListener implements Listener {
UUID damageruuid = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString()); UUID damageruuid = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString());
if (!victim.getUniqueId().equals(damageruuid)) { if (!victim.getUniqueId().equals(damageruuid)) {
ConfigCache config = TogglePvP.getPlugin().getConfigCache(); ConfigCache config = TogglePvP.getPlugin().getConfigCache();
boolean damagerPvpEnabled = (boolean) SmartCache.getPlayerData(damageruuid).get("pvpenabled"); boolean damagerPvpEnabled = SmartCache.getPlayerData(damageruuid).isPvpEnabled();
if (!damagerPvpEnabled) { if (!damagerPvpEnabled) {
PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_attacker()); PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_attacker());
event.setCancelled(true); event.setCancelled(true);
@@ -1,12 +1,12 @@
package eu.endermite.togglepvp.listeners.player; package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvP; import eu.endermite.togglepvp.TogglePvP;
import eu.endermite.togglepvp.players.PlayerData;
import eu.endermite.togglepvp.util.PluginMessages; import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.Player; 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 java.time.Instant; import java.time.Instant;
import java.util.HashMap;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PlayerJoinAndLeaveListener implements Listener { public class PlayerJoinAndLeaveListener implements Listener {
@@ -16,10 +16,8 @@ public class PlayerJoinAndLeaveListener implements Listener {
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onPlayerJoin(org.bukkit.event.player.PlayerJoinEvent event) { public void onPlayerJoin(org.bukkit.event.player.PlayerJoinEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
HashMap<String, Object> playerData;
playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(player.getUniqueId()); PlayerData playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(player.getUniqueId());
playerData.put("cachetime", TogglePvP.getPlugin().getPlayerManager().refreshedCacheTime());
playerData.put("combattime", Instant.now().getEpochSecond()-1);
TogglePvP.getPlugin().getPlayerManager().addPlayer(player.getUniqueId(), playerData); 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())); TogglePvP.getPlugin().getSqLite().updatePlayerInfo(player.getUniqueId(), TogglePvP.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()));
if (TogglePvP.getPlugin().getConfigCache().isPunish_for_combat_logout()) { if (TogglePvP.getPlugin().getConfigCache().isPunish_for_combat_logout()) {
long now = Instant.now().getEpochSecond(); 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) { if (combatTime > now) {
player.setHealth(0); player.setHealth(0);
if (TogglePvP.getPlugin().getConfigCache().isPunish_for_combat_logout_announce()) { if (TogglePvP.getPlugin().getConfigCache().isPunish_for_combat_logout_announce()) {
PluginMessages.broadcastMessage(player, TogglePvP.getPlugin().getConfigCache().getPunish_for_combat_logout_message()); 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);
} }
} }
} }
@@ -22,7 +22,7 @@ public class WolfAttackPlayerListener implements Listener {
Wolf wolf = (Wolf) event.getDamager(); Wolf wolf = (Wolf) event.getDamager();
if (wolf.getOwner() != null && event.getEntity() instanceof Player) { if (wolf.getOwner() != null && event.getEntity() instanceof Player) {
try { try {
boolean damagerPvpEnabled = (boolean) SmartCache.getPlayerData(wolf.getOwner().getUniqueId()).get("pvpenabled"); boolean damagerPvpEnabled = SmartCache.getPlayerData(wolf.getOwner().getUniqueId()).isPvpEnabled();
Player victim = (Player) event.getEntity(); Player victim = (Player) event.getEntity();
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId()); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!victimPvpEnabled || !damagerPvpEnabled) { if (!victimPvpEnabled || !damagerPvpEnabled) {
@@ -72,7 +72,7 @@ public class AreaEffectCloudApplyListener implements Listener {
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker());
continue; continue;
} }
boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled();
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
it.remove(); it.remove();
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim());
@@ -32,7 +32,7 @@ public class EntityHitByLightningListener implements Listener {
} }
} else if (event.getEntity() instanceof Wolf) { } else if (event.getEntity() instanceof Wolf) {
Wolf victim = (Wolf) event.getEntity(); 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) { if (!victimPvpEnabled) {
event.setCancelled(true); event.setCancelled(true);
} }
@@ -52,7 +52,7 @@ public class FishingListener implements Listener {
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
return; return;
} }
boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled();
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
event.setCancelled(true); event.setCancelled(true);
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
@@ -66,7 +66,7 @@ public class LavaDumpAndIgniteListener implements Listener {
return; return;
} }
try { try {
boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled();
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim());
event.setCancelled(true); event.setCancelled(true);
@@ -123,7 +123,7 @@ public class LavaDumpAndIgniteListener implements Listener {
return; return;
} }
try { try {
boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled();
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim());
event.setCancelled(true); event.setCancelled(true);
@@ -34,7 +34,7 @@ public class LightningBlockIgniteListener implements Listener {
if (victim.getOwner() == null) { if (victim.getOwner() == null) {
return; return;
} }
if (!(boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled")) { if (!SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled()) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@@ -61,7 +61,7 @@ public class PlaceWitherRoseListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled();
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim());
event.setCancelled(true); event.setCancelled(true);
@@ -34,7 +34,7 @@ public class PlayerAttackWolfListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(wolf.getOwner().getUniqueId()).get("pvpenabled"); boolean victimPvpEnabled = SmartCache.getPlayerData(wolf.getOwner().getUniqueId()).isPvpEnabled();
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim());
event.setCancelled(true); event.setCancelled(true);
@@ -30,7 +30,7 @@ public class PlayerHitWolfWithProjectile implements Listener {
} }
ConfigCache config = TogglePvP.getPlugin().getConfigCache(); ConfigCache config = TogglePvP.getPlugin().getConfigCache();
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId()); 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) { if (!damagerPvpEnabled) {
event.setCancelled(true); event.setCancelled(true);
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker());
@@ -34,13 +34,13 @@ public class WolfHitByExplosionListener implements Listener {
return; return;
} }
ConfigCache config = TogglePvP.getPlugin().getConfigCache(); ConfigCache config = TogglePvP.getPlugin().getConfigCache();
boolean damagerPvpEnabled = (boolean) SmartCache.getPlayerData(damageruuid).get("pvpenabled"); boolean damagerPvpEnabled = SmartCache.getPlayerData(damageruuid).isPvpEnabled();
if (!damagerPvpEnabled) { if (!damagerPvpEnabled) {
PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_pets_attacker()); PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_pets_attacker());
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled();
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_pets_victim()); PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_pets_victim());
event.setCancelled(true); event.setCancelled(true);
@@ -58,7 +58,7 @@ public class WolfHitBySplashPotionListener implements Listener {
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker());
continue; continue;
} }
boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled();
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
event.setIntensity(victim, 0); event.setIntensity(victim, 0);
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
@@ -25,13 +25,13 @@ public class WolfLeashListener implements Listener {
return; return;
} }
ConfigCache config = TogglePvP.getPlugin().getConfigCache(); ConfigCache config = TogglePvP.getPlugin().getConfigCache();
boolean damagerPvpEnabled = (boolean) SmartCache.getPlayerData(damager.getUniqueId()).get("pvpenabled"); boolean damagerPvpEnabled = SmartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled();
if (!damagerPvpEnabled) { if (!damagerPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker());
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled();
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim());
event.setCancelled(true); event.setCancelled(true);
@@ -19,7 +19,7 @@ public class WolfTargettingPlayerListener implements Listener {
Wolf wolf = (Wolf) event.getEntity(); Wolf wolf = (Wolf) event.getEntity();
if (wolf.getOwner() != null) { if (wolf.getOwner() != null) {
if (event.getTarget() instanceof Player) { 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(); Player victim = (Player) event.getTarget();
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId()); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!attackerPvPEnabled || !victimPvpEnabled) { if (!attackerPvPEnabled || !victimPvpEnabled) {
@@ -16,8 +16,8 @@ public class WolfTargettingWolfListener implements Listener {
Wolf victim = (Wolf) event.getEntity(); Wolf victim = (Wolf) event.getEntity();
if (damager.getOwner() != null && damager.getOwner() != null) { if (damager.getOwner() != null && damager.getOwner() != null) {
try { try {
boolean damagerPvpEnabled = (boolean) SmartCache.getPlayerData(damager.getOwner().getUniqueId()).get("pvpenabled"); boolean damagerPvpEnabled = SmartCache.getPlayerData(damager.getOwner().getUniqueId()).isPvpEnabled();
boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); boolean victimPvpEnabled = SmartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled();
if (!victimPvpEnabled || !damagerPvpEnabled) { if (!victimPvpEnabled || !damagerPvpEnabled) {
damager.setAngry(false); damager.setAngry(false);
event.setCancelled(true); event.setCancelled(true);
@@ -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();
}
}
@@ -11,14 +11,11 @@ import java.util.UUID;
public class PlayerManager { public class PlayerManager {
@Getter HashMap<UUID, HashMap<String, Object>> playerList = new HashMap<>(); @Getter HashMap<UUID, PlayerData> playerList = new HashMap<>();
public PlayerManager() { public PlayerManager() {
for (Player p : Bukkit.getOnlinePlayers()) { for (Player p : Bukkit.getOnlinePlayers()) {
HashMap<String, Object> playerData; PlayerData playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(p.getUniqueId());
playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(p.getUniqueId());
playerData.put("cachetime", refreshedCacheTime());
playerList.put(p.getUniqueId(), playerData); playerList.put(p.getUniqueId(), playerData);
} }
} }
@@ -35,20 +32,20 @@ public class PlayerManager {
} }
public void refreshPlayersCacheTime(UUID uuid) { public void refreshPlayersCacheTime(UUID uuid) {
playerList.get(uuid).replace("cachetime", refreshedCacheTime()); playerList.get(uuid).refreshCachetime();
} }
public void refreshPlayersCombatTime(UUID uuid) { public void refreshPlayersCombatTime(UUID uuid) {
try { try {
playerList.get(uuid).replace("combattime", refreshedCombatTime()); playerList.get(uuid).refreshCombatTime();
} catch (Exception ignored) {} } catch (Exception ignored) {}
} }
public HashMap<String, Object> getPlayer(UUID uuid) { public PlayerData getPlayer(UUID uuid) {
return playerList.get(uuid); return playerList.get(uuid);
} }
public void addPlayer(UUID uuid, HashMap<String,Object> data) { public void addPlayer(UUID uuid, PlayerData data) {
playerList.put(uuid, data); playerList.put(uuid, data);
} }
@@ -57,20 +54,20 @@ public class PlayerManager {
} }
public boolean getPlayerPvPState(UUID uuid) { public boolean getPlayerPvPState(UUID uuid) {
return (boolean) playerList.get(uuid).get("pvpenabled"); return playerList.get(uuid).isPvpEnabled();
} }
public void setPlayerPvpState(UUID uuid, boolean state) { public void setPlayerPvpState(UUID uuid, boolean state) {
playerList.get(uuid).replace("pvpenabled", state); playerList.get(uuid).setPvpEnabled(state);
} }
public boolean togglePlayerPvpState(UUID uuid) { public boolean togglePlayerPvpState(UUID uuid) {
boolean currentState = (boolean) playerList.get(uuid).get("pvpenabled"); boolean currentState = (boolean) playerList.get(uuid).isPvpEnabled();
if (currentState) { if (currentState) {
playerList.get(uuid).replace("pvpenabled", false); playerList.get(uuid).setPvpEnabled(false);
return false; return false;
} else { } else {
playerList.get(uuid).replace("pvpenabled", true); playerList.get(uuid).setPvpEnabled(true);
return true; return true;
} }
} }
@@ -3,40 +3,32 @@ package eu.endermite.togglepvp.players;
import eu.endermite.togglepvp.TogglePvP; import eu.endermite.togglepvp.TogglePvP;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import java.time.Instant; import java.time.Instant;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
public class SmartCache { public class SmartCache {
public static void runSmartCache() { public static void runSmartCache() {
new BukkitRunnable() { Bukkit.getScheduler().runTaskTimerAsynchronously(TogglePvP.getPlugin(), () -> {
@Override // Refresh cache timer if player is online
public void run() { for (Map.Entry<UUID, PlayerData> e : TogglePvP.getPlugin().getPlayerManager().getPlayerList().entrySet()) {
// 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
try { try {
long now = Instant.now().getEpochSecond(); Player player = Bukkit.getPlayer(e.getKey());
TogglePvP.getPlugin().getPlayerManager().getPlayerList().entrySet().removeIf(cacheEntry -> (Long) cacheEntry.getValue().get("cachetime") < now); if (player != null && player.isOnline()) {
} catch (Exception ignored) {} 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 to get data from cache and refresh it
try { try {
TogglePvP.getPlugin().getPlayerManager().refreshPlayersCacheTime(uuid); TogglePvP.getPlugin().getPlayerManager().refreshPlayersCacheTime(uuid);
@@ -44,15 +36,12 @@ public class SmartCache {
} catch (NullPointerException e) { } catch (NullPointerException e) {
// If player data is not in cache get it from database and put into cache // If player data is not in cache get it from database and put into cache
try { try {
HashMap<String, Object> playerData; PlayerData playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(uuid);
playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(uuid);
playerData.put("cachetime", TogglePvP.getPlugin().getPlayerManager().refreshedCacheTime());
playerData.put("combattime", Instant.now().getEpochSecond()-1);
TogglePvP.getPlugin().getPlayerManager().addPlayer(uuid, playerData); TogglePvP.getPlugin().getPlayerManager().addPlayer(uuid, playerData);
return playerData; return playerData;
} catch (NullPointerException ex) { } catch (NullPointerException ex) {
// Return null if database call fails // Return false if database call fails
return null; return new PlayerData(false);
} }
} }
} }
@@ -11,7 +11,7 @@ public class CombatTimer {
public static void refreshPlayersCombatTime(UUID uuid) { public static void refreshPlayersCombatTime(UUID uuid) {
try { try {
long now = Instant.now().getEpochSecond(); long now = Instant.now().getEpochSecond();
long combattime = (long) SmartCache.getPlayerData(uuid).get("combattime"); long combattime = SmartCache.getPlayerData(uuid).getCombattime();
if (combattime < now) { if (combattime < now) {
PluginMessages.sendActionBar(uuid, TogglePvP.getPlugin().getConfigCache().getEntering_combat()); PluginMessages.sendActionBar(uuid, TogglePvP.getPlugin().getConfigCache().getEntering_combat());
} }
@@ -26,7 +26,7 @@ public class CombatTimer {
public static boolean isInCombat(UUID uuid) { public static boolean isInCombat(UUID uuid) {
try { try {
long combattimer = (long) SmartCache.getPlayerData(uuid).get("combattime"); long combattimer = SmartCache.getPlayerData(uuid).getCombattime();
long now = Instant.now().getEpochSecond(); long now = Instant.now().getEpochSecond();
return combattimer > now; return combattimer > now;
} catch (Exception e) { } catch (Exception e) {
@@ -1,6 +1,7 @@
package eu.endermite.togglepvp.util; package eu.endermite.togglepvp.util;
import eu.endermite.togglepvp.TogglePvP; import eu.endermite.togglepvp.TogglePvP;
import eu.endermite.togglepvp.players.PlayerData;
import java.io.File; import java.io.File;
import java.sql.*; import java.sql.*;
@@ -9,8 +10,8 @@ import java.util.UUID;
public class DatabaseSQLite { public class DatabaseSQLite {
private String url; private final String url;
private File folder; private final File folder;
public DatabaseSQLite(String url, File folder) { public DatabaseSQLite(String url, File folder) {
this.url = url; this.url = url;
@@ -48,7 +49,6 @@ public class DatabaseSQLite {
if (conn != null) { if (conn != null) {
conn.close(); conn.close();
} }
return true;
} catch (SQLException ex) { } catch (SQLException ex) {
System.out.println(ex.getMessage()); System.out.println(ex.getMessage());
} }
@@ -56,8 +56,7 @@ public class DatabaseSQLite {
return false; return false;
} }
public HashMap<String, Object> getPlayerInfo(UUID uuid) { public PlayerData getPlayerInfo(UUID uuid) {
HashMap<String, Object> dataHashMap = new HashMap<>();
try { try {
Connection conn = DriverManager.getConnection(url); Connection conn = DriverManager.getConnection(url);
@@ -74,23 +73,21 @@ public class DatabaseSQLite {
String sql = "SELECT * FROM `players` WHERE `player_uuid` = '" + uuid.toString() + "';"; String sql = "SELECT * FROM `players` WHERE `player_uuid` = '" + uuid.toString() + "';";
statement.execute(sql); statement.execute(sql);
ResultSet result = statement.getResultSet(); ResultSet result = statement.getResultSet();
dataHashMap.put("pvpenabled", result.getBoolean("pvpenabled"));
conn.close(); conn.close();
return dataHashMap; return new PlayerData(result.getBoolean("pvpenabled"));
} catch (SQLException throwables) { } catch (SQLException throwables) {
throwables.printStackTrace(); throwables.printStackTrace();
} }
return null; return null;
} }
public void updatePlayerInfo(UUID uuid, HashMap<String, Object> data) { public void updatePlayerInfo(UUID uuid, PlayerData data) {
try { try {
Connection conn = DriverManager.getConnection(url); Connection conn = DriverManager.getConnection(url);
Statement insertnewuser = conn.createStatement(); Statement insertnewuser = conn.createStatement();
try { 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); insertnewuser.execute(newuserdata);
} catch (SQLException e) { } catch (SQLException e) {
TogglePvP.getPlugin().getLogger().severe("Error while saving player data!"); TogglePvP.getPlugin().getLogger().severe("Error while saving player data!");