From daf1dc2e62b245cbadec399c46ffe5da6a61fbe1 Mon Sep 17 00:00:00 2001 From: Minenash Date: Wed, 30 Jan 2019 16:28:15 -0500 Subject: Added the ability to change the AFK reason and to ignore movement. --- src/main/java/com/redstoner/modules/afk/AFK.cmd | 8 ++++ src/main/java/com/redstoner/modules/afk/AFK.java | 54 ++++++++++++++++++++-- .../com/redstoner/modules/afk/AFKListener.java | 9 +++- .../java/com/redstoner/modules/afk/AFKUtil.java | 13 +++++- 4 files changed, 78 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/redstoner/modules/afk/AFK.cmd b/src/main/java/com/redstoner/modules/afk/AFK.cmd index 6353e33..c9921e5 100644 --- a/src/main/java/com/redstoner/modules/afk/AFK.cmd +++ b/src/main/java/com/redstoner/modules/afk/AFK.cmd @@ -13,6 +13,14 @@ command afk { run afksilent -s; } + [optional:-s] [bool:ignoreMovement] { + run afkignore -s ignoreMovement; + } + + [optional:-s] [bool:ignoreMovement] [string:reason...] { + run afkfull -s ignoreMovement reason; + } + [optional:-s] [string:reason...] { run afkreason -s reason; } diff --git a/src/main/java/com/redstoner/modules/afk/AFK.java b/src/main/java/com/redstoner/modules/afk/AFK.java index ee96137..905811d 100644 --- a/src/main/java/com/redstoner/modules/afk/AFK.java +++ b/src/main/java/com/redstoner/modules/afk/AFK.java @@ -63,11 +63,59 @@ public class AFK implements Module { return afk(sender, silent, ""); } + @Command(hook = "afkignore") + public boolean afk(CommandSender sender, boolean silent, boolean ignoreMovement) { + return afk(sender, silent, ignoreMovement, ""); + } + @Command(hook = "afkreason") public boolean afk(CommandSender sender, boolean silent, String reason) { - if (AFKUtil.isAfk(sender)) { + if (silent == false && reason.equals("help")) + return false; + +// String reasonLower = reason.toLowerCase(); +// if (reasonLower.startsWith("true ")) +// return afk(sender, silent, true, reason.substring(5)); +// else if (reasonLower.startsWith("false ")) +// return afk(sender, silent, false, reason); +// else + return afkmain(sender, silent, reason, false); + } + + @Command(hook = "afkfull") + public boolean afk(CommandSender sender, boolean silent, boolean ignoreMovement, String reason) { + boolean oldIgnoringMovement = AFKUtil.isIgnoringMovement(sender); + System.out.println("Am I stupid"); + DataManager.setState(sender, "afk_ignoreMovement", ignoreMovement); + + if (AFKUtil.isAfk(sender) && oldIgnoringMovement != ignoreMovement) { + if (ignoreMovement) + getLogger().message(sender, "Your movements will now be ignored."); + else + getLogger().message(sender, "Your movements will no longer be ignored."); + return afkmain(sender, silent, reason, true); + } + else if (AFKUtil.isAfk(sender)) { + if (ignoreMovement) + getLogger().message(sender, "Your movements will still be ignored."); + else + getLogger().message(sender, "Your movements will still not be ignored."); + return afkmain(sender, silent, reason, true); + } + return afkmain(sender, silent, reason, false); + } + + public boolean afkmain(CommandSender sender, boolean silent, String reason, boolean keepAFK) { + boolean isAFK = AFKUtil.isAfk(sender); + + if ( isAFK && reason.equals("") && !keepAFK) AFKUtil.unAfk(sender, silent); - } else { + + else if (isAFK && !reason.equals("")) { + DataManager.setData(sender, "afk_reason", reason); + getLogger().message(sender, "Your reason has been updated."); + } + else if (!keepAFK) { DataManager.setData(sender, "afk_time", System.currentTimeMillis()); DataManager.setData(sender, "afk_reason", reason); DataManager.setState(sender, "afk_silent", silent); @@ -78,7 +126,7 @@ public class AFK implements Module { return true; } - + private boolean getListenSetting(String name, String def) { return DataManager.getConfigOrDefault(name, def).equals("listen"); } diff --git a/src/main/java/com/redstoner/modules/afk/AFKListener.java b/src/main/java/com/redstoner/modules/afk/AFKListener.java index fab0b5e..a4b4154 100644 --- a/src/main/java/com/redstoner/modules/afk/AFKListener.java +++ b/src/main/java/com/redstoner/modules/afk/AFKListener.java @@ -1,6 +1,8 @@ package com.redstoner.modules.afk; import com.redstoner.misc.Utils; + +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.*; @@ -33,12 +35,17 @@ public class AFKListener implements Listener { @EventHandler public void onMove(PlayerMoveEvent event) { + Player player = event.getPlayer(); + + if (!AFKUtil.isAfk(player) || AFKUtil.isVanished(player) || AFKUtil.isIgnoringMovement(player)) + return; + double distance = event.getFrom().distance(event.getTo()); boolean moved = distance > 0; boolean looked = (event.getFrom().getPitch() != event.getTo().getPitch()) || (event.getFrom().getYaw() != event.getTo().getYaw()); - if ((move && moved) || (look && looked)) AFKUtil.checkedUnAfk(event.getPlayer()); + if ((move && moved) || (look && looked)) AFKUtil.unAfk(event.getPlayer()); } @EventHandler diff --git a/src/main/java/com/redstoner/modules/afk/AFKUtil.java b/src/main/java/com/redstoner/modules/afk/AFKUtil.java index 3746632..22f4284 100644 --- a/src/main/java/com/redstoner/modules/afk/AFKUtil.java +++ b/src/main/java/com/redstoner/modules/afk/AFKUtil.java @@ -8,10 +8,15 @@ import org.bukkit.entity.Player; public class AFKUtil { protected static void unAfk(CommandSender sender, boolean silent) { DataManager.setState(sender, "afk", false); - + DataManager.setState(sender, "afk_ignoreMovement", false); + if (!silent) Utils.broadcast("§7 * ", Utils.getName(sender) + "§7 is no longer AFK", null); } + protected static void unAfk(CommandSender sender) { + unAfk(sender, isSilent(sender)); + } + protected static boolean isAfk(CommandSender sender) { return DataManager.getState(sender, "afk"); } @@ -23,7 +28,11 @@ public class AFKUtil { protected static boolean isSilent(CommandSender sender) { return DataManager.getState(sender, "afk_silent"); } - + + protected static boolean isIgnoringMovement(CommandSender sender) { + return DataManager.getState(sender, "afk_ignoreMovement"); + } + protected static void checkedUnAfk(Player player) { if (isAfk(player) && !isVanished(player)) unAfk(player, isSilent(player)); } -- cgit v1.2.3