fixed bugs with events

This commit is contained in:
YouHaveTrouble
2021-03-12 04:07:36 +01:00
parent 477eb7f5de
commit 3b56d57faf
5 changed files with 62 additions and 25 deletions
@@ -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,
@@ -45,6 +46,10 @@ public class ConfigCache {
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.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("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!");
@@ -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);
@@ -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
@@ -55,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() {
@@ -63,7 +63,7 @@ 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() {
@@ -34,16 +34,17 @@ public class PlayerManager {
if (!CombatTimer.isInCombat(uuid)) { if (!CombatTimer.isInCombat(uuid)) {
if (playerData.getLastCombatCheck()) { if (playerData.getLastCombatCheck()) {
PlayerLeaveCombatEvent playerLeaveCombatEvent = new PlayerLeaveCombatEvent(Bukkit.getPlayer(uuid)); PlayerLeaveCombatEvent playerLeaveCombatEvent = new PlayerLeaveCombatEvent(Bukkit.getPlayer(uuid));
Bukkit.getPluginManager().callEvent(playerLeaveCombatEvent); Bukkit.getScheduler().runTask(TogglePvp.getPlugin(), () -> {
Bukkit.getPluginManager().callEvent(playerLeaveCombatEvent);
if (playerLeaveCombatEvent.isCancelled()) { if (playerLeaveCombatEvent.isCancelled()) {
playerData.refreshCombatTime(); playerData.setLastCombatCheck(true);
return; playerData.refreshCombatTime();
} else { } else {
playerData.setLastCombatCheck(false); playerData.setLastCombatCheck(false);
playerData.setInCombat(false); playerData.setInCombat(false);
PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getLeaving_combat()); PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getLeaving_combat());
} }
});
} }
} else { } else {
set.getValue().setLastCombatCheck(true); set.getValue().setLastCombatCheck(true);
@@ -14,16 +14,22 @@ 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) {
Player player = Bukkit.getPlayer(uuid);
PlayerEnterCombatEvent playerEnterCombatEvent = new PlayerEnterCombatEvent(player);
Bukkit.getPluginManager().callEvent(playerEnterCombatEvent);
if (playerEnterCombatEvent.isCancelled())
return;
TogglePvp.getPlugin().getPlayerManager().refreshPlayersCombatTime(uuid); Player player = Bukkit.getPlayer(uuid);
PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getEntering_combat()); 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) {} } catch (Exception ignored) {}
} }
@@ -34,7 +40,7 @@ public class CombatTimer {
public static boolean isInCombat(UUID uuid) { public static boolean isInCombat(UUID uuid) {
try { try {
return TogglePvp.getPlugin().getPlayerManager().getPlayer(uuid).isInCombat(); return TogglePvp.getPlugin().getPlayerManager().getPlayer(uuid).getCombattime() >= Instant.now().getEpochSecond();
} catch (Exception e) { } catch (Exception e) {
return false; return false;
} }