cache is now based on UUIDs and not Player instances

This commit is contained in:
YouHaveTrouble
2020-08-20 20:04:19 +02:00
parent c158e8f497
commit c77536fe67
21 changed files with 131 additions and 61 deletions
@@ -6,6 +6,7 @@ import eu.endermite.togglepvp.listeners.player.*;
import eu.endermite.togglepvp.listeners.wolf.WolfAttackPlayerListener; import eu.endermite.togglepvp.listeners.wolf.WolfAttackPlayerListener;
import eu.endermite.togglepvp.listeners.wolf.WolfTargettingListener; import eu.endermite.togglepvp.listeners.wolf.WolfTargettingListener;
import eu.endermite.togglepvp.players.PlayerManager; import eu.endermite.togglepvp.players.PlayerManager;
import eu.endermite.togglepvp.players.SmartCache;
import eu.endermite.togglepvp.util.DatabaseSQLite; import eu.endermite.togglepvp.util.DatabaseSQLite;
import lombok.Getter; import lombok.Getter;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@@ -31,6 +32,8 @@ public final class TogglePvP extends JavaPlugin {
sqLite.testConnection(); sqLite.testConnection();
playerManager = new PlayerManager(); playerManager = new PlayerManager();
SmartCache.runSmartCache();
getServer().getPluginManager().registerEvents(new PlayerJoinAndLeaveListener(), this); getServer().getPluginManager().registerEvents(new PlayerJoinAndLeaveListener(), this);
getServer().getPluginManager().registerEvents(new PlayerAttackListener(), this); getServer().getPluginManager().registerEvents(new PlayerAttackListener(), this);
getServer().getPluginManager().registerEvents(new PlayerHitByProjectileListener(), this); getServer().getPluginManager().registerEvents(new PlayerHitByProjectileListener(), this);
@@ -25,7 +25,7 @@ public class PvpToggleCommand {
if (args.length == 1) { if (args.length == 1) {
if (sender instanceof Player) { if (sender instanceof Player) {
Player player = (Player) sender; Player player = (Player) sender;
boolean currentState = TogglePvP.getPlugin().getPlayerManager().togglePlayerPvpState(player); boolean currentState = TogglePvP.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId());
String message = ""; String message = "";
if (currentState) { if (currentState) {
@@ -47,7 +47,7 @@ public class PvpToggleCommand {
} }
try { try {
Player player = Bukkit.getPlayer(args[1]); Player player = Bukkit.getPlayer(args[1]);
boolean currentState = TogglePvP.getPlugin().getPlayerManager().togglePlayerPvpState(player); boolean currentState = TogglePvP.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId());
String message; String message;
if (currentState) { if (currentState) {
message = TogglePvP.getPlugin().getConfigCache().getPvp_enabled_other(); message = TogglePvP.getPlugin().getConfigCache().getPvp_enabled_other();
@@ -79,7 +79,7 @@ public class PvpToggleCommand {
if (args.length == 1) { if (args.length == 1) {
if (sender instanceof Player) { if (sender instanceof Player) {
Player player = (Player) sender; Player player = (Player) sender;
TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player, true); TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), true);
String message = PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getPvp_enabled()); String message = PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getPvp_enabled());
BaseComponent[] component = TextComponent.fromLegacyText(message); BaseComponent[] component = TextComponent.fromLegacyText(message);
player.spigot().sendMessage(ChatMessageType.CHAT, component); player.spigot().sendMessage(ChatMessageType.CHAT, component);
@@ -97,7 +97,7 @@ public class PvpToggleCommand {
Player player = Bukkit.getPlayer(args[1]); Player player = Bukkit.getPlayer(args[1]);
String message = TogglePvP.getPlugin().getConfigCache().getPvp_enabled_other(); String message = TogglePvP.getPlugin().getConfigCache().getPvp_enabled_other();
sender.sendMessage(PluginMessages.parsePlayerName(player, message)); sender.sendMessage(PluginMessages.parsePlayerName(player, message));
TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player, true); TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), true);
} catch (NullPointerException e) { } catch (NullPointerException e) {
sender.sendMessage(PluginMessages.parseMessage("&cPlayer offline.")); sender.sendMessage(PluginMessages.parseMessage("&cPlayer offline."));
} }
@@ -120,7 +120,7 @@ public class PvpToggleCommand {
if (args.length == 1) { if (args.length == 1) {
if (sender instanceof Player) { if (sender instanceof Player) {
Player player = (Player) sender; Player player = (Player) sender;
TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player, false); TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), false);
String message = PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getPvp_disabled()); String message = PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getPvp_disabled());
BaseComponent[] component = TextComponent.fromLegacyText(message); BaseComponent[] component = TextComponent.fromLegacyText(message);
player.spigot().sendMessage(ChatMessageType.CHAT, component); player.spigot().sendMessage(ChatMessageType.CHAT, component);
@@ -138,7 +138,7 @@ public class PvpToggleCommand {
Player player = Bukkit.getPlayer(args[1]); Player player = Bukkit.getPlayer(args[1]);
String message = TogglePvP.getPlugin().getConfigCache().getPvp_disabled_other(); String message = TogglePvP.getPlugin().getConfigCache().getPvp_disabled_other();
sender.sendMessage(PluginMessages.parsePlayerName(player, message)); sender.sendMessage(PluginMessages.parsePlayerName(player, message));
TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player, true); TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), true);
} catch (NullPointerException e) { } catch (NullPointerException e) {
sender.sendMessage(PluginMessages.parseMessage("&cPlayer offline.")); sender.sendMessage(PluginMessages.parseMessage("&cPlayer offline."));
} }
@@ -18,6 +18,7 @@ public class ConfigCache {
@Getter private final String pvp_disabled_other; @Getter private final String pvp_disabled_other;
@Getter private final double lava_and_fire_stopper_radius; @Getter private final double lava_and_fire_stopper_radius;
@Getter private final boolean channeling_enchant_disabled; @Getter private final boolean channeling_enchant_disabled;
@Getter private final long cache_time;
public ConfigCache() { public ConfigCache() {
@@ -29,7 +30,9 @@ public class ConfigCache {
this.lava_and_fire_stopper_enabled = config.getBoolean("settings.lava_and_fire_stopper.enabled", true); this.lava_and_fire_stopper_enabled = config.getBoolean("settings.lava_and_fire_stopper.enabled", true);
this.lava_and_fire_stopper_radius = config.getDouble("settings.lava_and_fire_stopper.radius", 2.5); this.lava_and_fire_stopper_radius = config.getDouble("settings.lava_and_fire_stopper.radius", 2.5);
this.channeling_enchant_disabled = config.getBoolean("channeling_enchant_disabled", true); this.channeling_enchant_disabled = config.getBoolean("settings.channeling_enchant_disabled", true);
this.cache_time = config.getLong("settings.cache_time", 30L);
// Messages // Messages
this.pvp_enabled = config.getString("messages.pvp_enabled", "&cYou enabled PvP!"); this.pvp_enabled = config.getString("messages.pvp_enabled", "&cYou enabled PvP!");
@@ -43,13 +43,13 @@ public class AreaEffectCloudApplyListener implements Listener {
continue; continue;
ConfigCache config = TogglePvP.getPlugin().getConfigCache(); ConfigCache config = TogglePvP.getPlugin().getConfigCache();
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
if (!damagerPvpEnabled) { if (!damagerPvpEnabled) {
it.remove(); it.remove();
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
continue; continue;
} }
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
it.remove(); it.remove();
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
@@ -24,8 +24,8 @@ public class FishingListener implements Listener {
} }
ConfigCache config = TogglePvP.getPlugin().getConfigCache(); ConfigCache config = TogglePvP.getPlugin().getConfigCache();
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!damagerPvpEnabled) { if (!damagerPvpEnabled) {
event.setCancelled(true); event.setCancelled(true);
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
@@ -35,13 +35,13 @@ public class LavaDumpAndIgniteListener implements Listener {
if (entity instanceof Player) { if (entity instanceof Player) {
Player victim = (Player) entity; Player victim = (Player) entity;
if (victim != damager) { if (victim != damager) {
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
if (!damagerPvpEnabled) { if (!damagerPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
event.setCancelled(true); event.setCancelled(true);
@@ -71,13 +71,13 @@ public class LavaDumpAndIgniteListener implements Listener {
if (entity instanceof Player) { if (entity instanceof Player) {
Player victim = (Player) entity; Player victim = (Player) entity;
if (victim != damager) { if (victim != damager) {
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
if (!damagerPvpEnabled) { if (!damagerPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
event.setCancelled(true); event.setCancelled(true);
@@ -23,7 +23,7 @@ public class LightningBlockIgniteListener implements Listener {
if (entity instanceof Player) { if (entity instanceof Player) {
Player player = (Player) entity; Player player = (Player) entity;
if (!TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(player)) { if (!TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(player.getUniqueId())) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@@ -25,8 +25,8 @@ public class PlayerAttackListener implements Listener {
ConfigCache config = TogglePvP.getPlugin().getConfigCache(); ConfigCache config = TogglePvP.getPlugin().getConfigCache();
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!damagerPvpEnabled) { if (!damagerPvpEnabled) {
event.setCancelled(true); event.setCancelled(true);
@@ -35,13 +35,13 @@ public class PlayerHitByExplosionListener implements Listener {
Player damager = Bukkit.getPlayer(playeruuid); Player damager = Bukkit.getPlayer(playeruuid);
if (victim != damager) { if (victim != damager) {
ConfigCache config = TogglePvP.getPlugin().getConfigCache(); ConfigCache config = TogglePvP.getPlugin().getConfigCache();
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
if (!damagerPvpEnabled) { if (!damagerPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
event.setCancelled(true); event.setCancelled(true);
@@ -19,7 +19,7 @@ public class PlayerHitByFireworkListener implements Listener {
if (damager == victim) { if (damager == victim) {
return; return;
} }
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
event.setCancelled(true); event.setCancelled(true);
} }
@@ -22,7 +22,7 @@ public class PlayerHitByLightningListener implements Listener {
public void onPlayerLightningDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) { public void onPlayerLightningDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof LightningStrike && event.getDamager().getMetadata("TRIDENT").size() >= 1 && event.getEntity() instanceof Player) { if (event.getDamager() instanceof LightningStrike && event.getDamager().getMetadata("TRIDENT").size() >= 1 && event.getEntity() instanceof Player) {
Player victim = (Player) event.getEntity(); Player victim = (Player) event.getEntity();
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
event.setCancelled(true); event.setCancelled(true);
} }
@@ -30,8 +30,8 @@ public class PlayerHitByProjectileListener implements Listener {
ConfigCache config = TogglePvP.getPlugin().getConfigCache(); ConfigCache config = TogglePvP.getPlugin().getConfigCache();
boolean damagerPvpEnabled = (boolean) TogglePvP.getPlugin().getPlayerManager().getPlayer(damager).get("pvpenabled"); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
boolean victimPvpEnabled = (boolean) TogglePvP.getPlugin().getPlayerManager().getPlayer(victim).get("pvpenabled"); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!damagerPvpEnabled) { if (!damagerPvpEnabled) {
event.setCancelled(true); event.setCancelled(true);
@@ -49,13 +49,13 @@ public class PlayerHitBySplashPotionListener implements Listener {
continue; continue;
ConfigCache config = TogglePvP.getPlugin().getConfigCache(); ConfigCache config = TogglePvP.getPlugin().getConfigCache();
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
if (!damagerPvpEnabled) { 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); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
event.setIntensity(victim, 0); event.setIntensity(victim, 0);
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
@@ -17,9 +17,9 @@ public class PlayerJoinAndLeaveListener implements Listener {
Player player = event.getPlayer(); Player player = event.getPlayer();
HashMap<String, Object> playerData; HashMap<String, Object> playerData;
playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(player); playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(player.getUniqueId());
TogglePvP.getPlugin().getPlayerManager().addPlayer(player, playerData); playerData.put("cachetime", TogglePvP.getPlugin().getPlayerManager().refreshedCacheTime());
TogglePvP.getPlugin().getPlayerManager().addPlayer(player.getUniqueId(), playerData);
} }
/** /**
* This event is here to dump player's saved options from memory * This event is here to dump player's saved options from memory
@@ -27,8 +27,7 @@ public class PlayerJoinAndLeaveListener implements Listener {
@EventHandler @EventHandler
public void onPlayerLeave(org.bukkit.event.player.PlayerQuitEvent event) { public void onPlayerLeave(org.bukkit.event.player.PlayerQuitEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
TogglePvP.getPlugin().getSqLite().updatePlayerInfo(player, TogglePvP.getPlugin().getPlayerManager().getPlayer(player)); TogglePvP.getPlugin().getSqLite().updatePlayerInfo(player.getUniqueId(), TogglePvP.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()));
TogglePvP.getPlugin().getPlayerManager().removePlayer(player);
} }
} }
@@ -34,13 +34,13 @@ public class PlayerPlaceWitherRoseListener implements Listener {
Player damager = event.getPlayer(); Player damager = event.getPlayer();
Player victim = (Player) entity; Player victim = (Player) entity;
if (victim != damager) { if (victim != damager) {
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
if (!damagerPvpEnabled) { if (!damagerPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
event.setCancelled(true); event.setCancelled(true);
@@ -18,8 +18,11 @@ public class WolfAttackPlayerListener implements Listener {
if (event.getDamager() instanceof Wolf) { if (event.getDamager() instanceof Wolf) {
Wolf wolf = (Wolf) event.getDamager(); Wolf wolf = (Wolf) event.getDamager();
if (wolf.getOwner() != null && event.getEntity() instanceof Player) { if (wolf.getOwner() != null && event.getEntity() instanceof Player) {
//TODO check if offline wolf owner has pvp on or off and cancel this accordingly
Player victim = (Player) event.getEntity(); Player victim = (Player) event.getEntity();
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
wolf.setAngry(false); wolf.setAngry(false);
event.setCancelled(true); event.setCancelled(true);
@@ -20,7 +20,7 @@ public class WolfTargettingListener implements Listener {
if (wolf.getOwner() != null) { if (wolf.getOwner() != null) {
if (event.getTarget() instanceof Player) { if (event.getTarget() instanceof Player) {
Player victim = (Player) event.getTarget(); Player victim = (Player) event.getTarget();
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
event.setCancelled(true); event.setCancelled(true);
} }
@@ -31,7 +31,7 @@ public class WolfTargettingListener implements Listener {
if (fox.getFirstTrustedPlayer() != null) { if (fox.getFirstTrustedPlayer() != null) {
if (event.getTarget() instanceof Player) { if (event.getTarget() instanceof Player) {
Player victim = (Player) event.getTarget(); Player victim = (Player) event.getTarget();
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim); boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
if (!victimPvpEnabled) { if (!victimPvpEnabled) {
event.setCancelled(true); event.setCancelled(true);
} }
@@ -1,50 +1,65 @@
package eu.endermite.togglepvp.players; package eu.endermite.togglepvp.players;
import eu.endermite.togglepvp.TogglePvP; import eu.endermite.togglepvp.TogglePvP;
import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.time.Instant;
import java.util.HashMap; import java.util.HashMap;
import java.util.UUID;
public class PlayerManager { public class PlayerManager {
HashMap<Player, HashMap<String, Object>> playerList = new HashMap<>(); @Getter HashMap<UUID, HashMap<String, Object>> playerList = new HashMap<>();
public PlayerManager() { public PlayerManager() {
for (Player p : Bukkit.getOnlinePlayers()) { for (Player p : Bukkit.getOnlinePlayers()) {
HashMap<String, Object> playerData; HashMap<String, Object> playerData;
playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(p); playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(p.getUniqueId());
playerList.put(p, playerData); playerData.put("cachetime", refreshedCacheTime());
playerList.put(p.getUniqueId(), playerData);
} }
} }
public HashMap<String, Object> getPlayer(Player p) {
return playerList.get(p); public long refreshedCacheTime() {
long cacheTime = TogglePvP.getPlugin().getConfigCache().getCache_time();
return Instant.now().getEpochSecond()+cacheTime;
} }
public void addPlayer(Player player, HashMap<String,Object> data) { public void refreshPlayersCacheTime(UUID uuid) {
playerList.put(player, data); playerList.get(uuid).replace("cachetime", refreshedCacheTime());
} }
public void removePlayer(Player player) { public HashMap<String, Object> getPlayer(UUID uuid) {
playerList.remove(player); return playerList.get(uuid);
} }
public boolean getPlayerPvPState(Player p) { public void addPlayer(UUID uuid, HashMap<String,Object> data) {
return (boolean) playerList.get(p).get("pvpenabled"); playerList.put(uuid, data);
} }
public void setPlayerPvpState(Player player, boolean state) { public void removePlayer(UUID uuid) {
playerList.get(player).replace("pvpenabled", state); playerList.remove(uuid);
} }
public boolean togglePlayerPvpState(Player player) { public boolean getPlayerPvPState(UUID uuid) {
boolean currentState = (boolean) playerList.get(player).get("pvpenabled"); return (boolean) playerList.get(uuid).get("pvpenabled");
}
public void setPlayerPvpState(UUID uuid, boolean state) {
playerList.get(uuid).replace("pvpenabled", state);
}
public boolean togglePlayerPvpState(UUID uuid) {
boolean currentState = (boolean) playerList.get(uuid).get("pvpenabled");
if (currentState) { if (currentState) {
playerList.get(player).replace("pvpenabled", false); playerList.get(uuid).replace("pvpenabled", false);
return false; return false;
} else { } else {
playerList.get(player).replace("pvpenabled", true); playerList.get(uuid).replace("pvpenabled", true);
return true; return true;
} }
} }
@@ -0,0 +1,44 @@
package eu.endermite.togglepvp.players;
import eu.endermite.togglepvp.TogglePvP;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import java.time.Instant;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
public class SmartCache {
public static void runSmartCache() {
new BukkitRunnable() {
@Override
public void run() {
// Refresh cache timer if player is online
for (Map.Entry<UUID, HashMap<String, Object>> e : TogglePvP.getPlugin().getPlayerManager().getPlayerList().entrySet()) {
try {
Player player = Bukkit.getPlayer(e.getKey());
if (player.isOnline()) {
TogglePvP.getPlugin().getPlayerManager().refreshPlayersCacheTime(e.getKey());
}
} catch (NullPointerException ignored) {}
}
// Check for entries that should be invalidated
long now = Instant.now().getEpochSecond();
Iterator<Map.Entry<UUID, HashMap<String, Object>>> it = TogglePvP.getPlugin().getPlayerManager().getPlayerList().entrySet().iterator();
while(it.hasNext()) {
Map.Entry<UUID,HashMap<String, Object>> cacheEntry = it.next();
if ((Long) cacheEntry.getValue().get("cachetime") < now) {
TogglePvP.getPlugin().getPlayerManager().removePlayer(cacheEntry.getKey());
}
}
}
}.runTaskTimerAsynchronously(TogglePvP.getPlugin(), 100, 100);
}
}
@@ -1,13 +1,11 @@
package eu.endermite.togglepvp.util; package eu.endermite.togglepvp.util;
import eu.endermite.togglepvp.TogglePvP; import eu.endermite.togglepvp.TogglePvP;
import org.bukkit.entity.Player;
import java.io.File; import java.io.File;
import java.sql.*; import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.UUID;
public class DatabaseSQLite { public class DatabaseSQLite {
@@ -56,14 +54,14 @@ public class DatabaseSQLite {
} }
} }
public HashMap<String, Object> getPlayerInfo(Player p) { public HashMap<String, Object> getPlayerInfo(UUID uuid) {
HashMap<String, Object> dataHashMap = new HashMap<>(); HashMap<String, Object> dataHashMap = new HashMap<>();
try { try {
Connection conn = DriverManager.getConnection(url); Connection conn = DriverManager.getConnection(url);
Statement insertnewuser = conn.createStatement(); Statement insertnewuser = conn.createStatement();
try { try {
String newuserdata = "INSERT OR IGNORE INTO `players` (player_uuid, pvpenabled) VALUES ('" + p.getUniqueId().toString() + "', " + TogglePvP.getPlugin().getConfigCache().isPvp_enabled_by_default() + ")"; String newuserdata = "INSERT OR IGNORE INTO `players` (player_uuid, pvpenabled) VALUES ('" + uuid.toString() + "', " + TogglePvP.getPlugin().getConfigCache().isPvp_enabled_by_default() + ")";
insertnewuser.execute(newuserdata); insertnewuser.execute(newuserdata);
} catch (SQLException e) { } catch (SQLException e) {
if (e.getErrorCode() != 19) { if (e.getErrorCode() != 19) {
@@ -71,7 +69,7 @@ public class DatabaseSQLite {
} }
} }
Statement statement = conn.createStatement(); Statement statement = conn.createStatement();
String sql = "SELECT * FROM `players` WHERE `player_uuid` = '" + p.getUniqueId().toString() + "';"; String sql = "SELECT * FROM `players` WHERE `player_uuid` = '" + uuid.toString() + "';";
statement.execute(sql); statement.execute(sql);
ResultSet result = statement.getResultSet(); ResultSet result = statement.getResultSet();
dataHashMap.put("pvpenabled", result.getBoolean("pvpenabled")); dataHashMap.put("pvpenabled", result.getBoolean("pvpenabled"));
@@ -84,13 +82,13 @@ public class DatabaseSQLite {
return null; return null;
} }
public void updatePlayerInfo(Player p, HashMap<String, Object> data) { public void updatePlayerInfo(UUID uuid, HashMap<String, Object> data) {
try { try {
Connection conn = DriverManager.getConnection(url); Connection conn = DriverManager.getConnection(url);
Statement insertnewuser = conn.createStatement(); Statement insertnewuser = conn.createStatement();
try { try {
String newuserdata = "UPDATE `players` SET pvpenabled = "+data.get("pvpenabled")+" WHERE `player_uuid` = '"+p.getUniqueId().toString()+"';"; String newuserdata = "UPDATE `players` SET pvpenabled = "+data.get("pvpenabled")+" WHERE `player_uuid` = '"+uuid.toString()+"';";
insertnewuser.execute(newuserdata); insertnewuser.execute(newuserdata);
} catch (SQLException e) { } catch (SQLException e) {
TogglePvP.getPlugin().getLogger().severe("Error while saving player data!"); TogglePvP.getPlugin().getLogger().severe("Error while saving player data!");
+5
View File
@@ -11,6 +11,11 @@ settings:
# You may want to keep it disabled because players with pvp off can use it to attack players with pvp on # 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 channeling_enchant_disabled: false
# 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: messages:
pvp_enabled: "&cYou enabled PvP!" pvp_enabled: "&cYou enabled PvP!"
pvp_disabled: "&cYou disabled PvP!" pvp_disabled: "&cYou disabled PvP!"