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 java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class PlayerManager {
@@ -27,30 +26,24 @@ public class PlayerManager {
playerList.put(p.getUniqueId(), playerData);
}
combatTrackerTask = Bukkit.getScheduler().runTaskTimerAsynchronously(TogglePvp.getPlugin(), () -> {
for (Map.Entry<UUID, PlayerData> set : playerList.entrySet()) {
UUID uuid = set.getKey();
PlayerData playerData = set.getValue();
if (!CombatTimer.isInCombat(uuid)) {
if (playerData.getLastCombatCheck()) {
PlayerLeaveCombatEvent playerLeaveCombatEvent = new PlayerLeaveCombatEvent(Bukkit.getPlayer(uuid));
Bukkit.getScheduler().runTask(TogglePvp.getPlugin(), () -> {
Bukkit.getPluginManager().callEvent(playerLeaveCombatEvent);
if (playerLeaveCombatEvent.isCancelled()) {
playerData.setLastCombatCheck(true);
playerData.refreshCombatTime();
} else {
playerData.setLastCombatCheck(false);
playerData.setInCombat(false);
PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getLeaving_combat());
}
});
combatTrackerTask = Bukkit.getScheduler().runTaskTimerAsynchronously(TogglePvp.getPlugin(), () -> playerList.forEach((uuid, playerData) -> {
if (!(!CombatTimer.isInCombat(uuid) && playerData.getLastCombatCheck())) {
PlayerLeaveCombatEvent playerLeaveCombatEvent = new PlayerLeaveCombatEvent(Bukkit.getPlayer(uuid));
Bukkit.getScheduler().runTask(TogglePvp.getPlugin(), () -> {
Bukkit.getPluginManager().callEvent(playerLeaveCombatEvent);
if (playerLeaveCombatEvent.isCancelled()) {
playerData.setLastCombatCheck(true);
playerData.refreshCombatTime();
} 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) {
@@ -4,7 +4,6 @@ import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.api.event.PlayerEnterCombatEvent;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.time.Instant;
import java.util.UUID;
@@ -15,22 +14,20 @@ public class CombatTimer {
long now = Instant.now().getEpochSecond();
long combattime = TogglePvp.getPlugin().getSmartCache().getPlayerData(uuid).getCombattime();
Player player = Bukkit.getPlayer(uuid);
Bukkit.getScheduler().runTask(TogglePvp.getPlugin(), () -> {
PlayerEnterCombatEvent playerEnterCombatEvent = new PlayerEnterCombatEvent(player);
Bukkit.getPluginManager().callEvent(playerEnterCombatEvent);
if (playerEnterCombatEvent.isCancelled())
return;
TogglePvp.getPlugin().getPlayerManager().refreshPlayersCombatTime(uuid);
Player player = Bukkit.getPlayer(uuid);
PlayerEnterCombatEvent playerEnterCombatEvent = new PlayerEnterCombatEvent(player);
Bukkit.getScheduler().runTask(TogglePvp.getPlugin(), () -> {
Bukkit.getPluginManager().callEvent(playerEnterCombatEvent);
if (playerEnterCombatEvent.isCancelled())
return;
TogglePvp.getPlugin().getPlayerManager().refreshPlayersCombatTime(uuid);
if (combattime <= now) {
PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getEntering_combat());
}
});
} catch (Exception ignored) {}
if (combattime <= now) {
PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getEntering_combat());
}
});
} catch (Exception ignored) {
}
}
public static void refreshPlayersCombatTime(UUID attacker_uuid, UUID victim_uuid) {