diff --git a/src/main/java/net/lapismc/afkplus/AFKPlus.java b/src/main/java/net/lapismc/afkplus/AFKPlus.java index d9b02f1..f1b9b64 100644 --- a/src/main/java/net/lapismc/afkplus/AFKPlus.java +++ b/src/main/java/net/lapismc/afkplus/AFKPlus.java @@ -66,7 +66,7 @@ public void onEnable() { new Metrics(this, 424); //Safely handle the stopping of AFKPlus in regard to player data tasks.addShutdownTask(() -> { - players.values().forEach(AFKPlusPlayer::forceStopAFK); + players.values().forEach(player -> player.stopAFK(true)); players.clear(); }); tasks.addTask(Bukkit.getScheduler().runTaskTimerAsynchronously(this, getRepeatingTasks(), 20, 20)); diff --git a/src/main/java/net/lapismc/afkplus/AFKPlusListeners.java b/src/main/java/net/lapismc/afkplus/AFKPlusListeners.java index fd2cce7..5d4fb52 100644 --- a/src/main/java/net/lapismc/afkplus/AFKPlusListeners.java +++ b/src/main/java/net/lapismc/afkplus/AFKPlusListeners.java @@ -66,7 +66,7 @@ public void onPlayerJoin(PlayerJoinEvent e) { @EventHandler public void onPlayerQuit(PlayerQuitEvent e) { - plugin.getPlayer(e.getPlayer()).forceStopAFK(); + plugin.getPlayer(e.getPlayer()).stopAFK(true); } @EventHandler diff --git a/src/main/java/net/lapismc/afkplus/playerdata/AFKPlusPlayer.java b/src/main/java/net/lapismc/afkplus/playerdata/AFKPlusPlayer.java index 5870309..abe6c88 100644 --- a/src/main/java/net/lapismc/afkplus/playerdata/AFKPlusPlayer.java +++ b/src/main/java/net/lapismc/afkplus/playerdata/AFKPlusPlayer.java @@ -218,10 +218,9 @@ public void stopAFK() { * @param silent Skips broadcasting when true, used to cleanly exit afk when a player disconnects */ public void stopAFK(boolean silent) { - if (Bukkit.getPlayer(getUUID()) == null) { - //Player isn't online, stop here + //Don't run if the player isn't actually AFK since we are running commands and messages + if (!isAFK()) return; - } //Get the command and broadcast message String command = plugin.getConfig().getString("Commands.AFKStop"); String broadcastMessage = getMessage("Broadcast.Stop"); @@ -330,6 +329,7 @@ public void broadcastOthers(String msg) { } if (otherPlayers) { for (Player p : Bukkit.getOnlinePlayers()) { + //Skip the player represented by this class, messages to them will be handled by selfMessage if (p.getUniqueId().equals(getUUID())) continue; p.sendMessage(msg); @@ -344,9 +344,13 @@ public void broadcastOthers(String msg) { * @param msg The message to send */ public void selfMessage(String msg) { + //Get the config option for if players should be notified when they become AFK boolean self = plugin.getConfig().getBoolean("Broadcast.Self"); - if (!msg.isEmpty()) { - Bukkit.getPlayer(getUUID()).sendMessage(msg); + //Get the player so we can null check them, this ensures that they are online + Player p = Bukkit.getPlayer(uuid); + //Check that the message has content, the player should receive messages and that the player is online + if (!msg.isEmpty() && self && p != null) { + p.sendMessage(msg); } }