refactors, code style fixes, rpeventing events from firing when not needed

This commit is contained in:
2023-06-22 18:41:16 +02:00
parent 3919b0f44b
commit d859fd0aaa
14 changed files with 153 additions and 119 deletions
@@ -2,7 +2,7 @@ package me.youhavetrouble.preventstabby;
import me.youhavetrouble.preventstabby.commands.MainCommand; import me.youhavetrouble.preventstabby.commands.MainCommand;
import me.youhavetrouble.preventstabby.config.ConfigCache; import me.youhavetrouble.preventstabby.config.ConfigCache;
import me.youhavetrouble.preventstabby.hooks.PlacoholderApiHook; import me.youhavetrouble.preventstabby.hooks.PlaceholderApiHook;
import me.youhavetrouble.preventstabby.hooks.WorldGuardHook; import me.youhavetrouble.preventstabby.hooks.WorldGuardHook;
import me.youhavetrouble.preventstabby.players.PlayerManager; import me.youhavetrouble.preventstabby.players.PlayerManager;
import me.youhavetrouble.preventstabby.players.SmartCache; import me.youhavetrouble.preventstabby.players.SmartCache;
@@ -77,7 +77,7 @@ public final class PreventStabby extends JavaPlugin {
pvpCommand.setTabCompleter(mainCommand); pvpCommand.setTabCompleter(mainCommand);
if (getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) { if (getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) {
new PlacoholderApiHook(this).register(); new PlaceholderApiHook(this).register();
} }
Metrics metrics = new Metrics(this, 14074); Metrics metrics = new Metrics(this, 14074);
@@ -45,4 +45,10 @@ public class PlayerLeaveCombatEvent extends Event implements Cancellable {
public HandlerList getHandlers() { public HandlerList getHandlers() {
return HANDLERS; return HANDLERS;
} }
@NotNull
public static HandlerList getHandlerList() {
return HANDLERS;
}
} }
@@ -59,4 +59,10 @@ public class PlayerTogglePvpEvent extends Event {
public HandlerList getHandlers() { public HandlerList getHandlers() {
return HANDLERS; return HANDLERS;
} }
@NotNull
public static HandlerList getHandlerList() {
return HANDLERS;
}
} }
@@ -19,7 +19,10 @@ public class PvpToggleCommand {
} }
if (args.length <= 1) { if (args.length <= 1) {
if (sender instanceof Player) { if (!(sender instanceof Player)) {
PluginMessages.sendMessage(sender, "Try /pvp toggle <player>");
return;
}
Player player = (Player) sender; Player player = (Player) sender;
if (CombatTimer.isInCombat(player.getUniqueId())) { if (CombatTimer.isInCombat(player.getUniqueId())) {
PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getCant_do_that_during_combat()); PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getCant_do_that_during_combat());
@@ -28,18 +31,17 @@ public class PvpToggleCommand {
boolean currentState = PreventStabby.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId()); boolean currentState = PreventStabby.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId());
PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, currentState, true); PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, currentState, true);
Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> {
if (PlayerTogglePvpEvent.getHandlerList().getRegisteredListeners().length > 0) {
Bukkit.getPluginManager().callEvent(toggleEvent); Bukkit.getPluginManager().callEvent(toggleEvent);
if (toggleEvent.isSendMessage()) { }
if (!toggleEvent.isSendMessage()) return;
if (currentState) { if (currentState) {
PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_enabled()); PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_enabled());
} else { } else {
PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_disabled()); PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_disabled());
} }
}
}); });
} else {
PluginMessages.sendMessage(sender, "Try /pvp toggle <player>");
}
} else if (args.length == 2) { } else if (args.length == 2) {
if (!PreventStabbyPermission.COMMAND_TOGGLE_OTHERS.doesCommandSenderHave(sender)) { if (!PreventStabbyPermission.COMMAND_TOGGLE_OTHERS.doesCommandSenderHave(sender)) {
PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getNo_permission()); PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getNo_permission());
@@ -61,7 +63,9 @@ public class PvpToggleCommand {
boolean currentState = PreventStabby.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId()); boolean currentState = PreventStabby.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId());
PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, currentState, false); PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, currentState, false);
Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> {
if (PlayerTogglePvpEvent.getHandlerList().getRegisteredListeners().length > 0) {
Bukkit.getPluginManager().callEvent(toggleEvent); Bukkit.getPluginManager().callEvent(toggleEvent);
}
if (toggleEvent.isSendMessage()) { if (toggleEvent.isSendMessage()) {
if (currentState) { if (currentState) {
PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().getPvp_enabled()); PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().getPvp_enabled());
@@ -88,7 +92,10 @@ public class PvpToggleCommand {
return; return;
} }
if (args.length == 1) { if (args.length == 1) {
if (sender instanceof Player) { if (!(sender instanceof Player)) {
PluginMessages.sendMessage(sender, "Try /pvp enable <player>");
return;
}
Player player = (Player) sender; Player player = (Player) sender;
if (CombatTimer.isInCombat(player.getUniqueId())) { if (CombatTimer.isInCombat(player.getUniqueId())) {
PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getCant_do_that_during_combat()); PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getCant_do_that_during_combat());
@@ -97,14 +104,14 @@ public class PvpToggleCommand {
PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), true); PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), true);
PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, true, true); PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, true, true);
Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> {
if (PlayerTogglePvpEvent.getHandlerList().getRegisteredListeners().length > 0) {
Bukkit.getPluginManager().callEvent(toggleEvent); Bukkit.getPluginManager().callEvent(toggleEvent);
}
if (toggleEvent.isSendMessage()) { if (toggleEvent.isSendMessage()) {
PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_enabled()); PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_enabled());
} }
}); });
} else {
PluginMessages.sendMessage(sender, "Try /pvp enable <player>");
}
} else if (args.length == 2) { } else if (args.length == 2) {
if (!PreventStabbyPermission.COMMAND_TOGGLE_OTHERS.doesCommandSenderHave(sender)) { if (!PreventStabbyPermission.COMMAND_TOGGLE_OTHERS.doesCommandSenderHave(sender)) {
PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getNo_permission()); PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getNo_permission());
@@ -127,7 +134,9 @@ public class PvpToggleCommand {
PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), true); PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), true);
PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, true, false); PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, true, false);
Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> {
if (PlayerTogglePvpEvent.getHandlerList().getRegisteredListeners().length > 0) {
Bukkit.getPluginManager().callEvent(toggleEvent); Bukkit.getPluginManager().callEvent(toggleEvent);
}
if (toggleEvent.isSendMessage()) { if (toggleEvent.isSendMessage()) {
PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().getPvp_enabled()); PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().getPvp_enabled());
} }
@@ -156,7 +165,9 @@ public class PvpToggleCommand {
PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), false); PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), false);
PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, false, true); PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, false, true);
Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> {
if (PlayerTogglePvpEvent.getHandlerList().getRegisteredListeners().length > 0) {
Bukkit.getPluginManager().callEvent(toggleEvent); Bukkit.getPluginManager().callEvent(toggleEvent);
}
if (toggleEvent.isSendMessage()) { if (toggleEvent.isSendMessage()) {
PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_disabled()); PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_disabled());
} }
@@ -186,7 +197,9 @@ public class PvpToggleCommand {
PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), false); PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), false);
PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, false, false); PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, false, false);
Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> {
if (PlayerTogglePvpEvent.getHandlerList().getRegisteredListeners().length > 0) {
Bukkit.getPluginManager().callEvent(toggleEvent); Bukkit.getPluginManager().callEvent(toggleEvent);
}
if (toggleEvent.isSendMessage()) { if (toggleEvent.isSendMessage()) {
PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().getPvp_disabled()); PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().getPvp_disabled());
} }
@@ -10,6 +10,10 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
/**
* TODO get rid of lombok
* TODO parse messages into components and cache that
*/
public class ConfigCache { public class ConfigCache {
private final PreventStabby plugin = PreventStabby.getPlugin(); private final PreventStabby plugin = PreventStabby.getPlugin();
@@ -9,7 +9,6 @@ public enum PreventStabbyPermission {
COMMAND_TOGGLE_OTHERS("command.toggle.others"), COMMAND_TOGGLE_OTHERS("command.toggle.others"),
COMMAND_RELOAD("command.reload"), COMMAND_RELOAD("command.reload"),
COMMAND_GLOBAL_TOGGLE("command.toggle.global"), COMMAND_GLOBAL_TOGGLE("command.toggle.global"),
COMMAND_HELP("command.help"); COMMAND_HELP("command.help");
private final String permission; private final String permission;
@@ -3,20 +3,18 @@ package me.youhavetrouble.preventstabby.hooks;
import me.clip.placeholderapi.expansion.PlaceholderExpansion; import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import me.youhavetrouble.preventstabby.PreventStabby; import me.youhavetrouble.preventstabby.PreventStabby;
import me.youhavetrouble.preventstabby.util.PluginMessages; import me.youhavetrouble.preventstabby.util.PluginMessages;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.time.Instant;
import java.util.UUID; import java.util.UUID;
public class PlacoholderApiHook extends PlaceholderExpansion { public class PlaceholderApiHook extends PlaceholderExpansion {
private final PreventStabby plugin; private final PreventStabby plugin;
private final LegacyComponentSerializer legacyComponentSerializer; private final LegacyComponentSerializer legacyComponentSerializer;
public PlacoholderApiHook(PreventStabby preventStabby) { public PlaceholderApiHook(PreventStabby preventStabby) {
plugin = preventStabby; plugin = preventStabby;
this.legacyComponentSerializer = LegacyComponentSerializer.legacyAmpersand(); this.legacyComponentSerializer = LegacyComponentSerializer.legacyAmpersand();
} }
@@ -12,7 +12,7 @@ import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
import com.sk89q.worldguard.protection.regions.RegionContainer; import com.sk89q.worldguard.protection.regions.RegionContainer;
import com.sk89q.worldguard.protection.regions.RegionQuery; import com.sk89q.worldguard.protection.regions.RegionQuery;
import org.bukkit.Bukkit; import me.youhavetrouble.preventstabby.PreventStabby;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
public class WorldGuardHook { public class WorldGuardHook {
@@ -25,7 +25,7 @@ public class WorldGuardHook {
Class.forName("com.sk89q.worldguard.protection.flags.registry.FlagRegistry"); Class.forName("com.sk89q.worldguard.protection.flags.registry.FlagRegistry");
WorldGuardPlugin worldGuardPlugin = WorldGuardPlugin.inst(); WorldGuardPlugin worldGuardPlugin = WorldGuardPlugin.inst();
if (WorldGuard.getInstance() == null || worldGuardPlugin == null) return; if (WorldGuard.getInstance() == null || worldGuardPlugin == null) return;
Bukkit.getLogger().info("[PreventStabby] Hooking into WorldGuard"); PreventStabby.getPlugin().getLogger().info("[PreventStabby] Hooking into WorldGuard");
flagRegistry = WorldGuard.getInstance().getFlagRegistry(); flagRegistry = WorldGuard.getInstance().getFlagRegistry();
createForcePvpFlag(); createForcePvpFlag();
} catch (NoClassDefFoundError | ClassNotFoundException ignored) { } catch (NoClassDefFoundError | ClassNotFoundException ignored) {
@@ -44,7 +44,7 @@ public class WorldGuardHook {
if (existing instanceof StateFlag) { if (existing instanceof StateFlag) {
FORCE_PVP_FLAG = (StateFlag) existing; FORCE_PVP_FLAG = (StateFlag) existing;
} else { } else {
Bukkit.getLogger().severe("[PreventStabby] There is a conflict between flag names!"); PreventStabby.getPlugin().getLogger().severe("[PreventStabby] There is a conflict between flag names!");
} }
} }
} }
@@ -6,7 +6,7 @@ import java.time.Instant;
import java.util.UUID; import java.util.UUID;
/** /**
* PreventStabby player data keeper.<br> * PreventStabby player data keeper.
*/ */
public class PlayerData { public class PlayerData {
@@ -6,18 +6,20 @@ import org.bukkit.entity.Player;
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;
import org.bukkit.event.entity.EntityDeathEvent;
@PreventStabbyListener @PreventStabbyListener
public class PlayerDeathListener implements Listener { public class PlayerDeathListener implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerDeath(org.bukkit.event.entity.EntityDeathEvent event) { public void onPlayerDeath(EntityDeathEvent event) {
if (!(event.getEntity() instanceof Player)) return; if (!(event.getEntity() instanceof Player)) return;
Player player = (Player) event.getEntity(); Player player = (Player) event.getEntity();
PlayerData playerData = PreventStabby.getPlugin().getSmartCache().getPlayerData(player.getUniqueId()); PlayerData playerData = PreventStabby.getPlugin().getSmartCache().getPlayerData(player.getUniqueId());
if (playerData == null) return;
playerData.setCombattime(0); playerData.setCombattime(0);
playerData.setLastCombatCheck(false); playerData.setLastCombatCheck(false);
playerData.setInCombat(false); playerData.setInCombat(false);
@@ -1,14 +1,14 @@
package me.youhavetrouble.preventstabby.players; package me.youhavetrouble.preventstabby.players;
import me.youhavetrouble.preventstabby.PreventStabby; import me.youhavetrouble.preventstabby.PreventStabby;
import me.youhavetrouble.preventstabby.players.PlayerData;
import me.youhavetrouble.preventstabby.players.SmartCache;
import me.youhavetrouble.preventstabby.util.PluginMessages; import me.youhavetrouble.preventstabby.util.PluginMessages;
import me.youhavetrouble.preventstabby.util.PreventStabbyListener; import me.youhavetrouble.preventstabby.util.PreventStabbyListener;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import java.time.Instant; import java.time.Instant;
import java.util.UUID; import java.util.UUID;
@@ -19,23 +19,23 @@ public class PlayerJoinAndLeaveListener implements Listener {
* This event is here to get players saved options on join * This event is here to get players saved options on join
*/ */
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onPlayerJoin(org.bukkit.event.player.PlayerJoinEvent event) { public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
UUID uuid = player.getUniqueId(); UUID uuid = player.getUniqueId();
PlayerData playerData = PreventStabby.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()); PlayerData playerData = PreventStabby.getPlugin().getPlayerManager().getPlayer(player.getUniqueId());
long time = Instant.now().getEpochSecond(); long time = Instant.now().getEpochSecond();
if (playerData == null) { if (playerData != null) {
playerData.refreshCacheTime();
playerData.setLoginTimestamp(time);
return;
}
PreventStabby.getPlugin().getPlayerManager().addPlayer(uuid, new PlayerData(uuid, false)); PreventStabby.getPlugin().getPlayerManager().addPlayer(uuid, new PlayerData(uuid, false));
Bukkit.getScheduler().runTaskAsynchronously(PreventStabby.getPlugin(), () -> { Bukkit.getScheduler().runTaskAsynchronously(PreventStabby.getPlugin(), () -> {
PlayerData data = PreventStabby.getPlugin().getSqLite().getPlayerInfo(uuid); PlayerData data = PreventStabby.getPlugin().getSqLite().getPlayerInfo(uuid);
PreventStabby.getPlugin().getPlayerManager().addPlayer(uuid, data); PreventStabby.getPlugin().getPlayerManager().addPlayer(uuid, data);
data.setLoginTimestamp(time); data.setLoginTimestamp(time);
}); });
return;
}
playerData.refreshCacheTime();
playerData.setLoginTimestamp(time);
} }
/** /**
@@ -43,14 +43,13 @@ public class PlayerJoinAndLeaveListener implements Listener {
* Also punishes players who log out during combat * Also punishes players who log out during combat
*/ */
@EventHandler @EventHandler
public void onPlayerLeave(org.bukkit.event.player.PlayerQuitEvent event) { public void onPlayerLeave(PlayerQuitEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
Bukkit.getScheduler().runTaskAsynchronously(PreventStabby.getPlugin(), () -> PreventStabby.getPlugin().getSqLite().updatePlayerInfo(player.getUniqueId(), PreventStabby.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()))); Bukkit.getScheduler().runTaskAsynchronously(PreventStabby.getPlugin(), () -> PreventStabby.getPlugin().getSqLite().updatePlayerInfo(player.getUniqueId(), PreventStabby.getPlugin().getPlayerManager().getPlayer(player.getUniqueId())));
if (!PreventStabby.getPlugin().getConfigCache().isPunish_for_combat_logout()) return; if (!PreventStabby.getPlugin().getConfigCache().isPunish_for_combat_logout()) return;
SmartCache smartCache = PreventStabby.getPlugin().getSmartCache(); PlayerData playerData = PreventStabby.getPlugin().getSmartCache().getPlayerData(player.getUniqueId());
PlayerData playerData = smartCache.getPlayerData(player.getUniqueId());
if (!playerData.isInCombat()) return; if (!playerData.isInCombat()) return;
@@ -36,25 +36,27 @@ public class PlayerManager {
for (PlayerData playerData : playerList.values()) { for (PlayerData playerData : playerList.values()) {
UUID uuid = playerData.getPlayerUuid(); UUID uuid = playerData.getPlayerUuid();
if (!CombatTimer.isInCombat(uuid)) { if (!CombatTimer.isInCombat(uuid)) {
if (playerData.getLastCombatCheck()) { playerData.setLastCombatCheck(true);
continue;
}
if (!playerData.getLastCombatCheck()) continue;
Player player = Bukkit.getPlayer(uuid); Player player = Bukkit.getPlayer(uuid);
if (player == null) continue; if (player == null) continue;
PlayerLeaveCombatEvent playerLeaveCombatEvent = new PlayerLeaveCombatEvent(player);
Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> {
if (PlayerLeaveCombatEvent.getHandlerList().getRegisteredListeners().length > 0) {
PlayerLeaveCombatEvent playerLeaveCombatEvent = new PlayerLeaveCombatEvent(player);
Bukkit.getPluginManager().callEvent(playerLeaveCombatEvent); Bukkit.getPluginManager().callEvent(playerLeaveCombatEvent);
if (playerLeaveCombatEvent.isCancelled()) { if (playerLeaveCombatEvent.isCancelled()) {
playerData.refreshCombatTime(); playerData.refreshCombatTime();
return; return;
} }
}
playerData.setLastCombatCheck(false); playerData.setLastCombatCheck(false);
playerData.setInCombat(false); playerData.setInCombat(false);
PluginMessages.sendActionBar(uuid, PreventStabby.getPlugin().getConfigCache().getLeaving_combat()); PluginMessages.sendActionBar(uuid, PreventStabby.getPlugin().getConfigCache().getLeaving_combat());
}); });
} }
} else {
playerData.setLastCombatCheck(true);
}
}
}, 20, 20); }, 20, 20);
@@ -62,6 +64,7 @@ public class PlayerManager {
/** /**
* Sets player in combat and sets combat time to the interval set in config. * Sets player in combat and sets combat time to the interval set in config.
*
* @see PlayerData#refreshCombatTime() * @see PlayerData#refreshCombatTime()
*/ */
public void refreshPlayersCombatTime(UUID uuid) { public void refreshPlayersCombatTime(UUID uuid) {
@@ -75,6 +78,7 @@ public class PlayerManager {
/** /**
* Gets player's PlayerData object. Returns null when player with provided UUID doesn't exist. * Gets player's PlayerData object. Returns null when player with provided UUID doesn't exist.
*
* @param uuid Player's UUID. * @param uuid Player's UUID.
* @return Player's PlayerData object or null if player doesn't exist. * @return Player's PlayerData object or null if player doesn't exist.
*/ */
@@ -88,6 +92,7 @@ public class PlayerManager {
/** /**
* Returns true if player has personal pvp enabled, false otherwise. * Returns true if player has personal pvp enabled, false otherwise.
*
* @param uuid Player's UUID. * @param uuid Player's UUID.
* @return True if player has personal pvp enabled, false otherwise. * @return True if player has personal pvp enabled, false otherwise.
* @see PlayerData#isPvpEnabled() * @see PlayerData#isPvpEnabled()
@@ -98,6 +103,7 @@ public class PlayerManager {
/** /**
* Sets player's personal pvp state. * Sets player's personal pvp state.
*
* @param uuid Player's UUID. * @param uuid Player's UUID.
* @param state Pvp state to set. * @param state Pvp state to set.
* @see PlayerData#setPvpEnabled(boolean) * @see PlayerData#setPvpEnabled(boolean)
@@ -108,23 +114,21 @@ public class PlayerManager {
/** /**
* Toggles player's personal pvp state. * Toggles player's personal pvp state.
*
* @param uuid Player's UUID. * @param uuid Player's UUID.
* @return Player's personal pvp state after the change. * @return Player's personal pvp state after the change.
*/ */
public boolean togglePlayerPvpState(UUID uuid) { public boolean togglePlayerPvpState(UUID uuid) {
SmartCache smartCache = PreventStabby.getPlugin().getSmartCache(); PlayerData playerData = PreventStabby.getPlugin().getSmartCache().getPlayerData(uuid);
if (smartCache.getPlayerData(uuid).isPvpEnabled()) { boolean newState = !playerData.isPvpEnabled();
smartCache.getPlayerData(uuid).setPvpEnabled(false); playerData.setPvpEnabled(newState);
return false; return newState;
} else {
smartCache.getPlayerData(uuid).setPvpEnabled(true);
return true;
}
} }
/** /**
* Check if attacker can harm the victim. Both of them have to have personal pvp enabled and none of them can have * Check if attacker can harm the victim. Both of them have to have personal pvp enabled and none of them can have
* any kind of spawn or teleport protection. * any kind of spawn or teleport protection.
*
* @param attacker Atacker's UUID. * @param attacker Atacker's UUID.
* @param victim Victim's UUID. * @param victim Victim's UUID.
* @param sendDenyMessage Should plugin send a message that there was attempt at damaging to both players? * @param sendDenyMessage Should plugin send a message that there was attempt at damaging to both players?
@@ -136,6 +140,7 @@ public class PlayerManager {
/** /**
* Check if attacker can harm the victim. * Check if attacker can harm the victim.
*
* @param attacker Atacker's UUID. * @param attacker Atacker's UUID.
* @param victim Victim's UUID. * @param victim Victim's UUID.
* @param sendDenyMessage Should plugin send a message that there was attempt at damaging to both players? * @param sendDenyMessage Should plugin send a message that there was attempt at damaging to both players?
@@ -151,6 +156,7 @@ public class PlayerManager {
/** /**
* Check if attacker can harm the victim. * Check if attacker can harm the victim.
*
* @param attacker Atacker's UUID. * @param attacker Atacker's UUID.
* @param victim Victim's UUID. * @param victim Victim's UUID.
* @param attackerDenyMessage Message that action was denied to the attacker. * @param attackerDenyMessage Message that action was denied to the attacker.
@@ -225,6 +231,7 @@ public class PlayerManager {
/** /**
* Returns current forced pvp state. * Returns current forced pvp state.
*
* @return Current forced pvp state. * @return Current forced pvp state.
*/ */
public PvpState getForcedPvpState() { public PvpState getForcedPvpState() {
@@ -233,6 +240,7 @@ public class PlayerManager {
/** /**
* Sets current forced pvp state. * Sets current forced pvp state.
*
* @param forcedPvpState New forced pvp state. * @param forcedPvpState New forced pvp state.
*/ */
public void setForcedPvpState(PvpState forcedPvpState) { public void setForcedPvpState(PvpState forcedPvpState) {
@@ -6,13 +6,15 @@ import org.bukkit.entity.Player;
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;
import org.bukkit.event.player.PlayerTeleportEvent;
import java.time.Instant; import java.time.Instant;
@PreventStabbyListener @PreventStabbyListener
public class PlayerTeleportListener implements Listener { public class PlayerTeleportListener implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerTeleport(org.bukkit.event.player.PlayerTeleportEvent event) { public void onPlayerTeleport(PlayerTeleportEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
SmartCache smartCache = PreventStabby.getPlugin().getSmartCache(); SmartCache smartCache = PreventStabby.getPlugin().getSmartCache();
PlayerData playerData = smartCache.getPlayerData(player.getUniqueId()); PlayerData playerData = smartCache.getPlayerData(player.getUniqueId());
@@ -3,6 +3,7 @@ package me.youhavetrouble.preventstabby.players;
import me.youhavetrouble.preventstabby.PreventStabby; import me.youhavetrouble.preventstabby.PreventStabby;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.time.Instant; import java.time.Instant;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
@@ -13,39 +14,35 @@ public class SmartCache {
Bukkit.getScheduler().runTaskTimerAsynchronously(PreventStabby.getPlugin(), () -> { Bukkit.getScheduler().runTaskTimerAsynchronously(PreventStabby.getPlugin(), () -> {
// Refresh cache timer if player is online // Refresh cache timer if player is online
for (Map.Entry<UUID, PlayerData> e : PreventStabby.getPlugin().getPlayerManager().getPlayerList().entrySet()) { for (Map.Entry<UUID, PlayerData> e : PreventStabby.getPlugin().getPlayerManager().getPlayerList().entrySet()) {
try { if (e == null) continue;
Player player = Bukkit.getPlayer(e.getKey()); Player player = Bukkit.getPlayer(e.getKey());
if (player != null && player.isOnline()) { if (player != null && player.isOnline()) {
e.getValue().refreshCacheTime(); e.getValue().refreshCacheTime();
} }
} catch (NullPointerException ignored) {}
} }
// Check for entries that should be invalidated // Check for entries that should be invalidated
try { try {
long now = Instant.now().getEpochSecond(); long now = Instant.now().getEpochSecond();
PreventStabby.getPlugin().getPlayerManager().getPlayerList().entrySet() PreventStabby.getPlugin().getPlayerManager().getPlayerList().entrySet()
.removeIf(cacheEntry -> cacheEntry.getValue().getCachetime() < now); .removeIf(cacheEntry -> cacheEntry.getValue().getCachetime() < now);
} catch (Exception ignored) {} } catch (Exception ignored) {
}
}, 100, 100); }, 100, 100);
} }
public PlayerData getPlayerData(UUID uuid) { public PlayerData getPlayerData(UUID uuid) {
// Try to get data from cache and refresh it // Try to get data from cache and refresh it
try {
PlayerData data = PreventStabby.getPlugin().getPlayerManager().getPlayer(uuid); PlayerData data = PreventStabby.getPlugin().getPlayerManager().getPlayer(uuid);
if (data != null) {
data.refreshCacheTime(); data.refreshCacheTime();
return data; return data;
} catch (NullPointerException e) { }
// If player data is not in cache get it from database and put into cache
try {
PlayerData playerData = PreventStabby.getPlugin().getSqLite().getPlayerInfo(uuid); PlayerData playerData = PreventStabby.getPlugin().getSqLite().getPlayerInfo(uuid);
if (playerData == null) {
playerData = new PlayerData(uuid, false);
}
PreventStabby.getPlugin().getPlayerManager().addPlayer(uuid, playerData); PreventStabby.getPlugin().getPlayerManager().addPlayer(uuid, playerData);
return playerData; return playerData;
} catch (NullPointerException ex) {
// Return false if database call fails
return new PlayerData(uuid,false);
}
}
} }
public void setPlayerPvpState(UUID uuid, boolean state) { public void setPlayerPvpState(UUID uuid, boolean state) {