mirror of
https://github.com/YouHaveTrouble/PreventStabby.git
synced 2026-05-12 05:16:55 +00:00
fixed bugs with events
This commit is contained in:
@@ -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,
|
||||
@@ -45,6 +46,10 @@ public class ConfigCache {
|
||||
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.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!");
|
||||
@@ -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);
|
||||
|
||||
+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
|
||||
|
||||
@@ -55,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() {
|
||||
@@ -63,7 +63,7 @@ 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() {
|
||||
|
||||
@@ -34,16 +34,17 @@ public class PlayerManager {
|
||||
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();
|
||||
return;
|
||||
} else {
|
||||
playerData.setLastCombatCheck(false);
|
||||
playerData.setInCombat(false);
|
||||
PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getLeaving_combat());
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
set.getValue().setLastCombatCheck(true);
|
||||
|
||||
@@ -14,16 +14,22 @@ public class CombatTimer {
|
||||
try {
|
||||
long now = Instant.now().getEpochSecond();
|
||||
long combattime = TogglePvp.getPlugin().getSmartCache().getPlayerData(uuid).getCombattime();
|
||||
if (combattime < now) {
|
||||
|
||||
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);
|
||||
|
||||
if (combattime <= now) {
|
||||
PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getEntering_combat());
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
} catch (Exception ignored) {}
|
||||
}
|
||||
|
||||
@@ -34,7 +40,7 @@ public class CombatTimer {
|
||||
|
||||
public static boolean isInCombat(UUID uuid) {
|
||||
try {
|
||||
return TogglePvp.getPlugin().getPlayerManager().getPlayer(uuid).isInCombat();
|
||||
return TogglePvp.getPlugin().getPlayerManager().getPlayer(uuid).getCombattime() >= Instant.now().getEpochSecond();
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user