From 3c014304ba8c166871dfff51a9e52cab2a14f76e Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Sat, 31 Dec 2022 15:58:06 +0100 Subject: [PATCH 1/4] implement PlayerTogglePvpEvent --- .../api/event/PlayerTogglePvpEvent.java | 29 +++++---- .../commands/PvpToggleCommand.java | 62 ++++++++++++++++--- 2 files changed, 71 insertions(+), 20 deletions(-) diff --git a/src/main/java/me/youhavetrouble/preventstabby/api/event/PlayerTogglePvpEvent.java b/src/main/java/me/youhavetrouble/preventstabby/api/event/PlayerTogglePvpEvent.java index 1da34ae..a2aaa86 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/api/event/PlayerTogglePvpEvent.java +++ b/src/main/java/me/youhavetrouble/preventstabby/api/event/PlayerTogglePvpEvent.java @@ -1,42 +1,49 @@ package me.youhavetrouble.preventstabby.api.event; -import org.bukkit.entity.Player; +import org.bukkit.OfflinePlayer; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.jetbrains.annotations.NotNull; /** - * NOT IMPLEMENTED YET + * Fired when player gets their personal pvp state toggled. */ -@Deprecated public class PlayerTogglePvpEvent extends Event { private static final HandlerList HANDLERS = new HandlerList(); - private final Player player; - private boolean newState, sendMessage; + private final OfflinePlayer player; + private final boolean newState; + private boolean sendMessage; - public PlayerTogglePvpEvent(Player player, boolean newState, boolean sendMessage) { + public PlayerTogglePvpEvent(OfflinePlayer player, boolean newState, boolean sendMessage) { this.player = player; this.newState = newState; this.sendMessage = sendMessage; } - public Player getPlayer() { + public OfflinePlayer getPlayer() { return player; } + /** + * Returns the state player's pvp state was toggled to. + * @return The state player's pvp state was toggled to. + */ public boolean newState() { return newState; } - public void setNewState(boolean newState) { - this.newState = newState; - } - + /** + * Returns true if the state message will be sent to the player, false otherwise + * @return True if the state message will be sent to the player, false otherwise + */ public boolean isSendMessage() { return sendMessage; } + /** + * If this is true at the end of event pipeline, message with the current state will be sent to player. + */ public void setSendMessage(boolean sendMessage) { this.sendMessage = sendMessage; } diff --git a/src/main/java/me/youhavetrouble/preventstabby/commands/PvpToggleCommand.java b/src/main/java/me/youhavetrouble/preventstabby/commands/PvpToggleCommand.java index 79ad06b..574534f 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/commands/PvpToggleCommand.java +++ b/src/main/java/me/youhavetrouble/preventstabby/commands/PvpToggleCommand.java @@ -1,6 +1,7 @@ package me.youhavetrouble.preventstabby.commands; import me.youhavetrouble.preventstabby.PreventStabby; +import me.youhavetrouble.preventstabby.api.event.PlayerTogglePvpEvent; import me.youhavetrouble.preventstabby.config.PreventStabbyPermission; import me.youhavetrouble.preventstabby.util.CombatTimer; import me.youhavetrouble.preventstabby.util.PluginMessages; @@ -25,12 +26,17 @@ public class PvpToggleCommand { return; } boolean currentState = PreventStabby.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId()); - - if (currentState) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_enabled()); - } else { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_disabled()); - } + PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, currentState, true); + Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { + Bukkit.getPluginManager().callEvent(toggleEvent); + if (toggleEvent.isSendMessage()) { + if (currentState) { + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_enabled()); + } else { + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_disabled()); + } + } + }); } else { PluginMessages.sendMessage(sender, "Try /pvp toggle "); } @@ -53,6 +59,18 @@ public class PvpToggleCommand { return; } boolean currentState = PreventStabby.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId()); + PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, currentState, false); + Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { + Bukkit.getPluginManager().callEvent(toggleEvent); + if (toggleEvent.isSendMessage()) { + if (currentState) { + PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().getPvp_enabled()); + } else { + PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().getPvp_disabled()); + } + } + }); + String message; if (currentState) { message = PreventStabby.getPlugin().getConfigCache().getPvp_enabled_other(); @@ -77,7 +95,13 @@ public class PvpToggleCommand { return; } PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), true); - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_enabled()); + PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, true, true); + Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { + Bukkit.getPluginManager().callEvent(toggleEvent); + if (toggleEvent.isSendMessage()) { + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_enabled()); + } + }); } else { PluginMessages.sendMessage(sender, "Try /pvp enable "); } @@ -101,6 +125,13 @@ public class PvpToggleCommand { String message = PreventStabby.getPlugin().getConfigCache().getPvp_enabled_other(); PluginMessages.sendMessage(sender, PluginMessages.parsePlayerName(player, message)); PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), true); + PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, true, false); + Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { + Bukkit.getPluginManager().callEvent(toggleEvent); + if (toggleEvent.isSendMessage()) { + PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().getPvp_enabled()); + } + }); } else { if (PreventStabbyPermission.COMMAND_TOGGLE_OTHERS.doesCommandSenderHave(sender)) { PluginMessages.sendMessage(sender, "Try /pvp enable "); @@ -123,7 +154,13 @@ public class PvpToggleCommand { return; } PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), false); - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_disabled()); + PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, false, true); + Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { + Bukkit.getPluginManager().callEvent(toggleEvent); + if (toggleEvent.isSendMessage()) { + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_disabled()); + } + }); } else { PluginMessages.sendMessage(sender, "Try /pvp disable "); } @@ -146,7 +183,14 @@ public class PvpToggleCommand { } String message = PreventStabby.getPlugin().getConfigCache().getPvp_disabled_other(); PluginMessages.sendMessage(sender, PluginMessages.parsePlayerName(player, message)); - PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), true); + PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), false); + PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, false, false); + Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { + Bukkit.getPluginManager().callEvent(toggleEvent); + if (toggleEvent.isSendMessage()) { + PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().getPvp_disabled()); + } + }); } else { if (PreventStabbyPermission.COMMAND_TOGGLE_OTHERS.doesCommandSenderHave(sender)) { From 5abf99cd6c1db3f1a0e3bb2d390b830fef105176 Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Sat, 31 Dec 2022 16:44:50 +0100 Subject: [PATCH 2/4] semi-major api changes, javadocs --- .../api/event/PlayerTogglePvpEvent.java | 6 +++ .../hooks/PlacoholderApiHook.java | 2 +- .../preventstabby/players/PlayerData.java | 53 ++++++++++++++----- .../PlayerDeathListener.java | 3 +- .../PlayerJoinAndLeaveListener.java | 4 +- .../preventstabby/players/PlayerManager.java | 2 +- .../PlayerTeleportListener.java | 4 +- .../preventstabby/util/CombatTimer.java | 7 ++- 8 files changed, 55 insertions(+), 26 deletions(-) rename src/main/java/me/youhavetrouble/preventstabby/{listeners/player => players}/PlayerDeathListener.java (87%) rename src/main/java/me/youhavetrouble/preventstabby/{listeners/player => players}/PlayerJoinAndLeaveListener.java (96%) rename src/main/java/me/youhavetrouble/preventstabby/{listeners/player => players}/PlayerTeleportListener.java (82%) diff --git a/src/main/java/me/youhavetrouble/preventstabby/api/event/PlayerTogglePvpEvent.java b/src/main/java/me/youhavetrouble/preventstabby/api/event/PlayerTogglePvpEvent.java index a2aaa86..c256aa3 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/api/event/PlayerTogglePvpEvent.java +++ b/src/main/java/me/youhavetrouble/preventstabby/api/event/PlayerTogglePvpEvent.java @@ -1,5 +1,7 @@ package me.youhavetrouble.preventstabby.api.event; +import me.youhavetrouble.preventstabby.PreventStabby; +import me.youhavetrouble.preventstabby.players.PlayerData; import org.bukkit.OfflinePlayer; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; @@ -25,6 +27,10 @@ public class PlayerTogglePvpEvent extends Event { return player; } + public PlayerData getPlayerData() { + return PreventStabby.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()); + } + /** * Returns the state player's pvp state was toggled to. * @return The state player's pvp state was toggled to. diff --git a/src/main/java/me/youhavetrouble/preventstabby/hooks/PlacoholderApiHook.java b/src/main/java/me/youhavetrouble/preventstabby/hooks/PlacoholderApiHook.java index 722daf5..c11c4db 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/hooks/PlacoholderApiHook.java +++ b/src/main/java/me/youhavetrouble/preventstabby/hooks/PlacoholderApiHook.java @@ -55,7 +55,7 @@ public class PlacoholderApiHook extends PlaceholderExpansion { if (!player.isOnline()) { return legacyComponentSerializer.serialize(PluginMessages.parseMessage(plugin.getConfigCache().getPlaceholder_not_in_combat())); } - long seconds = plugin.getPlayerManager().getPlayer(uuid).getCombattime() - Instant.now().getEpochSecond(); + long seconds = plugin.getPlayerManager().getPlayer(uuid).getCombatTime(); if (seconds > 0) { String msg = plugin.getConfigCache().getPlaceholder_combat_time(); msg = msg.replaceAll("%time%", String.valueOf(seconds)); diff --git a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerData.java b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerData.java index d580d2d..29a0296 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerData.java +++ b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerData.java @@ -5,6 +5,9 @@ import me.youhavetrouble.preventstabby.PreventStabby; import java.time.Instant; import java.util.UUID; +/** + * PreventStabby player data keeper.
+ */ public class PlayerData { private final UUID playerUuid; @@ -18,13 +21,17 @@ public class PlayerData { this.loginTimestamp = Instant.now().getEpochSecond()-1; this.teleportTimestamp = Instant.now().getEpochSecond()-1; this.inCombat = false; - refreshCachetime(); + refreshCacheTime(); } public UUID getPlayerUuid() { return playerUuid; } + /** + * Returns true if player has personal pvp enabled, false otherwise. + * @return True if player has personal pvp enabled, false otherwise. + */ public boolean isPvpEnabled() { return pvpEnabled; } @@ -33,55 +40,75 @@ public class PlayerData { this.pvpEnabled = pvpEnabled; } - public long getCachetime() { + protected long getCachetime() { return cachetime; } - public void refreshCachetime() { - this.cachetime = Instant.now().getEpochSecond()+ PreventStabby.getPlugin().getConfigCache().getCache_time(); + /** + * Lets player cache system know that data should not be removed for the next cache time peroid.
+ * Use with caution, may cause memory leaks if used inappropriately. + */ + public void refreshCacheTime() { + this.cachetime = Instant.now().getEpochSecond() + PreventStabby.getPlugin().getConfigCache().getCache_time(); } - public long getCombattime() { - return combattime; + /** + * Time left until the end of combat in seconds. + * @return Time left until the end of combat in seconds.
+ * Return of 0 means out of combat or about to be out of combat. + */ + public long getCombatTime() { + return Math.max(combattime - Instant.now().getEpochSecond(), 0); } + /** + * Sets timestamp for combat expiry + * @param combattime Timestamp for when combat should expire + */ public void setCombattime(long combattime) { this.combattime = combattime; } + /** + * Sets player combat time to the interval set in config. + */ public void refreshCombatTime() { this.combattime = Instant.now().getEpochSecond()+ PreventStabby.getPlugin().getConfigCache().getCombat_time(); } - public boolean getLastCombatCheck() { + protected boolean getLastCombatCheck() { return lastCombatCheck; } - public void setLastCombatCheck(boolean bool) { + protected void setLastCombatCheck(boolean bool) { lastCombatCheck = bool; } - public void setLoginTimestamp(long loginTimestamp) { + protected void setLoginTimestamp(long loginTimestamp) { this.loginTimestamp = loginTimestamp + PreventStabby.getPlugin().getConfigCache().getLogin_protection_time()-1; } - public long getLoginTimestamp() { + protected long getLoginTimestamp() { return loginTimestamp; } - public void setTeleportTimestamp(long teleportTimestamp) { + protected void setTeleportTimestamp(long teleportTimestamp) { this.teleportTimestamp = teleportTimestamp + PreventStabby.getPlugin().getConfigCache().getTeleport_protection_time()-1; } - public long getTeleportTimestamp() { + protected long getTeleportTimestamp() { return teleportTimestamp; } + /** + * Returns player's current combat state. + * @return Player's current combat state. + */ public boolean isInCombat() { return inCombat; } - public void setInCombat(boolean inCombat) { + protected void setInCombat(boolean inCombat) { this.inCombat = inCombat; } } diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerDeathListener.java b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerDeathListener.java similarity index 87% rename from src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerDeathListener.java rename to src/main/java/me/youhavetrouble/preventstabby/players/PlayerDeathListener.java index d506f9a..5e177da 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerDeathListener.java +++ b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerDeathListener.java @@ -1,7 +1,6 @@ -package me.youhavetrouble.preventstabby.listeners.player; +package me.youhavetrouble.preventstabby.players; import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.players.PlayerData; import me.youhavetrouble.preventstabby.util.PreventStabbyListener; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerJoinAndLeaveListener.java b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerJoinAndLeaveListener.java similarity index 96% rename from src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerJoinAndLeaveListener.java rename to src/main/java/me/youhavetrouble/preventstabby/players/PlayerJoinAndLeaveListener.java index 8e8463f..416691c 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerJoinAndLeaveListener.java +++ b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerJoinAndLeaveListener.java @@ -1,4 +1,4 @@ -package me.youhavetrouble.preventstabby.listeners.player; +package me.youhavetrouble.preventstabby.players; import me.youhavetrouble.preventstabby.PreventStabby; import me.youhavetrouble.preventstabby.players.PlayerData; @@ -34,7 +34,7 @@ public class PlayerJoinAndLeaveListener implements Listener { }); return; } - playerData.refreshCachetime(); + playerData.refreshCacheTime(); playerData.setLoginTimestamp(time); } diff --git a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java index 788716a..e8e2a75 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java +++ b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java @@ -60,7 +60,7 @@ public class PlayerManager { } public void refreshPlayersCacheTime(UUID uuid) { - playerList.get(uuid).refreshCachetime(); + playerList.get(uuid).refreshCacheTime(); } public void refreshPlayersCombatTime(UUID uuid) { diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerTeleportListener.java b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerTeleportListener.java similarity index 82% rename from src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerTeleportListener.java rename to src/main/java/me/youhavetrouble/preventstabby/players/PlayerTeleportListener.java index a76ecb7..ab6ad56 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerTeleportListener.java +++ b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerTeleportListener.java @@ -1,8 +1,6 @@ -package me.youhavetrouble.preventstabby.listeners.player; +package me.youhavetrouble.preventstabby.players; import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.players.PlayerData; -import me.youhavetrouble.preventstabby.players.SmartCache; import me.youhavetrouble.preventstabby.util.PreventStabbyListener; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/src/main/java/me/youhavetrouble/preventstabby/util/CombatTimer.java b/src/main/java/me/youhavetrouble/preventstabby/util/CombatTimer.java index 854535f..ce1eba5 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/util/CombatTimer.java +++ b/src/main/java/me/youhavetrouble/preventstabby/util/CombatTimer.java @@ -11,8 +11,7 @@ public class CombatTimer { public static void refreshPlayersCombatTime(UUID uuid) { try { - long now = Instant.now().getEpochSecond(); - long combattime = PreventStabby.getPlugin().getSmartCache().getPlayerData(uuid).getCombattime(); + long combattime = PreventStabby.getPlugin().getSmartCache().getPlayerData(uuid).getCombatTime(); Player player = Bukkit.getPlayer(uuid); if (player == null || !player.isOnline()) return; @@ -22,7 +21,7 @@ public class CombatTimer { if (playerEnterCombatEvent.isCancelled()) return; PreventStabby.getPlugin().getPlayerManager().refreshPlayersCombatTime(uuid); - if (combattime <= now) { + if (combattime <= 0) { PluginMessages.sendActionBar(uuid, PreventStabby.getPlugin().getConfigCache().getEntering_combat()); } }); @@ -38,7 +37,7 @@ public class CombatTimer { public static boolean isInCombat(UUID uuid) { try { - return PreventStabby.getPlugin().getPlayerManager().getPlayer(uuid).getCombattime() >= Instant.now().getEpochSecond(); + return PreventStabby.getPlugin().getPlayerManager().getPlayer(uuid).getCombatTime() >= Instant.now().getEpochSecond(); } catch (Exception e) { return false; } From 61908b8fab6819f77ead8c43dea18c423f76bfac Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Sat, 31 Dec 2022 17:09:20 +0100 Subject: [PATCH 3/4] more api changes and javadocs --- .../preventstabby/players/PlayerData.java | 22 +++---- .../preventstabby/players/PlayerManager.java | 65 ++++++++++++++++--- .../preventstabby/players/SmartCache.java | 7 +- 3 files changed, 71 insertions(+), 23 deletions(-) diff --git a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerData.java b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerData.java index 29a0296..01f61e3 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerData.java +++ b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerData.java @@ -31,11 +31,16 @@ public class PlayerData { /** * Returns true if player has personal pvp enabled, false otherwise. * @return True if player has personal pvp enabled, false otherwise. + * @see PlayerManager#getPlayerPvPState(UUID) */ public boolean isPvpEnabled() { return pvpEnabled; } + /** + * Sets player's personal pvp state. + * @param pvpEnabled Pvp state to set. + */ public void setPvpEnabled(boolean pvpEnabled) { this.pvpEnabled = pvpEnabled; } @@ -44,11 +49,7 @@ public class PlayerData { return cachetime; } - /** - * Lets player cache system know that data should not be removed for the next cache time peroid.
- * Use with caution, may cause memory leaks if used inappropriately. - */ - public void refreshCacheTime() { + protected void refreshCacheTime() { this.cachetime = Instant.now().getEpochSecond() + PreventStabby.getPlugin().getConfigCache().getCache_time(); } @@ -60,17 +61,14 @@ public class PlayerData { public long getCombatTime() { return Math.max(combattime - Instant.now().getEpochSecond(), 0); } - - /** - * Sets timestamp for combat expiry - * @param combattime Timestamp for when combat should expire - */ - public void setCombattime(long combattime) { + + protected void setCombattime(long combattime) { this.combattime = combattime; } /** - * Sets player combat time to the interval set in config. + * Sets player in combat and sets combat time to the interval set in config. + * @see PlayerManager#refreshPlayersCombatTime(UUID) */ public void refreshCombatTime() { this.combattime = Instant.now().getEpochSecond()+ PreventStabby.getPlugin().getConfigCache().getCombat_time(); diff --git a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java index e8e2a75..901af5c 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java +++ b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java @@ -59,10 +59,10 @@ public class PlayerManager { } - public void refreshPlayersCacheTime(UUID uuid) { - playerList.get(uuid).refreshCacheTime(); - } - + /** + * Sets player in combat and sets combat time to the interval set in config. + * @see PlayerData#refreshCombatTime() + */ public void refreshPlayersCombatTime(UUID uuid) { PlayerData data = playerList.get(uuid); if (data == null) return; @@ -70,25 +70,46 @@ public class PlayerManager { if (player == null || player.isDead()) return; data.refreshCombatTime(); data.setInCombat(true); - } + /** + * Gets player's PlayerData object. Returns null when player with provided UUID doesn't exist. + * @param uuid Player's UUID. + * @return Player's PlayerData object or null if player doesn't exist. + */ public PlayerData getPlayer(UUID uuid) { return playerList.get(uuid); } - public void addPlayer(UUID uuid, PlayerData data) { + protected void addPlayer(UUID uuid, PlayerData data) { playerList.put(uuid, data); } + /** + * Returns true if player has personal pvp enabled, false otherwise. + * @param uuid Player's UUID. + * @return True if player has personal pvp enabled, false otherwise. + * @see PlayerData#isPvpEnabled() + */ public boolean getPlayerPvPState(UUID uuid) { return PreventStabby.getPlugin().getSmartCache().getPlayerData(uuid).isPvpEnabled(); } + /** + * Sets player's personal pvp state. + * @param uuid Player's UUID. + * @param state Pvp state to set. + * @see PlayerData#setPvpEnabled(boolean) + */ public void setPlayerPvpState(UUID uuid, boolean state) { PreventStabby.getPlugin().getSmartCache().getPlayerData(uuid).setPvpEnabled(state); } + /** + * Toggles player's personal pvp state. + * @param uuid Player's UUID. + * @return Player's personal pvp state after the change. + */ public boolean togglePlayerPvpState(UUID uuid) { SmartCache smartCache = PreventStabby.getPlugin().getSmartCache(); if (smartCache.getPlayerData(uuid).isPvpEnabled()) { @@ -100,10 +121,26 @@ public class PlayerManager { } } + /** + * 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. + * @param attacker Atacker's UUID. + * @param victim Victim's UUID. + * @param sendDenyMessage Should plugin send a message that there was attempt at damaging to both players? + * @return Whenever attacker can harm the victim. + */ public boolean canDamage(UUID attacker, UUID victim, boolean sendDenyMessage) { return canDamage(attacker, victim, sendDenyMessage, true); } + /** + * Check if attacker can harm the victim. + * @param attacker Atacker's UUID. + * @param victim Victim's UUID. + * @param sendDenyMessage Should plugin send a message that there was attempt at damaging to both players? + * @param checkVictimSpawnProtection Should teleport and spawn protections be taken into account? + * @return Whenever attacker can harm the victim. + */ public boolean canDamage(UUID attacker, UUID victim, boolean sendDenyMessage, boolean checkVictimSpawnProtection) { if (hasLoginProtection(attacker) || hasTeleportProtection(attacker)) return false; @@ -149,8 +186,8 @@ public class PlayerManager { } /** - * @param uuid Player UUIDs - * @return true if any of the provided UUIDs has spawn protection + * @param uuid Player UUIDs. + * @return True if any of the provided UUIDs has spawn protection. */ public boolean hasLoginProtection(UUID... uuid) { SmartCache smartCache = PreventStabby.getPlugin().getSmartCache(); @@ -161,15 +198,27 @@ public class PlayerManager { return false; } + /** + * @param uuid Player UUID. + * @return True if player tied to the uuid currently has teleport protection. + */ public boolean hasTeleportProtection(UUID uuid) { SmartCache smartCache = PreventStabby.getPlugin().getSmartCache(); return Instant.now().getEpochSecond() < smartCache.getPlayerData(uuid).getTeleportTimestamp(); } + /** + * Returns current forced pvp state. + * @return Current forced pvp state. + */ public PvpState getForcedPvpState() { return pvpForcedState; } + /** + * Sets current forced pvp state. + * @param forcedPvpState New forced pvp state. + */ public void setForcedPvpState(PvpState forcedPvpState) { this.pvpForcedState = forcedPvpState; } diff --git a/src/main/java/me/youhavetrouble/preventstabby/players/SmartCache.java b/src/main/java/me/youhavetrouble/preventstabby/players/SmartCache.java index a307d46..db9b124 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/players/SmartCache.java +++ b/src/main/java/me/youhavetrouble/preventstabby/players/SmartCache.java @@ -16,7 +16,7 @@ public class SmartCache { try { Player player = Bukkit.getPlayer(e.getKey()); if (player != null && player.isOnline()) { - PreventStabby.getPlugin().getPlayerManager().refreshPlayersCacheTime(e.getKey()); + e.getValue().refreshCacheTime(); } } catch (NullPointerException ignored) {} } @@ -32,8 +32,9 @@ public class SmartCache { public PlayerData getPlayerData(UUID uuid) { // Try to get data from cache and refresh it try { - PreventStabby.getPlugin().getPlayerManager().refreshPlayersCacheTime(uuid); - return PreventStabby.getPlugin().getPlayerManager().getPlayer(uuid); + PlayerData data = PreventStabby.getPlugin().getPlayerManager().getPlayer(uuid); + data.refreshCacheTime(); + return data; } catch (NullPointerException e) { // If player data is not in cache get it from database and put into cache try { From 7d2c41646ef41e2f7df9ce8de54dae964945b315 Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Sun, 26 Mar 2023 03:09:07 +0200 Subject: [PATCH 4/4] make worldguard hook register on load --- pom.xml | 4 ++-- .../preventstabby/PreventStabby.java | 19 ++++++++++++------- .../preventstabby/hooks/WorldGuardHook.java | 12 +++++------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/pom.xml b/pom.xml index c9d5bcd..358e45e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.youhavetrouble PreventStabby - 1.8.0 + 1.8.1 jar PreventStabby @@ -100,7 +100,7 @@ org.projectlombok lombok - 1.18.24 + 1.18.26 provided diff --git a/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java b/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java index 42d75ff..a8d4d11 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java +++ b/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java @@ -76,13 +76,6 @@ public final class PreventStabby extends JavaPlugin { pvpCommand.setExecutor(mainCommand); pvpCommand.setTabCompleter(mainCommand); - try { - WorldGuardHook.init(); - worldGuardHook = true; - } catch (NoClassDefFoundError e) { - worldGuardHook = false; - } - if (getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) { new PlacoholderApiHook(this).register(); } @@ -90,6 +83,18 @@ public final class PreventStabby extends JavaPlugin { Metrics metrics = new Metrics(this, 14074); } + @Override + public void onLoad() { + if (getServer().getPluginManager().getPlugin("WorldGuard") != null) { + try { + WorldGuardHook.init(); + worldGuardHook = true; + } catch (NoClassDefFoundError e) { + worldGuardHook = false; + } + } + } + public static boolean worldGuardHookEnabled() { return worldGuardHook; } diff --git a/src/main/java/me/youhavetrouble/preventstabby/hooks/WorldGuardHook.java b/src/main/java/me/youhavetrouble/preventstabby/hooks/WorldGuardHook.java index 8cf614d..a01e90c 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/hooks/WorldGuardHook.java +++ b/src/main/java/me/youhavetrouble/preventstabby/hooks/WorldGuardHook.java @@ -12,9 +12,8 @@ import com.sk89q.worldguard.protection.flags.registry.FlagConflictException; import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; import com.sk89q.worldguard.protection.regions.RegionContainer; import com.sk89q.worldguard.protection.regions.RegionQuery; -import me.youhavetrouble.preventstabby.PreventStabby; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; public class WorldGuardHook { @@ -22,19 +21,18 @@ public class WorldGuardHook { public static StateFlag FORCE_PVP_FLAG; public static void init() { - PreventStabby plugin = PreventStabby.getPlugin(); try { Class.forName("com.sk89q.worldguard.protection.flags.registry.FlagRegistry"); WorldGuardPlugin worldGuardPlugin = WorldGuardPlugin.inst(); if (WorldGuard.getInstance() == null || worldGuardPlugin == null) return; - plugin.getLogger().info("Hooking into WorldGuard"); + Bukkit.getLogger().info("[PreventStabby] Hooking into WorldGuard"); flagRegistry = WorldGuard.getInstance().getFlagRegistry(); - createForcePvpFlag(plugin); + createForcePvpFlag(); } catch (NoClassDefFoundError | ClassNotFoundException ignored) { } } - private static void createForcePvpFlag(Plugin plugin) { + private static void createForcePvpFlag() { if (flagRegistry == null) return; String flagName = "preventstabby-force-pvp"; try { @@ -46,7 +44,7 @@ public class WorldGuardHook { if (existing instanceof StateFlag) { FORCE_PVP_FLAG = (StateFlag) existing; } else { - plugin.getLogger().severe("There is a conflict between flag names!"); + Bukkit.getLogger().severe("[PreventStabby] There is a conflict between flag names!"); } } }