mirror of
https://github.com/YouHaveTrouble/PreventStabby.git
synced 2026-05-11 21:06:55 +00:00
cache is now based on UUIDs and not Player instances
This commit is contained in:
@@ -6,6 +6,7 @@ import eu.endermite.togglepvp.listeners.player.*;
|
||||
import eu.endermite.togglepvp.listeners.wolf.WolfAttackPlayerListener;
|
||||
import eu.endermite.togglepvp.listeners.wolf.WolfTargettingListener;
|
||||
import eu.endermite.togglepvp.players.PlayerManager;
|
||||
import eu.endermite.togglepvp.players.SmartCache;
|
||||
import eu.endermite.togglepvp.util.DatabaseSQLite;
|
||||
import lombok.Getter;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@@ -31,6 +32,8 @@ public final class TogglePvP extends JavaPlugin {
|
||||
sqLite.testConnection();
|
||||
playerManager = new PlayerManager();
|
||||
|
||||
SmartCache.runSmartCache();
|
||||
|
||||
getServer().getPluginManager().registerEvents(new PlayerJoinAndLeaveListener(), this);
|
||||
getServer().getPluginManager().registerEvents(new PlayerAttackListener(), this);
|
||||
getServer().getPluginManager().registerEvents(new PlayerHitByProjectileListener(), this);
|
||||
|
||||
@@ -25,7 +25,7 @@ public class PvpToggleCommand {
|
||||
if (args.length == 1) {
|
||||
if (sender instanceof Player) {
|
||||
Player player = (Player) sender;
|
||||
boolean currentState = TogglePvP.getPlugin().getPlayerManager().togglePlayerPvpState(player);
|
||||
boolean currentState = TogglePvP.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId());
|
||||
|
||||
String message = "";
|
||||
if (currentState) {
|
||||
@@ -47,7 +47,7 @@ public class PvpToggleCommand {
|
||||
}
|
||||
try {
|
||||
Player player = Bukkit.getPlayer(args[1]);
|
||||
boolean currentState = TogglePvP.getPlugin().getPlayerManager().togglePlayerPvpState(player);
|
||||
boolean currentState = TogglePvP.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId());
|
||||
String message;
|
||||
if (currentState) {
|
||||
message = TogglePvP.getPlugin().getConfigCache().getPvp_enabled_other();
|
||||
@@ -79,7 +79,7 @@ public class PvpToggleCommand {
|
||||
if (args.length == 1) {
|
||||
if (sender instanceof Player) {
|
||||
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());
|
||||
BaseComponent[] component = TextComponent.fromLegacyText(message);
|
||||
player.spigot().sendMessage(ChatMessageType.CHAT, component);
|
||||
@@ -97,7 +97,7 @@ public class PvpToggleCommand {
|
||||
Player player = Bukkit.getPlayer(args[1]);
|
||||
String message = TogglePvP.getPlugin().getConfigCache().getPvp_enabled_other();
|
||||
sender.sendMessage(PluginMessages.parsePlayerName(player, message));
|
||||
TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player, true);
|
||||
TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), true);
|
||||
} catch (NullPointerException e) {
|
||||
sender.sendMessage(PluginMessages.parseMessage("&cPlayer offline."));
|
||||
}
|
||||
@@ -120,7 +120,7 @@ public class PvpToggleCommand {
|
||||
if (args.length == 1) {
|
||||
if (sender instanceof Player) {
|
||||
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());
|
||||
BaseComponent[] component = TextComponent.fromLegacyText(message);
|
||||
player.spigot().sendMessage(ChatMessageType.CHAT, component);
|
||||
@@ -138,7 +138,7 @@ public class PvpToggleCommand {
|
||||
Player player = Bukkit.getPlayer(args[1]);
|
||||
String message = TogglePvP.getPlugin().getConfigCache().getPvp_disabled_other();
|
||||
sender.sendMessage(PluginMessages.parsePlayerName(player, message));
|
||||
TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player, true);
|
||||
TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), true);
|
||||
} catch (NullPointerException e) {
|
||||
sender.sendMessage(PluginMessages.parseMessage("&cPlayer offline."));
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ public class ConfigCache {
|
||||
@Getter private final String pvp_disabled_other;
|
||||
@Getter private final double lava_and_fire_stopper_radius;
|
||||
@Getter private final boolean channeling_enchant_disabled;
|
||||
@Getter private final long cache_time;
|
||||
|
||||
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_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
|
||||
this.pvp_enabled = config.getString("messages.pvp_enabled", "&cYou enabled PvP!");
|
||||
|
||||
+2
-2
@@ -43,13 +43,13 @@ public class AreaEffectCloudApplyListener implements Listener {
|
||||
continue;
|
||||
|
||||
ConfigCache config = TogglePvP.getPlugin().getConfigCache();
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager);
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
|
||||
if (!damagerPvpEnabled) {
|
||||
it.remove();
|
||||
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
|
||||
continue;
|
||||
}
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
|
||||
if (!victimPvpEnabled) {
|
||||
it.remove();
|
||||
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
|
||||
|
||||
@@ -24,8 +24,8 @@ public class FishingListener implements Listener {
|
||||
}
|
||||
|
||||
ConfigCache config = TogglePvP.getPlugin().getConfigCache();
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager);
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
|
||||
if (!damagerPvpEnabled) {
|
||||
event.setCancelled(true);
|
||||
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
|
||||
|
||||
+4
-4
@@ -35,13 +35,13 @@ public class LavaDumpAndIgniteListener implements Listener {
|
||||
if (entity instanceof Player) {
|
||||
Player victim = (Player) entity;
|
||||
if (victim != damager) {
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager);
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
|
||||
if (!damagerPvpEnabled) {
|
||||
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
|
||||
if (!victimPvpEnabled) {
|
||||
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
|
||||
event.setCancelled(true);
|
||||
@@ -71,13 +71,13 @@ public class LavaDumpAndIgniteListener implements Listener {
|
||||
if (entity instanceof Player) {
|
||||
Player victim = (Player) entity;
|
||||
if (victim != damager) {
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager);
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
|
||||
if (!damagerPvpEnabled) {
|
||||
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
|
||||
if (!victimPvpEnabled) {
|
||||
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
|
||||
event.setCancelled(true);
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ public class LightningBlockIgniteListener implements Listener {
|
||||
if (entity instanceof Player) {
|
||||
Player player = (Player) entity;
|
||||
|
||||
if (!TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(player)) {
|
||||
if (!TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(player.getUniqueId())) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -25,8 +25,8 @@ public class PlayerAttackListener implements Listener {
|
||||
|
||||
ConfigCache config = TogglePvP.getPlugin().getConfigCache();
|
||||
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager);
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
|
||||
|
||||
if (!damagerPvpEnabled) {
|
||||
event.setCancelled(true);
|
||||
|
||||
+2
-2
@@ -35,13 +35,13 @@ public class PlayerHitByExplosionListener implements Listener {
|
||||
Player damager = Bukkit.getPlayer(playeruuid);
|
||||
if (victim != damager) {
|
||||
ConfigCache config = TogglePvP.getPlugin().getConfigCache();
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager);
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
|
||||
if (!damagerPvpEnabled) {
|
||||
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
|
||||
if (!victimPvpEnabled) {
|
||||
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
|
||||
event.setCancelled(true);
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public class PlayerHitByFireworkListener implements Listener {
|
||||
if (damager == victim) {
|
||||
return;
|
||||
}
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
|
||||
if (!victimPvpEnabled) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ public class PlayerHitByLightningListener implements Listener {
|
||||
public void onPlayerLightningDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
|
||||
if (event.getDamager() instanceof LightningStrike && event.getDamager().getMetadata("TRIDENT").size() >= 1 && event.getEntity() instanceof Player) {
|
||||
Player victim = (Player) event.getEntity();
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
|
||||
if (!victimPvpEnabled) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
+2
-2
@@ -30,8 +30,8 @@ public class PlayerHitByProjectileListener implements Listener {
|
||||
|
||||
ConfigCache config = TogglePvP.getPlugin().getConfigCache();
|
||||
|
||||
boolean damagerPvpEnabled = (boolean) TogglePvP.getPlugin().getPlayerManager().getPlayer(damager).get("pvpenabled");
|
||||
boolean victimPvpEnabled = (boolean) TogglePvP.getPlugin().getPlayerManager().getPlayer(victim).get("pvpenabled");
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
|
||||
|
||||
if (!damagerPvpEnabled) {
|
||||
event.setCancelled(true);
|
||||
|
||||
+2
-2
@@ -49,13 +49,13 @@ public class PlayerHitBySplashPotionListener implements Listener {
|
||||
continue;
|
||||
|
||||
ConfigCache config = TogglePvP.getPlugin().getConfigCache();
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager);
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
|
||||
if (!damagerPvpEnabled) {
|
||||
event.setIntensity(victim, 0);
|
||||
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
|
||||
continue;
|
||||
}
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
|
||||
if (!victimPvpEnabled) {
|
||||
event.setIntensity(victim, 0);
|
||||
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
|
||||
|
||||
+4
-5
@@ -17,9 +17,9 @@ public class PlayerJoinAndLeaveListener implements Listener {
|
||||
|
||||
Player player = event.getPlayer();
|
||||
HashMap<String, Object> playerData;
|
||||
playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(player);
|
||||
TogglePvP.getPlugin().getPlayerManager().addPlayer(player, playerData);
|
||||
|
||||
playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(player.getUniqueId());
|
||||
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
|
||||
@@ -27,8 +27,7 @@ public class PlayerJoinAndLeaveListener implements Listener {
|
||||
@EventHandler
|
||||
public void onPlayerLeave(org.bukkit.event.player.PlayerQuitEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
TogglePvP.getPlugin().getSqLite().updatePlayerInfo(player, TogglePvP.getPlugin().getPlayerManager().getPlayer(player));
|
||||
TogglePvP.getPlugin().getPlayerManager().removePlayer(player);
|
||||
TogglePvP.getPlugin().getSqLite().updatePlayerInfo(player.getUniqueId(), TogglePvP.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+2
-2
@@ -34,13 +34,13 @@ public class PlayerPlaceWitherRoseListener implements Listener {
|
||||
Player damager = event.getPlayer();
|
||||
Player victim = (Player) entity;
|
||||
if (victim != damager) {
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager);
|
||||
boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId());
|
||||
if (!damagerPvpEnabled) {
|
||||
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
|
||||
if (!victimPvpEnabled) {
|
||||
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
|
||||
event.setCancelled(true);
|
||||
|
||||
@@ -18,8 +18,11 @@ public class WolfAttackPlayerListener implements Listener {
|
||||
if (event.getDamager() instanceof Wolf) {
|
||||
Wolf wolf = (Wolf) event.getDamager();
|
||||
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();
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
|
||||
if (!victimPvpEnabled) {
|
||||
wolf.setAngry(false);
|
||||
event.setCancelled(true);
|
||||
|
||||
@@ -20,7 +20,7 @@ public class WolfTargettingListener implements Listener {
|
||||
if (wolf.getOwner() != null) {
|
||||
if (event.getTarget() instanceof Player) {
|
||||
Player victim = (Player) event.getTarget();
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
|
||||
if (!victimPvpEnabled) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@@ -31,7 +31,7 @@ public class WolfTargettingListener implements Listener {
|
||||
if (fox.getFirstTrustedPlayer() != null) {
|
||||
if (event.getTarget() instanceof Player) {
|
||||
Player victim = (Player) event.getTarget();
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim);
|
||||
boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getUniqueId());
|
||||
if (!victimPvpEnabled) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@@ -1,50 +1,65 @@
|
||||
package eu.endermite.togglepvp.players;
|
||||
|
||||
import eu.endermite.togglepvp.TogglePvP;
|
||||
import lombok.Getter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
public class PlayerManager {
|
||||
|
||||
HashMap<Player, HashMap<String, Object>> playerList = new HashMap<>();
|
||||
@Getter HashMap<UUID, HashMap<String, Object>> playerList = new HashMap<>();
|
||||
|
||||
public PlayerManager() {
|
||||
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
HashMap<String, Object> playerData;
|
||||
playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(p);
|
||||
playerList.put(p, playerData);
|
||||
playerData = TogglePvP.getPlugin().getSqLite().getPlayerInfo(p.getUniqueId());
|
||||
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) {
|
||||
playerList.put(player, data);
|
||||
public void refreshPlayersCacheTime(UUID uuid) {
|
||||
playerList.get(uuid).replace("cachetime", refreshedCacheTime());
|
||||
}
|
||||
|
||||
public void removePlayer(Player player) {
|
||||
playerList.remove(player);
|
||||
public HashMap<String, Object> getPlayer(UUID uuid) {
|
||||
return playerList.get(uuid);
|
||||
}
|
||||
|
||||
public boolean getPlayerPvPState(Player p) {
|
||||
return (boolean) playerList.get(p).get("pvpenabled");
|
||||
public void addPlayer(UUID uuid, HashMap<String,Object> data) {
|
||||
playerList.put(uuid, data);
|
||||
}
|
||||
|
||||
public void setPlayerPvpState(Player player, boolean state) {
|
||||
playerList.get(player).replace("pvpenabled", state);
|
||||
public void removePlayer(UUID uuid) {
|
||||
playerList.remove(uuid);
|
||||
}
|
||||
|
||||
public boolean togglePlayerPvpState(Player player) {
|
||||
boolean currentState = (boolean) playerList.get(player).get("pvpenabled");
|
||||
public boolean getPlayerPvPState(UUID uuid) {
|
||||
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) {
|
||||
playerList.get(player).replace("pvpenabled", false);
|
||||
playerList.get(uuid).replace("pvpenabled", false);
|
||||
return false;
|
||||
} else {
|
||||
playerList.get(player).replace("pvpenabled", true);
|
||||
playerList.get(uuid).replace("pvpenabled", 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;
|
||||
|
||||
import eu.endermite.togglepvp.TogglePvP;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.File;
|
||||
import java.sql.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
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<>();
|
||||
|
||||
try {
|
||||
Connection conn = DriverManager.getConnection(url);
|
||||
Statement insertnewuser = conn.createStatement();
|
||||
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);
|
||||
} catch (SQLException e) {
|
||||
if (e.getErrorCode() != 19) {
|
||||
@@ -71,7 +69,7 @@ public class DatabaseSQLite {
|
||||
}
|
||||
}
|
||||
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);
|
||||
ResultSet result = statement.getResultSet();
|
||||
dataHashMap.put("pvpenabled", result.getBoolean("pvpenabled"));
|
||||
@@ -84,13 +82,13 @@ public class DatabaseSQLite {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void updatePlayerInfo(Player p, HashMap<String, Object> data) {
|
||||
public void updatePlayerInfo(UUID uuid, HashMap<String, Object> data) {
|
||||
|
||||
try {
|
||||
Connection conn = DriverManager.getConnection(url);
|
||||
Statement insertnewuser = conn.createStatement();
|
||||
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);
|
||||
} catch (SQLException e) {
|
||||
TogglePvP.getPlugin().getLogger().severe("Error while saving player data!");
|
||||
|
||||
@@ -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
|
||||
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:
|
||||
pvp_enabled: "&cYou enabled PvP!"
|
||||
pvp_disabled: "&cYou disabled PvP!"
|
||||
|
||||
Reference in New Issue
Block a user