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 998d346..915f520 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerJoinAndLeaveListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerJoinAndLeaveListener.java @@ -19,8 +19,6 @@ public class PlayerJoinAndLeaveListener implements Listener { PlayerData playerData = TogglePvp.getPlugin().getSqLite().getPlayerInfo(player.getUniqueId()); - System.out.println(playerData.isPvpEnabled()); - TogglePvp.getPlugin().getPlayerManager().addPlayer(player.getUniqueId(), playerData); } /** diff --git a/src/main/java/eu/endermite/togglepvp/players/PlayerData.java b/src/main/java/eu/endermite/togglepvp/players/PlayerData.java index 521fe95..bef2727 100644 --- a/src/main/java/eu/endermite/togglepvp/players/PlayerData.java +++ b/src/main/java/eu/endermite/togglepvp/players/PlayerData.java @@ -8,10 +8,12 @@ public class PlayerData { private long cachetime, combattime; private boolean pvpEnabled; + private boolean lastCombatCheck; public PlayerData(boolean pvpEnabled) { this.pvpEnabled = pvpEnabled; this.combattime = Instant.now().getEpochSecond()-1; + refreshCachetime(); } @@ -42,4 +44,12 @@ public class PlayerData { public void refreshCombatTime() { this.combattime = Instant.now().getEpochSecond()+ TogglePvp.getPlugin().getConfigCache().getCombat_time(); } + + public boolean getLastCombatCheck() { + return lastCombatCheck; + } + + public void setLastCombatCheck(boolean bool) { + lastCombatCheck = bool; + } } diff --git a/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java b/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java index 335035e..d45af98 100644 --- a/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java +++ b/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java @@ -1,21 +1,42 @@ package eu.endermite.togglepvp.players; import eu.endermite.togglepvp.TogglePvp; +import eu.endermite.togglepvp.util.CombatTimer; +import eu.endermite.togglepvp.util.PluginMessages; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitTask; import java.util.HashMap; +import java.util.Map; import java.util.UUID; public class PlayerManager { - @Getter HashMap playerList = new HashMap<>(); + @Getter + HashMap playerList = new HashMap<>(); + + public final BukkitTask combatTrackerTask; public PlayerManager() { for (Player p : Bukkit.getOnlinePlayers()) { PlayerData playerData = TogglePvp.getPlugin().getSqLite().getPlayerInfo(p.getUniqueId()); playerList.put(p.getUniqueId(), playerData); } + + combatTrackerTask = Bukkit.getScheduler().runTaskTimerAsynchronously(TogglePvp.getPlugin(), () -> { + for (Map.Entry set : playerList.entrySet()) { + UUID uuid = set.getKey(); + if (!CombatTimer.isInCombat(uuid)) { + if (set.getValue().getLastCombatCheck()) { + set.getValue().setLastCombatCheck(false); + PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getLeaving_combat()); + } + } else { + set.getValue().setLastCombatCheck(true); + } + } + }, 20, 20); } public void refreshPlayersCacheTime(UUID uuid) { @@ -25,7 +46,7 @@ public class PlayerManager { public void refreshPlayersCombatTime(UUID uuid) { try { playerList.get(uuid).refreshCombatTime(); - } catch (Exception ignored) {} + } catch (Exception ignored) { } } public PlayerData getPlayer(UUID uuid) { @@ -36,25 +57,21 @@ public class PlayerManager { playerList.put(uuid, data); } - public void removePlayer(UUID uuid) { - playerList.remove(uuid); - } - public boolean getPlayerPvPState(UUID uuid) { - return playerList.get(uuid).isPvpEnabled(); + return TogglePvp.getPlugin().getSmartCache().getPlayerData(uuid).isPvpEnabled(); } public void setPlayerPvpState(UUID uuid, boolean state) { - playerList.get(uuid).setPvpEnabled(state); + TogglePvp.getPlugin().getSmartCache().getPlayerData(uuid).setPvpEnabled(state); } public boolean togglePlayerPvpState(UUID uuid) { - boolean currentState = playerList.get(uuid).isPvpEnabled(); - if (currentState) { - playerList.get(uuid).setPvpEnabled(false); + SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); + if (smartCache.getPlayerData(uuid).isPvpEnabled()) { + smartCache.getPlayerData(uuid).setPvpEnabled(false); return false; } else { - playerList.get(uuid).setPvpEnabled(true); + smartCache.getPlayerData(uuid).setPvpEnabled(true); return true; } } diff --git a/src/main/java/eu/endermite/togglepvp/util/CombatTimer.java b/src/main/java/eu/endermite/togglepvp/util/CombatTimer.java index dfb2d25..00ad893 100644 --- a/src/main/java/eu/endermite/togglepvp/util/CombatTimer.java +++ b/src/main/java/eu/endermite/togglepvp/util/CombatTimer.java @@ -1,7 +1,6 @@ package eu.endermite.togglepvp.util; import eu.endermite.togglepvp.TogglePvp; -import eu.endermite.togglepvp.players.SmartCache; import java.time.Instant; import java.util.UUID;