Fixed CME when refreshing combat

This commit is contained in:
YouHaveTrouble
2021-03-16 19:13:55 +01:00
parent 3b56d57faf
commit 1fa2a6f6a8
2 changed files with 29 additions and 39 deletions
@@ -11,7 +11,6 @@ import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
import java.time.Instant; import java.time.Instant;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map;
import java.util.UUID; import java.util.UUID;
public class PlayerManager { public class PlayerManager {
@@ -27,30 +26,24 @@ public class PlayerManager {
playerList.put(p.getUniqueId(), playerData); playerList.put(p.getUniqueId(), playerData);
} }
combatTrackerTask = Bukkit.getScheduler().runTaskTimerAsynchronously(TogglePvp.getPlugin(), () -> { combatTrackerTask = Bukkit.getScheduler().runTaskTimerAsynchronously(TogglePvp.getPlugin(), () -> playerList.forEach((uuid, playerData) -> {
for (Map.Entry<UUID, PlayerData> set : playerList.entrySet()) { if (!(!CombatTimer.isInCombat(uuid) && playerData.getLastCombatCheck())) {
UUID uuid = set.getKey(); PlayerLeaveCombatEvent playerLeaveCombatEvent = new PlayerLeaveCombatEvent(Bukkit.getPlayer(uuid));
PlayerData playerData = set.getValue(); Bukkit.getScheduler().runTask(TogglePvp.getPlugin(), () -> {
if (!CombatTimer.isInCombat(uuid)) { Bukkit.getPluginManager().callEvent(playerLeaveCombatEvent);
if (playerData.getLastCombatCheck()) { if (playerLeaveCombatEvent.isCancelled()) {
PlayerLeaveCombatEvent playerLeaveCombatEvent = new PlayerLeaveCombatEvent(Bukkit.getPlayer(uuid)); playerData.setLastCombatCheck(true);
Bukkit.getScheduler().runTask(TogglePvp.getPlugin(), () -> { playerData.refreshCombatTime();
Bukkit.getPluginManager().callEvent(playerLeaveCombatEvent); } else {
if (playerLeaveCombatEvent.isCancelled()) { playerData.setLastCombatCheck(false);
playerData.setLastCombatCheck(true); playerData.setInCombat(false);
playerData.refreshCombatTime(); PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getLeaving_combat());
} else {
playerData.setLastCombatCheck(false);
playerData.setInCombat(false);
PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getLeaving_combat());
}
});
} }
} else { });
set.getValue().setLastCombatCheck(true); } else {
} playerData.setLastCombatCheck(true);
} }
}, 20, 20); }), 20, 20);
} }
public void refreshPlayersCacheTime(UUID uuid) { public void refreshPlayersCacheTime(UUID uuid) {
@@ -4,7 +4,6 @@ import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.api.event.PlayerEnterCombatEvent; import eu.endermite.togglepvp.api.event.PlayerEnterCombatEvent;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.time.Instant; import java.time.Instant;
import java.util.UUID; import java.util.UUID;
@@ -15,22 +14,20 @@ public class CombatTimer {
long now = Instant.now().getEpochSecond(); long now = Instant.now().getEpochSecond();
long combattime = TogglePvp.getPlugin().getSmartCache().getPlayerData(uuid).getCombattime(); long combattime = TogglePvp.getPlugin().getSmartCache().getPlayerData(uuid).getCombattime();
Player player = Bukkit.getPlayer(uuid); Player player = Bukkit.getPlayer(uuid);
Bukkit.getScheduler().runTask(TogglePvp.getPlugin(), () -> { PlayerEnterCombatEvent playerEnterCombatEvent = new PlayerEnterCombatEvent(player);
PlayerEnterCombatEvent playerEnterCombatEvent = new PlayerEnterCombatEvent(player); Bukkit.getScheduler().runTask(TogglePvp.getPlugin(), () -> {
Bukkit.getPluginManager().callEvent(playerEnterCombatEvent); Bukkit.getPluginManager().callEvent(playerEnterCombatEvent);
if (playerEnterCombatEvent.isCancelled()) if (playerEnterCombatEvent.isCancelled())
return; return;
TogglePvp.getPlugin().getPlayerManager().refreshPlayersCombatTime(uuid); TogglePvp.getPlugin().getPlayerManager().refreshPlayersCombatTime(uuid);
if (combattime <= now) { if (combattime <= now) {
PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getEntering_combat()); PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getEntering_combat());
} }
}); });
} catch (Exception ignored) {
}
} catch (Exception ignored) {}
} }
public static void refreshPlayersCombatTime(UUID attacker_uuid, UUID victim_uuid) { public static void refreshPlayersCombatTime(UUID attacker_uuid, UUID victim_uuid) {