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)) {