login protection option and some upgrades

This commit is contained in:
YouHaveTrouble
2021-02-25 02:50:18 +01:00
parent 0a984a5b4a
commit 7655b2804e
12 changed files with 113 additions and 34 deletions
@@ -29,6 +29,7 @@ public class ConfigCache {
@Getter private final String leaving_combat; @Getter private final String leaving_combat;
@Getter final String cant_do_that_during_combat; @Getter final String cant_do_that_during_combat;
@Getter final boolean only_owner_can_interact_with_pet; @Getter final boolean only_owner_can_interact_with_pet;
@Getter final long login_protection_time;
public ConfigCache() { public ConfigCache() {
@@ -49,6 +50,8 @@ public class ConfigCache {
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.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);
// Messages // Messages
this.pvp_enabled = config.getString("messages.pvp_enabled", "&cYou enabled PvP!"); this.pvp_enabled = config.getString("messages.pvp_enabled", "&cYou enabled PvP!");
this.pvp_disabled = config.getString("messages.pvp_disabled", "&cYou disabled PvP!"); this.pvp_disabled = config.getString("messages.pvp_disabled", "&cYou disabled PvP!");
@@ -1,6 +1,7 @@
package eu.endermite.togglepvp.listeners.player; package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.players.SmartCache;
import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.CombatTimer;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable; import org.bukkit.entity.Tameable;
@@ -9,6 +10,8 @@ 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;
import java.time.Instant;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PetAttackPlayerListener implements Listener { public class PetAttackPlayerListener implements Listener {
@@ -18,15 +21,22 @@ public class PetAttackPlayerListener implements Listener {
*/ */
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onWolfAttack(org.bukkit.event.entity.EntityDamageByEntityEvent event) { public void onWolfAttack(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
if (!(event.getDamager() instanceof Tameable)) if (!(event.getDamager() instanceof Tameable))
return; return;
Tameable entity = (Tameable) event.getDamager(); Tameable entity = (Tameable) event.getDamager();
if (entity.getOwner() != null && event.getEntity() instanceof Player) { if (entity.getOwner() != null && event.getEntity() instanceof Player) {
boolean damagerPvpEnabled = TogglePvp.getPlugin().getSmartCache().getPlayerData(entity.getOwner().getUniqueId()).isPvpEnabled();
Player victim = (Player) event.getEntity(); Player victim = (Player) event.getEntity();
boolean victimPvpEnabled = TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId()); SmartCache smartCache = TogglePvp.getPlugin().getSmartCache();
if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) {
event.setCancelled(true);
return;
}
boolean damagerPvpEnabled = smartCache.getPlayerData(entity.getOwner().getUniqueId()).isPvpEnabled();
boolean victimPvpEnabled = smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled();
if (!victimPvpEnabled || !damagerPvpEnabled) { if (!victimPvpEnabled || !damagerPvpEnabled) {
if (entity instanceof Wolf) { if (entity instanceof Wolf) {
Wolf wolf = (Wolf) entity; Wolf wolf = (Wolf) entity;
@@ -2,6 +2,7 @@ package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.config.ConfigCache; import eu.endermite.togglepvp.config.ConfigCache;
import eu.endermite.togglepvp.players.SmartCache;
import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages; import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
@@ -10,6 +11,8 @@ 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;
import java.time.Instant;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PlayerAttackListener implements Listener { public class PlayerAttackListener implements Listener {
@@ -27,15 +30,19 @@ public class PlayerAttackListener implements Listener {
ConfigCache config = TogglePvp.getPlugin().getConfigCache(); ConfigCache config = TogglePvp.getPlugin().getConfigCache();
boolean damagerPvpEnabled = TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId()); SmartCache smartCache = TogglePvp.getPlugin().getSmartCache();
boolean victimPvpEnabled = TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!damagerPvpEnabled) { if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) {
event.setCancelled(true);
return;
}
if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) {
event.setCancelled(true); event.setCancelled(true);
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
return; return;
} }
if (!victimPvpEnabled) { if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) {
event.setCancelled(true); event.setCancelled(true);
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
return; return;
@@ -2,6 +2,7 @@ package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.config.ConfigCache; import eu.endermite.togglepvp.config.ConfigCache;
import eu.endermite.togglepvp.players.SmartCache;
import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages; import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.EnderCrystal; import org.bukkit.entity.EnderCrystal;
@@ -15,6 +16,8 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.FixedMetadataValue;
import java.time.Instant;
import java.util.UUID; import java.util.UUID;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
@@ -35,13 +38,20 @@ public class PlayerHitByExplosionListener implements Listener {
if (victim.getUniqueId().equals(damageruuid)) if (victim.getUniqueId().equals(damageruuid))
return; return;
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache();
if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) {
event.setCancelled(true);
return;
}
ConfigCache config = TogglePvp.getPlugin().getConfigCache(); ConfigCache config = TogglePvp.getPlugin().getConfigCache();
if (!TogglePvp.getPlugin().getSmartCache().getPlayerData(damageruuid).isPvpEnabled()) { if (!smartCache.getPlayerData(damageruuid).isPvpEnabled()) {
PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_attacker()); PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_attacker());
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (!TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId())) { if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) {
PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_victim()); PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_victim());
event.setCancelled(true); event.setCancelled(true);
return; return;
@@ -1,6 +1,7 @@
package eu.endermite.togglepvp.listeners.player; package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.players.SmartCache;
import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages; import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.Firework; import org.bukkit.entity.Firework;
@@ -9,6 +10,8 @@ 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;
import java.time.Instant;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PlayerHitByFireworkListener implements Listener { public class PlayerHitByFireworkListener implements Listener {
@@ -22,14 +25,20 @@ public class PlayerHitByFireworkListener implements Listener {
if (damager == victim) { if (damager == victim) {
return; return;
} }
boolean damagerPvpEnabled = TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!damagerPvpEnabled) { SmartCache smartCache = TogglePvp.getPlugin().getSmartCache();
if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) {
event.setCancelled(true);
return;
}
if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) {
event.setCancelled(true); event.setCancelled(true);
PluginMessages.sendActionBar(damager.getUniqueId(), TogglePvp.getPlugin().getConfigCache().getCannot_attack_attacker()); PluginMessages.sendActionBar(damager.getUniqueId(), TogglePvp.getPlugin().getConfigCache().getCannot_attack_attacker());
return; return;
} }
boolean victimPvpEnabled = TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId()); if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) {
if (!victimPvpEnabled) {
event.setCancelled(true); event.setCancelled(true);
PluginMessages.sendActionBar(damager.getUniqueId(), TogglePvp.getPlugin().getConfigCache().getCannot_attack_victim()); PluginMessages.sendActionBar(damager.getUniqueId(), TogglePvp.getPlugin().getConfigCache().getCannot_attack_victim());
return; return;
@@ -2,6 +2,7 @@ package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.config.ConfigCache; import eu.endermite.togglepvp.config.ConfigCache;
import eu.endermite.togglepvp.players.SmartCache;
import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages; import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -10,6 +11,8 @@ 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;
import java.time.Instant;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PlayerHitByProjectileListener implements Listener { public class PlayerHitByProjectileListener implements Listener {
@@ -30,14 +33,20 @@ public class PlayerHitByProjectileListener implements Listener {
return; return;
} }
ConfigCache config = TogglePvp.getPlugin().getConfigCache(); ConfigCache config = TogglePvp.getPlugin().getConfigCache();
boolean damagerPvpEnabled = TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
boolean victimPvpEnabled = TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId()); SmartCache smartCache = TogglePvp.getPlugin().getSmartCache();
if (!damagerPvpEnabled) {
if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) {
event.setCancelled(true);
return;
}
if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) {
event.setCancelled(true); event.setCancelled(true);
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
return; return;
} }
if (!victimPvpEnabled) { if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) {
event.setCancelled(true); event.setCancelled(true);
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
return; return;
@@ -2,6 +2,7 @@ package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.config.ConfigCache; import eu.endermite.togglepvp.config.ConfigCache;
import eu.endermite.togglepvp.players.SmartCache;
import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages; import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
@@ -11,10 +12,27 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PlayerHitBySplashPotionListener implements Listener { public class PlayerHitBySplashPotionListener implements Listener {
private final List<PotionEffectType> harmfulPotions = new ArrayList<>();
public PlayerHitBySplashPotionListener() {
harmfulPotions.add(PotionEffectType.BLINDNESS);
harmfulPotions.add(PotionEffectType.CONFUSION);
harmfulPotions.add(PotionEffectType.HARM);
harmfulPotions.add(PotionEffectType.HUNGER);
harmfulPotions.add(PotionEffectType.POISON);
harmfulPotions.add(PotionEffectType.SLOW_DIGGING);
harmfulPotions.add(PotionEffectType.WEAKNESS);
harmfulPotions.add(PotionEffectType.SLOW);
harmfulPotions.add(PotionEffectType.WITHER);
}
/** /**
* If thrown potion is applies negative effects and it's thrown by a player it will ahve no effect on player with pvp off * If thrown potion is applies negative effects and it's thrown by a player it will ahve no effect on player with pvp off
*/ */
@@ -27,16 +45,9 @@ public class PlayerHitBySplashPotionListener implements Listener {
boolean harmful = false; boolean harmful = false;
for (PotionEffect effect : event.getPotion().getEffects()) { for (PotionEffect effect : event.getPotion().getEffects()) {
if (effect.getType().equals(PotionEffectType.BLINDNESS) || if (harmfulPotions.contains(effect.getType())) {
effect.getType().equals(PotionEffectType.CONFUSION) ||
effect.getType().equals(PotionEffectType.HARM) ||
effect.getType().equals(PotionEffectType.HUNGER) ||
effect.getType().equals(PotionEffectType.POISON) ||
effect.getType().equals(PotionEffectType.SLOW_DIGGING) ||
effect.getType().equals(PotionEffectType.WEAKNESS) ||
effect.getType().equals(PotionEffectType.SLOW) ||
effect.getType().equals(PotionEffectType.WITHER)) {
harmful = true; harmful = true;
break;
} }
} }
if (!harmful) if (!harmful)
@@ -48,15 +59,20 @@ public class PlayerHitBySplashPotionListener implements Listener {
if (damager == victim) if (damager == victim)
continue; continue;
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache();
if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) {
event.setIntensity(victim, 0);
continue;
}
ConfigCache config = TogglePvp.getPlugin().getConfigCache(); ConfigCache config = TogglePvp.getPlugin().getConfigCache();
boolean damagerPvpEnabled = TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId()); if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) {
if (!damagerPvpEnabled) {
event.setIntensity(victim, 0); event.setIntensity(victim, 0);
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
continue; continue;
} }
boolean victimPvpEnabled = TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId()); if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) {
if (!victimPvpEnabled) {
event.setIntensity(victim, 0); event.setIntensity(victim, 0);
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
continue; continue;
@@ -37,7 +37,9 @@ public class PlayerJoinAndLeaveListener implements Listener {
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());
} }
TogglePvp.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()).setCombattime(now-1); PlayerData playerData = TogglePvp.getPlugin().getPlayerManager().getPlayer(player.getUniqueId());
playerData.setCombattime(now-1);
playerData.setLoginTimestamp(Instant.now().getEpochSecond());
} }
} }
} }
@@ -9,10 +9,12 @@ public class PlayerData {
private long cachetime, combattime; private long cachetime, combattime;
private boolean pvpEnabled; private boolean pvpEnabled;
private boolean lastCombatCheck; private boolean lastCombatCheck;
private long loginTimestamp;
public PlayerData(boolean pvpEnabled) { public PlayerData(boolean pvpEnabled, long loginTimestamp) {
this.pvpEnabled = pvpEnabled; this.pvpEnabled = pvpEnabled;
this.combattime = Instant.now().getEpochSecond()-1; this.combattime = Instant.now().getEpochSecond()-1;
this.loginTimestamp = loginTimestamp;
refreshCachetime(); refreshCachetime();
} }
@@ -52,4 +54,12 @@ public class PlayerData {
public void setLastCombatCheck(boolean bool) { public void setLastCombatCheck(boolean bool) {
lastCombatCheck = bool; lastCombatCheck = bool;
} }
public void setLoginTimestamp(long loginTimestamp) {
this.loginTimestamp = loginTimestamp + TogglePvp.getPlugin().getConfigCache().getLogin_protection_time();
}
public long getLoginTimestamp() {
return loginTimestamp;
}
} }
@@ -42,7 +42,7 @@ public class SmartCache {
return playerData; return playerData;
} catch (NullPointerException ex) { } catch (NullPointerException ex) {
// Return false if database call fails // Return false if database call fails
return new PlayerData(false); return new PlayerData(false, 0);
} }
} }
} }
@@ -53,7 +53,7 @@ public class SmartCache {
TogglePvp.getPlugin().getPlayerManager().getPlayer(uuid).setPvpEnabled(state); TogglePvp.getPlugin().getPlayerManager().getPlayer(uuid).setPvpEnabled(state);
} }
// Update the database aswell // Update the database aswell
TogglePvp.getPlugin().getSqLite().updatePlayerInfo(uuid, new PlayerData(state)); TogglePvp.getPlugin().getSqLite().updatePlayerInfo(uuid, new PlayerData(state, 0));
} }
@@ -70,7 +70,7 @@ public class DatabaseSQLite {
ResultSet result = statement.getResultSet(); ResultSet result = statement.getResultSet();
boolean state = result.getBoolean("pvpenabled"); boolean state = result.getBoolean("pvpenabled");
conn.close(); conn.close();
return new PlayerData(state); return new PlayerData(state, 0);
} catch (SQLException throwables) { } catch (SQLException throwables) {
throwables.printStackTrace(); throwables.printStackTrace();
} }
+3
View File
@@ -18,6 +18,9 @@ settings:
# Time (in seconds) to keep player in combat # Time (in seconds) to keep player in combat
combat_time: 25 combat_time: 25
# Time (in seconds) that player can't be harmed by other player after logging in
login_protection_time: 0
# Kill the player if they log out during combat # Kill the player if they log out during combat
punish_for_combat_logout: punish_for_combat_logout:
enabled: true enabled: true