Compare commits

...

8 Commits

Author SHA1 Message Date
YouHaveTrouble 44ac3aa0f3 fix config 2021-03-18 21:03:13 +01:00
YouHaveTrouble 9249fe754b removed unused config code 2021-03-18 00:55:58 +01:00
YouHaveTrouble 5a7b38e62f fix tracker. again. 2021-03-17 20:56:08 +01:00
YouHaveTrouble 9d45a1ea02 bump version 2021-03-17 19:15:44 +01:00
YouHaveTrouble b78c7ecd90 always refresh cache when in combat 2021-03-17 19:14:25 +01:00
YouHaveTrouble 1fa2a6f6a8 Fixed CME when refreshing combat 2021-03-16 19:13:55 +01:00
YouHaveTrouble 3b56d57faf fixed bugs with events 2021-03-12 04:07:36 +01:00
YouHaveTrouble 477eb7f5de added combat events 2021-03-12 02:05:29 +01:00
13 changed files with 261 additions and 106 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
<groupId>eu.endermite</groupId> <groupId>eu.endermite</groupId>
<artifactId>TogglePvP</artifactId> <artifactId>TogglePvP</artifactId>
<version>1.1</version> <version>1.2</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>TogglePvP</name> <name>TogglePvP</name>
@@ -8,13 +8,12 @@ import eu.endermite.togglepvp.util.Listener;
import eu.endermite.togglepvp.util.DatabaseSQLite; import eu.endermite.togglepvp.util.DatabaseSQLite;
import lombok.Getter; import lombok.Getter;
import org.bstats.bukkit.Metrics; import org.bstats.bukkit.Metrics;
import org.bstats.charts.CustomChart;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.PluginCommand;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.reflections.Reflections; import org.reflections.Reflections;
import java.io.File; import java.io.File;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.Objects;
import java.util.Set; import java.util.Set;
public final class TogglePvp extends JavaPlugin { public final class TogglePvp extends JavaPlugin {
@@ -57,16 +56,20 @@ public final class TogglePvp extends JavaPlugin {
}); });
// Register command // Register command
Objects.requireNonNull(getCommand("pvp")).setExecutor(new MainCommand()); PluginCommand pvpCommand = getCommand("pvp");
Objects.requireNonNull(getCommand("pvp")).setTabCompleter(new MainCommand()); if (pvpCommand == null) {
getLogger().severe("Error with registering commands.");
getLogger().severe("Plugin will now disable.");
getServer().getPluginManager().disablePlugin(this);
}
MainCommand mainCommand = new MainCommand();
pvpCommand.setExecutor(mainCommand);
pvpCommand.setTabCompleter(mainCommand);
Metrics metrics = new Metrics(this, 10597); Metrics metrics = new Metrics(this, 10597);
} }
public void reloadPluginConfig() { public void reloadPluginConfig() {
saveDefaultConfig();
reloadConfig();
configCache = new ConfigCache(); configCache = new ConfigCache();
} }
@@ -74,6 +74,24 @@ public class TogglePvpAPI {
return TogglePvp.getPlugin().getPlayerManager().hasLoginProtection(uuid); return TogglePvp.getPlugin().getPlayerManager().hasLoginProtection(uuid);
} }
/**
* Checks if player has teleport protection.
* @param player Player to check
* @return True if player has teleport protection, false if not
*/
public static boolean hasTeleportProtection(Player player) {
return TogglePvp.getPlugin().getPlayerManager().hasLoginProtection(player.getUniqueId());
}
/**
* Checks if player has teleport protection.
* @param uuid UUID of player to check
* @return True if player has teleport protection, false if not
*/
public static boolean hasTeleportProtection(UUID uuid) {
return TogglePvp.getPlugin().getPlayerManager().hasLoginProtection(uuid);
}
/** /**
* Checks if player has login protection. * Checks if player has login protection.
* @param player Player to check * @param player Player to check
@@ -0,0 +1,48 @@
package eu.endermite.togglepvp.api.event;
import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.players.PlayerData;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
/**
* Fired when player enters combat.
*/
public class PlayerEnterCombatEvent extends Event implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList();
private final Player player;
private boolean cancelled;
public PlayerEnterCombatEvent(Player player) {
this.player = player;
this.cancelled = false;
}
public Player getPlayer() {
return player;
}
public PlayerData getPlayerData() {
return TogglePvp.getPlugin().getPlayerManager().getPlayer(player.getUniqueId());
}
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean cancel) {
cancelled = cancel;
}
@NotNull
@Override
public HandlerList getHandlers() {
return HANDLERS;
}
}
@@ -0,0 +1,48 @@
package eu.endermite.togglepvp.api.event;
import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.players.PlayerData;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
/**
* Fired when player leaves combat. If cancelled, it will refresh combat timer to the value set in the config.
*/
public class PlayerLeaveCombatEvent extends Event implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList();
private final Player player;
private boolean cancelled;
public PlayerLeaveCombatEvent(Player player) {
this.player = player;
this.cancelled = false;
}
public Player getPlayer() {
return player;
}
public PlayerData getPlayerData() {
return TogglePvp.getPlugin().getPlayerManager().getPlayer(player.getUniqueId());
}
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean cancel) {
cancelled = cancel;
}
@NotNull
@Override
public HandlerList getHandlers() {
return HANDLERS;
}
}
@@ -10,7 +10,8 @@ public class ConfigCache {
private final TogglePvp plugin = TogglePvp.getPlugin(); private final TogglePvp plugin = TogglePvp.getPlugin();
@Getter private final boolean pvp_enabled_by_default, lava_and_fire_stopper_enabled, channeling_enchant_disabled, @Getter private final boolean pvp_enabled_by_default, lava_and_fire_stopper_enabled, channeling_enchant_disabled,
punish_for_combat_logout, punish_for_combat_logout_announce, only_owner_can_interact_with_pet; punish_for_combat_logout, punish_for_combat_logout_announce, only_owner_can_interact_with_pet,
snowballs_knockback, egg_knockback;
@Getter private final String pvp_enabled, pvp_disabled, cannot_attack_victim, cannot_attack_attacker, @Getter private final String pvp_enabled, pvp_disabled, cannot_attack_victim, cannot_attack_attacker,
cannot_attack_pets_victim, cannot_attack_pets_attacker, no_permission, no_such_command, pvp_enabled_other, cannot_attack_pets_victim, cannot_attack_pets_attacker, no_permission, no_such_command, pvp_enabled_other,
pvp_disabled_other, punish_for_combat_logout_message, entering_combat, leaving_combat, pvp_disabled_other, punish_for_combat_logout_message, entering_combat, leaving_combat,
@@ -24,28 +25,32 @@ public class ConfigCache {
@Override @Override
public void loadDefaults() { public void loadDefaults() {
addDefault("settings.pvp_enabled_by_default", "false", "Decides if pvp should be enabled or disabled by default"); addDefault("settings.pvp_enabled_by_default", false, "Decides if pvp should be enabled or disabled by default");
addComment("settings.lava_and_fire_stopper", "Prevents dumping lava and pufferfish bucket, placing wither roses and lighting blocks on fire near players with pvp off"); addComment("settings.lava_and_fire_stopper", "Prevents dumping lava and pufferfish bucket, placing wither roses and lighting blocks on fire near players with pvp off");
addDefault("settings.lava_and_fire_stopper.enabled", "true"); addDefault("settings.lava_and_fire_stopper.enabled", true);
addDefault("settings.lava_and_fire_stopper.radius", "2.5"); addDefault("settings.lava_and_fire_stopper.radius", 2.5);
addDefault("settings.channeling_enchant_disabled", "false", "Disables channeling (trident enchant) lightning strike.\nYou may want to keep it disabled because players with pvp off can use it to attack players with pvp on"); addDefault("settings.channeling_enchant_disabled", false, "Disables channeling (trident enchant) lightning strike.\nYou may want to keep it disabled because players with pvp off can use it to attack players with pvp on");
addDefault("settings.only_owner_can_interact_with_pet", "false", "Makes it so only pet owner can interact with it. Useful if you don't want people renaming other people's pets."); addDefault("settings.only_owner_can_interact_with_pet", false, "Makes it so only pet owner can interact with it. Useful if you don't want people renaming other people's pets.");
addDefault("settings.combat_time", "25", "Time (in seconds) to keep player in combat"); addDefault("settings.combat_time", 25, "Time (in seconds) to keep player in combat");
addDefault("settings.login_protection_time", "0", "Time (in seconds) that player can't be harmed by other player after logging in"); addDefault("settings.login_protection_time", 0, "Time (in seconds) that player can't be harmed by other player after logging in");
addDefault("settings.teleport_protection_time", "0", "Time (in seconds) that player can't be harmed by other player after teleporting"); addDefault("settings.teleport_protection_time", 0, "Time (in seconds) that player can't be harmed by other player after teleporting");
addComment("settings.punish_for_combat_logout", "Kill the player if they log out during combat"); addComment("settings.punish_for_combat_logout", "Kill the player if they log out during combat");
addDefault("settings.punish_for_combat_logout.enabled", "true"); addDefault("settings.punish_for_combat_logout.enabled", true);
addDefault("settings.punish_for_combat_logout.announce", "true"); addDefault("settings.punish_for_combat_logout.announce", true);
addDefault("settings.punish_for_combat_logout.message", "&f%player% logged out while in combat. What a loser."); addDefault("settings.punish_for_combat_logout.message", "&f%player% logged out while in combat. What a loser.");
addDefault("settings.cache_time", "30", "Time (in seconds) to keep player data in memory when players goes offline.\nThis is used for checking if offline players pvp state.\nAdjust only if you know what you're doing. NEVER set to less than 6."); addDefault("settings.snowballs_do_knockback", false, "Set to true if snowballs should cause knockback to players");
addDefault("settings.eggs_do_knockback", false, "Set to true if eggs should cause knockback to players");
addDefault("settings.cache_time", 30, "Time (in seconds) to keep player data in memory when players goes offline.\nThis is used for checking if offline players pvp state.\nAdjust only if you know what you're doing. NEVER set to less than 6.");
addDefault("messages.pvp_enabled", "&cYou enabled PvP!"); addDefault("messages.pvp_enabled", "&cYou enabled PvP!");
addDefault("messages.pvp_disabled", "&cYou disabled PvP!"); addDefault("messages.pvp_disabled", "&cYou disabled PvP!");
@@ -83,6 +88,10 @@ public class ConfigCache {
this.punish_for_combat_logout_announce = config.getBoolean("settings.punish_for_combat_logout.announce", true); this.punish_for_combat_logout_announce = config.getBoolean("settings.punish_for_combat_logout.announce", true);
this.punish_for_combat_logout_message = config.getString("settings.punish_for_combat_logout.message", "&f%player% logged out while in combat. What a loser."); this.punish_for_combat_logout_message = config.getString("settings.punish_for_combat_logout.message", "&f%player% logged out while in combat. What a loser.");
this.only_owner_can_interact_with_pet = config.getBoolean("settings.only_owner_can_interact_with_pet", false); this.only_owner_can_interact_with_pet = config.getBoolean("settings.only_owner_can_interact_with_pet", false);
this.snowballs_knockback = config.getBoolean("settings.snowballs_do_knockback", false);
this.egg_knockback = config.getBoolean("settings.eggs_do_knockback", false);
this.cache_time = config.getLong("settings.cache_time", 30L); this.cache_time = config.getLong("settings.cache_time", 30L);
this.login_protection_time = config.getLong("settings.login_protection_time", 0); this.login_protection_time = config.getLong("settings.login_protection_time", 0);
@@ -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);
}
}
@@ -2,8 +2,7 @@ package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.CombatTimer;
import org.bukkit.entity.Player; import org.bukkit.entity.*;
import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@@ -24,10 +23,32 @@ public class PlayerHitByProjectileListener implements Listener {
UUID damager = ((Player) projectile.getShooter()).getUniqueId(); UUID damager = ((Player) projectile.getShooter()).getUniqueId();
UUID victim = event.getEntity().getUniqueId(); UUID victim = event.getEntity().getUniqueId();
if (TogglePvp.getPlugin().getConfigCache().isSnowballs_knockback() && event.getDamager() instanceof Snowball) {
if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true)) {
((Player) event.getEntity()).damage(0.01, (Entity) projectile.getShooter());
CombatTimer.refreshPlayersCombatTime(damager, victim);
} else {
event.setCancelled(true);
return;
}
} else if (TogglePvp.getPlugin().getConfigCache().isEgg_knockback() && event.getDamager() instanceof Egg) {
if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true)) {
((Player) event.getEntity()).damage(0.01, (Entity) projectile.getShooter());
CombatTimer.refreshPlayersCombatTime(damager, victim);
} else {
event.setCancelled(true);
return;
}
}
// Ender pearls and other self-damage // Ender pearls and other self-damage
if (damager == victim) if (damager == victim)
return; return;
if (event.getDamage() == 0)
return;
if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true)) if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true))
CombatTimer.refreshPlayersCombatTime(damager, victim); CombatTimer.refreshPlayersCombatTime(damager, victim);
else else
@@ -35,18 +35,15 @@ public class PlayerJoinAndLeaveListener implements Listener {
return; return;
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); SmartCache smartCache = TogglePvp.getPlugin().getSmartCache();
long now = Instant.now().getEpochSecond(); PlayerData playerData = smartCache.getPlayerData(player.getUniqueId());
long combatTime = smartCache.getPlayerData(player.getUniqueId()).getCombattime();
if (combatTime <= now) if (!playerData.isInCombat())
return; return;
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());
PlayerData playerData = TogglePvp.getPlugin().getPlayerManager().getPlayer(player.getUniqueId());
playerData.setCombattime(now - 1);
} }
} }
@@ -6,17 +6,15 @@ import java.time.Instant;
public class PlayerData { public class PlayerData {
private long cachetime, combattime; private long cachetime, combattime, loginTimestamp, teleportTimestamp;
private boolean pvpEnabled; private boolean pvpEnabled, lastCombatCheck, inCombat;
private boolean lastCombatCheck;
private long loginTimestamp;
private long teleportTimestamp;
public PlayerData(boolean pvpEnabled) { public PlayerData(boolean pvpEnabled) {
this.pvpEnabled = pvpEnabled; this.pvpEnabled = pvpEnabled;
this.combattime = Instant.now().getEpochSecond()-1; this.combattime = Instant.now().getEpochSecond()-1;
this.loginTimestamp = Instant.now().getEpochSecond()-1; this.loginTimestamp = Instant.now().getEpochSecond()-1;
this.teleportTimestamp = Instant.now().getEpochSecond()-1; this.teleportTimestamp = Instant.now().getEpochSecond()-1;
this.inCombat = false;
refreshCachetime(); refreshCachetime();
} }
@@ -57,7 +55,7 @@ public class PlayerData {
} }
public void setLoginTimestamp(long loginTimestamp) { public void setLoginTimestamp(long loginTimestamp) {
this.loginTimestamp = loginTimestamp + TogglePvp.getPlugin().getConfigCache().getLogin_protection_time(); this.loginTimestamp = loginTimestamp + TogglePvp.getPlugin().getConfigCache().getLogin_protection_time()-1;
} }
public long getLoginTimestamp() { public long getLoginTimestamp() {
@@ -65,10 +63,18 @@ public class PlayerData {
} }
public void setTeleportTimestamp(long teleportTimestamp) { public void setTeleportTimestamp(long teleportTimestamp) {
this.teleportTimestamp = teleportTimestamp + TogglePvp.getPlugin().getConfigCache().getTeleport_protection_time(); this.teleportTimestamp = teleportTimestamp + TogglePvp.getPlugin().getConfigCache().getTeleport_protection_time()-1;
} }
public long getTeleportTimestamp() { public long getTeleportTimestamp() {
return teleportTimestamp; return teleportTimestamp;
} }
public boolean isInCombat() {
return inCombat;
}
public void setInCombat(boolean inCombat) {
this.inCombat = inCombat;
}
} }
@@ -1,6 +1,7 @@
package eu.endermite.togglepvp.players; package eu.endermite.togglepvp.players;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.api.event.PlayerLeaveCombatEvent;
import eu.endermite.togglepvp.config.ConfigCache; import eu.endermite.togglepvp.config.ConfigCache;
import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages; import eu.endermite.togglepvp.util.PluginMessages;
@@ -8,9 +9,9 @@ import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; 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 {
@@ -26,19 +27,29 @@ 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)) {
UUID uuid = set.getKey(); if (playerData.getLastCombatCheck()) {
if (!CombatTimer.isInCombat(uuid)) { Player player = Bukkit.getPlayer(uuid);
if (set.getValue().getLastCombatCheck()) { if (player == null)
set.getValue().setLastCombatCheck(false); 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()); 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) {
@@ -47,7 +58,15 @@ public class PlayerManager {
public void refreshPlayersCombatTime(UUID uuid) { public void refreshPlayersCombatTime(UUID uuid) {
try { try {
playerList.get(uuid).refreshCombatTime(); 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) { } catch (Exception ignored) {
} }
} }
@@ -1,6 +1,9 @@
package eu.endermite.togglepvp.util; package eu.endermite.togglepvp.util;
import eu.endermite.togglepvp.TogglePvp; 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.time.Instant;
import java.util.UUID; import java.util.UUID;
@@ -10,11 +13,21 @@ public class CombatTimer {
try { try {
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();
if (combattime < now) {
PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getEntering_combat()); Player player = Bukkit.getPlayer(uuid);
} PlayerEnterCombatEvent playerEnterCombatEvent = new PlayerEnterCombatEvent(player);
TogglePvp.getPlugin().getPlayerManager().refreshPlayersCombatTime(uuid); Bukkit.getScheduler().runTask(TogglePvp.getPlugin(), () -> {
} catch (Exception ignored) {} 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) {
}
} }
public static void refreshPlayersCombatTime(UUID attacker_uuid, UUID victim_uuid) { public static void refreshPlayersCombatTime(UUID attacker_uuid, UUID victim_uuid) {
@@ -24,9 +37,7 @@ public class CombatTimer {
public static boolean isInCombat(UUID uuid) { public static boolean isInCombat(UUID uuid) {
try { try {
long combattimer = TogglePvp.getPlugin().getPlayerManager().getPlayer(uuid).getCombattime(); return TogglePvp.getPlugin().getPlayerManager().getPlayer(uuid).getCombattime() >= Instant.now().getEpochSecond();
long now = Instant.now().getEpochSecond();
return combattimer > now;
} catch (Exception e) { } catch (Exception e) {
return false; return false;
} }
-52
View File
@@ -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!"