diff --git a/src/main/java/eu/endermite/togglepvp/TogglePvp.java b/src/main/java/eu/endermite/togglepvp/TogglePvp.java index 164f79f..3fad42e 100644 --- a/src/main/java/eu/endermite/togglepvp/TogglePvp.java +++ b/src/main/java/eu/endermite/togglepvp/TogglePvp.java @@ -64,8 +64,6 @@ public final class TogglePvp extends JavaPlugin { } public void reloadPluginConfig() { - saveDefaultConfig(); - reloadConfig(); configCache = new ConfigCache(); } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerDeathListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerDeathListener.java new file mode 100644 index 0000000..58ffee1 --- /dev/null +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerDeathListener.java @@ -0,0 +1,27 @@ +package eu.endermite.togglepvp.listeners.player; + +import eu.endermite.togglepvp.TogglePvp; +import eu.endermite.togglepvp.players.PlayerData; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +@eu.endermite.togglepvp.util.Listener +public class PlayerDeathListener implements Listener { + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onPlayerDeath(org.bukkit.event.entity.EntityDeathEvent event) { + + if (!(event.getEntity() instanceof Player)) + return; + + Player player = (Player) event.getEntity(); + + PlayerData playerData = TogglePvp.getPlugin().getSmartCache().getPlayerData(player.getUniqueId()); + playerData.setCombattime(0); + playerData.setLastCombatCheck(false); + playerData.setInCombat(false); + } + +} 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 5a62edb..155aa8d 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerJoinAndLeaveListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerJoinAndLeaveListener.java @@ -35,18 +35,15 @@ public class PlayerJoinAndLeaveListener implements Listener { return; SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); - long now = Instant.now().getEpochSecond(); - long combatTime = smartCache.getPlayerData(player.getUniqueId()).getCombattime(); + PlayerData playerData = smartCache.getPlayerData(player.getUniqueId()); - if (combatTime <= now) + if (!playerData.isInCombat()) return; player.setHealth(0); if (TogglePvp.getPlugin().getConfigCache().isPunish_for_combat_logout_announce()) PluginMessages.broadcastMessage(player, TogglePvp.getPlugin().getConfigCache().getPunish_for_combat_logout_message()); - PlayerData playerData = TogglePvp.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()); - playerData.setCombattime(now - 1); } } diff --git a/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java b/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java index 6a4b9a3..c7272b3 100644 --- a/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java +++ b/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java @@ -9,6 +9,7 @@ import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitTask; + import java.time.Instant; import java.util.HashMap; import java.util.UUID; @@ -26,30 +27,28 @@ public class PlayerManager { playerList.put(p.getUniqueId(), playerData); } - combatTrackerTask = Bukkit.getScheduler().runTaskTimerAsynchronously(TogglePvp.getPlugin(), () -> { - playerList.forEach(((uuid, playerData) -> { - if (!CombatTimer.isInCombat(uuid)) { - if (playerData.getLastCombatCheck()) { - Player player = Bukkit.getPlayer(uuid); - if (player == null) + combatTrackerTask = Bukkit.getScheduler().runTaskTimerAsynchronously(TogglePvp.getPlugin(), () -> playerList.forEach(((uuid, playerData) -> { + if (!CombatTimer.isInCombat(uuid)) { + if (playerData.getLastCombatCheck()) { + Player player = Bukkit.getPlayer(uuid); + if (player == null) + return; + PlayerLeaveCombatEvent playerLeaveCombatEvent = new PlayerLeaveCombatEvent(player); + Bukkit.getScheduler().runTask(TogglePvp.getPlugin(), () -> { + Bukkit.getPluginManager().callEvent(playerLeaveCombatEvent); + if (playerLeaveCombatEvent.isCancelled()) { + playerData.refreshCombatTime(); return; - PlayerLeaveCombatEvent playerLeaveCombatEvent = new PlayerLeaveCombatEvent(player); - Bukkit.getScheduler().runTask(TogglePvp.getPlugin(), () -> { - Bukkit.getPluginManager().callEvent(playerLeaveCombatEvent); - if (playerLeaveCombatEvent.isCancelled()) { - playerData.refreshCombatTime(); - return; - } - playerData.setLastCombatCheck(false); - playerData.setInCombat(false); - PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getLeaving_combat()); - }); - } - } else { - playerData.setLastCombatCheck(true); + } + playerData.setLastCombatCheck(false); + playerData.setInCombat(false); + PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getLeaving_combat()); + }); } - })); - }, 20, 20); + } else { + playerData.setLastCombatCheck(true); + } + })), 20, 20); } @@ -62,6 +61,10 @@ public class PlayerManager { PlayerData data = playerList.get(uuid); if (data == null) return; + Player player = Bukkit.getPlayer(uuid); + if (player == null || player.isDead()) + return; + data.refreshCombatTime(); data.setInCombat(true); } catch (Exception ignored) { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml deleted file mode 100644 index cd0f5f0..0000000 --- a/src/main/resources/config.yml +++ /dev/null @@ -1,52 +0,0 @@ -settings: - # Decides if pvp should be enabled or disabled by default - pvp_enabled_by_default: false - - # Prevents dumping lava and pufferfish bucket, placing wither roses and lighting blocks on fire near players with pvp off - lava_and_fire_stopper: - enabled: true - radius: 2.5 - - # Disables channeling (trident enchant) lightning strike - # You may want to keep it disabled because players with pvp off can use it to attack players with pvp on - channeling_enchant_disabled: false - - # Makes it so only pet owner can interact with it. - # Useful if you don't want people renaming other people's pets. - only_owner_can_interact_with_pet: false - - # Time (in seconds) to keep player in combat - combat_time: 25 - - # Time (in seconds) that player can't be harmed by other player after logging in - login_protection_time: 0 - - # Time (in seconds) that player can't be harmed by other player after teleporting - teleport_protection_time: 0 - - - # Kill the player if they log out during combat - punish_for_combat_logout: - enabled: true - announce: true - message: "&f%player% logged out while in combat. What a loser." - - # Time (in seconds) to keep player data in memory when players goes offline. - # This is used for checking if offline players pvp state. - # Adjust only if you know what you're doing. NEVER set to less than 6. - cache_time: 30 - -messages: - pvp_enabled: "&cYou enabled PvP!" - pvp_disabled: "&cYou disabled PvP!" - cannot_attack_victim: "&cYou can't attack players that have PvP turned off!" - cannot_attack_attacker: "&cYou can't attack players while you have PvP turned off!" - cannot_attack_pets_victim: "&cYou can't attack pets of players that have PvP turned off" - cannot_attack_pets_attacker: "&cYou can't attack pets while you have PvP turned off" - no_permission: "&cYou don't have permission to use that." - no_such_command: "&cNo such command." - pvp_enabled_others: "&cYou've enabled %player%'s PvP." - pvp_disabled_others: "&cYou've disabled %player%'s PvP." - entering_combat: "&cEntering combat" - leaving_combat: "&cLeaving combat" - cant_do_that_during_combat: "&cYou can't do that while in combat!"