mirror of
https://github.com/YouHaveTrouble/PreventStabby.git
synced 2026-05-12 05:16:55 +00:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 44ac3aa0f3 | |||
| 9249fe754b | |||
| 5a7b38e62f | |||
| 9d45a1ea02 | |||
| b78c7ecd90 | |||
| 1fa2a6f6a8 | |||
| 3b56d57faf | |||
| 477eb7f5de |
@@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>eu.endermite</groupId>
|
||||
<artifactId>TogglePvP</artifactId>
|
||||
<version>1.1</version>
|
||||
<version>1.2</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>TogglePvP</name>
|
||||
|
||||
@@ -8,13 +8,12 @@ import eu.endermite.togglepvp.util.Listener;
|
||||
import eu.endermite.togglepvp.util.DatabaseSQLite;
|
||||
import lombok.Getter;
|
||||
import org.bstats.bukkit.Metrics;
|
||||
import org.bstats.charts.CustomChart;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.PluginCommand;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.reflections.Reflections;
|
||||
import java.io.File;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
public final class TogglePvp extends JavaPlugin {
|
||||
@@ -57,16 +56,20 @@ public final class TogglePvp extends JavaPlugin {
|
||||
});
|
||||
|
||||
// Register command
|
||||
Objects.requireNonNull(getCommand("pvp")).setExecutor(new MainCommand());
|
||||
Objects.requireNonNull(getCommand("pvp")).setTabCompleter(new MainCommand());
|
||||
PluginCommand pvpCommand = getCommand("pvp");
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
public void reloadPluginConfig() {
|
||||
saveDefaultConfig();
|
||||
reloadConfig();
|
||||
configCache = new ConfigCache();
|
||||
}
|
||||
|
||||
|
||||
@@ -74,6 +74,24 @@ public class TogglePvpAPI {
|
||||
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.
|
||||
* @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();
|
||||
|
||||
@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,
|
||||
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,
|
||||
@@ -24,28 +25,32 @@ public class ConfigCache {
|
||||
@Override
|
||||
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");
|
||||
addDefault("settings.lava_and_fire_stopper.enabled", "true");
|
||||
addDefault("settings.lava_and_fire_stopper.radius", "2.5");
|
||||
addDefault("settings.lava_and_fire_stopper.enabled", true);
|
||||
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");
|
||||
addDefault("settings.punish_for_combat_logout.enabled", "true");
|
||||
addDefault("settings.punish_for_combat_logout.announce", "true");
|
||||
addDefault("settings.punish_for_combat_logout.enabled", 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.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_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_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.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.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);
|
||||
}
|
||||
|
||||
}
|
||||
+23
-2
@@ -2,8 +2,7 @@ package eu.endermite.togglepvp.listeners.player;
|
||||
|
||||
import eu.endermite.togglepvp.TogglePvp;
|
||||
import eu.endermite.togglepvp.util.CombatTimer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
@@ -24,10 +23,32 @@ public class PlayerHitByProjectileListener implements Listener {
|
||||
UUID damager = ((Player) projectile.getShooter()).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
|
||||
if (damager == victim)
|
||||
return;
|
||||
|
||||
if (event.getDamage() == 0)
|
||||
return;
|
||||
|
||||
if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true))
|
||||
CombatTimer.refreshPlayersCombatTime(damager, victim);
|
||||
else
|
||||
|
||||
+2
-5
@@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,17 +6,15 @@ import java.time.Instant;
|
||||
|
||||
public class PlayerData {
|
||||
|
||||
private long cachetime, combattime;
|
||||
private boolean pvpEnabled;
|
||||
private boolean lastCombatCheck;
|
||||
private long loginTimestamp;
|
||||
private long teleportTimestamp;
|
||||
private long cachetime, combattime, loginTimestamp, teleportTimestamp;
|
||||
private boolean pvpEnabled, lastCombatCheck, inCombat;
|
||||
|
||||
public PlayerData(boolean pvpEnabled) {
|
||||
this.pvpEnabled = pvpEnabled;
|
||||
this.combattime = Instant.now().getEpochSecond()-1;
|
||||
this.loginTimestamp = Instant.now().getEpochSecond()-1;
|
||||
this.teleportTimestamp = Instant.now().getEpochSecond()-1;
|
||||
this.inCombat = false;
|
||||
refreshCachetime();
|
||||
}
|
||||
|
||||
@@ -57,7 +55,7 @@ public class PlayerData {
|
||||
}
|
||||
|
||||
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() {
|
||||
@@ -65,10 +63,18 @@ public class PlayerData {
|
||||
}
|
||||
|
||||
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() {
|
||||
return teleportTimestamp;
|
||||
}
|
||||
|
||||
public boolean isInCombat() {
|
||||
return inCombat;
|
||||
}
|
||||
|
||||
public void setInCombat(boolean inCombat) {
|
||||
this.inCombat = inCombat;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package eu.endermite.togglepvp.players;
|
||||
|
||||
import eu.endermite.togglepvp.TogglePvp;
|
||||
import eu.endermite.togglepvp.api.event.PlayerLeaveCombatEvent;
|
||||
import eu.endermite.togglepvp.config.ConfigCache;
|
||||
import eu.endermite.togglepvp.util.CombatTimer;
|
||||
import eu.endermite.togglepvp.util.PluginMessages;
|
||||
@@ -8,9 +9,9 @@ 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.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
public class PlayerManager {
|
||||
@@ -26,19 +27,29 @@ 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();
|
||||
if (!CombatTimer.isInCombat(uuid)) {
|
||||
if (set.getValue().getLastCombatCheck()) {
|
||||
set.getValue().setLastCombatCheck(false);
|
||||
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;
|
||||
}
|
||||
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) {
|
||||
@@ -47,7 +58,15 @@ public class PlayerManager {
|
||||
|
||||
public void refreshPlayersCombatTime(UUID uuid) {
|
||||
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) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package eu.endermite.togglepvp.util;
|
||||
|
||||
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;
|
||||
|
||||
@@ -10,11 +13,21 @@ public class CombatTimer {
|
||||
try {
|
||||
long now = Instant.now().getEpochSecond();
|
||||
long combattime = TogglePvp.getPlugin().getSmartCache().getPlayerData(uuid).getCombattime();
|
||||
if (combattime < now) {
|
||||
PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getEntering_combat());
|
||||
}
|
||||
TogglePvp.getPlugin().getPlayerManager().refreshPlayersCombatTime(uuid);
|
||||
} catch (Exception ignored) {}
|
||||
|
||||
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) {
|
||||
}
|
||||
}
|
||||
|
||||
public static void refreshPlayersCombatTime(UUID attacker_uuid, UUID victim_uuid) {
|
||||
@@ -24,9 +37,7 @@ public class CombatTimer {
|
||||
|
||||
public static boolean isInCombat(UUID uuid) {
|
||||
try {
|
||||
long combattimer = TogglePvp.getPlugin().getPlayerManager().getPlayer(uuid).getCombattime();
|
||||
long now = Instant.now().getEpochSecond();
|
||||
return combattimer > now;
|
||||
return TogglePvp.getPlugin().getPlayerManager().getPlayer(uuid).getCombattime() >= Instant.now().getEpochSecond();
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -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!"
|
||||
Reference in New Issue
Block a user