summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Panić <david@panic.tk>2018-12-15 23:11:50 +0100
committerDavid Panić <david@panic.tk>2018-12-15 23:11:50 +0100
commit6a6a6f55073fb96d91c211afb511005b55d292db (patch)
treeb526db04128283286f1e58be3e2695795cc8f9a0
parent8bcb01366090236478f04c69c98c1b8f365919ac (diff)
Fixed AFK module.
-rw-r--r--src/main/java/com/redstoner/modules/afk/AFK.cmd8
-rw-r--r--src/main/java/com/redstoner/modules/afk/AFK.java144
-rw-r--r--src/main/java/com/redstoner/modules/afk/AFKListener.java64
-rw-r--r--src/main/java/com/redstoner/modules/afk/AFKUtil.java30
4 files changed, 122 insertions, 124 deletions
diff --git a/src/main/java/com/redstoner/modules/afk/AFK.cmd b/src/main/java/com/redstoner/modules/afk/AFK.cmd
index 6bd8b7f..6353e33 100644
--- a/src/main/java/com/redstoner/modules/afk/AFK.cmd
+++ b/src/main/java/com/redstoner/modules/afk/AFK.cmd
@@ -2,15 +2,19 @@ command afk {
alias eafk;
alias away;
alias eaway;
+
perm utils.afk;
+
[empty] {
run afk;
}
+
[optional:-s] {
- run afks -s;
+ run afksilent -s;
}
+
[optional:-s] [string:reason...] {
- run afk2 -s 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 23b36ef..eacbc3e 100644
--- a/src/main/java/com/redstoner/modules/afk/AFK.java
+++ b/src/main/java/com/redstoner/modules/afk/AFK.java
@@ -1,40 +1,23 @@
package com.redstoner.modules.afk;
-import java.lang.reflect.InvocationTargetException;
-
-import org.bukkit.Bukkit;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-import org.bukkit.event.Event;
-import org.bukkit.event.EventException;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.HandlerList;
-import org.bukkit.event.Listener;
-import org.bukkit.event.player.AsyncPlayerChatEvent;
-import org.bukkit.event.player.PlayerCommandPreprocessEvent;
-import org.bukkit.event.player.PlayerEvent;
-import org.bukkit.event.player.PlayerInteractEvent;
-import org.bukkit.event.player.PlayerMoveEvent;
-import org.bukkit.event.player.PlayerQuitEvent;
-import org.bukkit.plugin.EventExecutor;
-
import com.nemez.cmdmgr.Command;
import com.redstoner.annotations.AutoRegisterListener;
import com.redstoner.annotations.Commands;
import com.redstoner.annotations.Version;
-import com.redstoner.misc.BroadcastFilter;
+import com.redstoner.coremods.moduleLoader.ModuleLoader;
import com.redstoner.misc.CommandHolderType;
-import com.redstoner.misc.Main;
import com.redstoner.misc.Utils;
import com.redstoner.modules.Module;
import com.redstoner.modules.datamanager.DataManager;
+import org.bukkit.Bukkit;
+import org.bukkit.command.CommandSender;
+import org.bukkit.event.HandlerList;
@Commands(CommandHolderType.File)
@AutoRegisterListener
@Version(major = 4, minor = 0, revision = 6, compatible = 5)
-public class AFK implements Module, Listener {
- private CustomListener listener;
+public class AFK implements Module {
+ private AFKListener listener;
@Override
public void firstLoad() {
@@ -59,7 +42,9 @@ public class AFK implements Module, Listener {
@Override
public void postEnable() {
- listener = new CustomListener();
+ listener = new AFKListener();
+
+ Bukkit.getServer().getPluginManager().registerEvents(listener, ModuleLoader.getPlugin());
update_afk_listeners(Bukkit.getConsoleSender());
}
@@ -73,15 +58,15 @@ public class AFK implements Module, Listener {
return afk(sender, false, "");
}
- @Command(hook = "afks")
+ @Command(hook = "afksilent")
public boolean afk(CommandSender sender, boolean silent) {
return afk(sender, silent, "");
}
- @Command(hook = "afk2")
+ @Command(hook = "afkreason")
public boolean afk(CommandSender sender, boolean silent, String reason) {
- if (AFKUtil.isafk(sender)) {
- AFKUtil.unafk(sender, silent);
+ if (AFKUtil.isAfk(sender)) {
+ AFKUtil.unAfk(sender, silent);
} else {
DataManager.setData(sender, "afk_time", System.currentTimeMillis());
DataManager.setData(sender, "afk_reason", reason);
@@ -94,107 +79,22 @@ public class AFK implements Module, Listener {
return true;
}
- private void registerCustomListenerEvent(Class<? extends Event> event) {
- Bukkit.getPluginManager().registerEvent(event, listener, EventPriority.MONITOR, listener, Main.plugin);
- }
-
- /*
- * This is perfectly valid code. Copied from the source code of the Event class:
- * "All events require a static method named getHandlerList()"
- */
- private void unregisterCustomListenerEvent(Class<? extends Event> clazz) {
- try {
- HandlerList list = (HandlerList) clazz.getMethod("getHandlerList").invoke(null);
- list.unregister(listener);
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
- e.printStackTrace();
- }
- }
-
private boolean getListenSetting(String name, String def) {
return DataManager.getConfigOrDefault(name, def).equals("listen");
}
- private void updateCustomListener(boolean listen, Class<? extends Event> clazz) {
- if (listen) registerCustomListenerEvent(PlayerInteractEvent.class);
- else unregisterCustomListenerEvent(PlayerInteractEvent.class);
- }
-
@Command(hook = "update_afk_listeners")
public boolean update_afk_listeners(CommandSender sender) {
- Utils.broadcast(null, "Updating afk listeners...", new BroadcastFilter() {
- @Override
- public boolean sendTo(CommandSender recipient) {
- return recipient.hasPermission("utils.afk.admin");
- }
- });
-
- updateCustomListener(getListenSetting("move", "listen") || getListenSetting("look", "ignore"), PlayerMoveEvent.class);
- updateCustomListener(getListenSetting("chat", "listen"), AsyncPlayerChatEvent.class);
- updateCustomListener(getListenSetting("interact", "listen"), PlayerInteractEvent.class);
- updateCustomListener(getListenSetting("command", "ignore"), PlayerCommandPreprocessEvent.class);
+ Utils.broadcast(null, "Updating afk listeners...", recipient -> recipient.hasPermission("utils.afk.admin"));
- return true;
- }
+ listener.listenTo(
+ getListenSetting("move", "listen"),
+ getListenSetting("look", "ignore"),
+ getListenSetting("chat", "listen"),
+ getListenSetting("interact", "listen"),
+ getListenSetting("command", "ignore")
+ );
- @EventHandler
- public void onLeave(PlayerQuitEvent event) {
- DataManager.setState(event.getPlayer(), "afk", false);
- }
-}
-
-class CustomListener implements Listener, EventExecutor {
- private boolean move = true, look = false;
-
- @Override
- public void execute(Listener listener, Event event) throws EventException {
- if (event instanceof PlayerEvent) {
- if (event instanceof PlayerMoveEvent) {
- PlayerMoveEvent pevent = (PlayerMoveEvent) event;
-
- double distance = pevent.getFrom().distance(pevent.getTo());
- boolean moved = distance > 0;
- boolean looked = (pevent.getFrom().getPitch() != pevent.getTo().getPitch()) || (pevent.getFrom().getYaw() != pevent.getTo().getYaw());
-
- if ((move && moved) || (look && looked)) {
- Player player = pevent.getPlayer();
-
- if (AFKUtil.isafk(player) && !AFKUtil.isVanished(player)) AFKUtil.unafk(player, AFKUtil.isSilent(player));
- }
- } else {
- PlayerEvent pevent = (PlayerEvent) event;
- Player player = pevent.getPlayer();
-
- if (AFKUtil.isafk(player) && !AFKUtil.isVanished(player)) AFKUtil.unafk(player, AFKUtil.isSilent(player));
- }
- }
- }
-
- public void listenMove(boolean move) {
- this.move = move;
- }
-
- public void listenLook(boolean look) {
- this.look = look;
- }
-}
-
-class AFKUtil {
- protected static void unafk(CommandSender sender, boolean silent) {
- DataManager.setState(sender, "afk", false);
-
- if (!silent) Utils.broadcast("§7 * ", Utils.getName(sender) + "§7 is no longer AFK", null);
- }
-
- protected static boolean isafk(CommandSender sender) {
- return DataManager.getState(sender, "afk");
- }
-
- protected static boolean isVanished(Player player) {
- return DataManager.getState(player, "vanished");
- }
-
- protected static boolean isSilent(CommandSender sender) {
- return DataManager.getState(sender, "afk_silent");
+ return true;
}
}
diff --git a/src/main/java/com/redstoner/modules/afk/AFKListener.java b/src/main/java/com/redstoner/modules/afk/AFKListener.java
new file mode 100644
index 0000000..d995d8b
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/afk/AFKListener.java
@@ -0,0 +1,64 @@
+package com.redstoner.modules.afk;
+
+import com.redstoner.coremods.moduleLoader.ModuleLoader;
+import com.redstoner.misc.Utils;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.*;
+
+public class AFKListener implements Listener {
+ private boolean
+ move = false,
+ look = false,
+ chat = false,
+ interact = false,
+ command = false;
+
+ protected void listenTo(boolean move, boolean look, boolean chat, boolean interact, boolean command) {
+ this.move = move;
+ this.look = look;
+ this.chat = chat;
+ this.interact = interact;
+ this.command = command;
+
+ String lt = "Listening to:";
+
+ if (move) lt += " move";
+ if (look) lt += " look";
+ if (chat) lt += " chat";
+ if (interact) lt+= " interact";
+ if (command) lt += " command";
+
+ Utils.broadcast(null, lt, recipient -> recipient.hasPermission("utils.afk.admin"));
+ }
+
+ @EventHandler
+ public void onMove(PlayerMoveEvent event) {
+ 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());
+ }
+
+ @EventHandler
+ public void onChat(PlayerChatEvent event) {
+ if (chat) AFKUtil.checkedUnAfk(event.getPlayer());
+ }
+
+ @EventHandler
+ public void onInteract(PlayerInteractEvent event) {
+ if (interact) AFKUtil.checkedUnAfk(event.getPlayer());
+ }
+
+ @EventHandler
+ public void onCommand(PlayerCommandPreprocessEvent event) {
+ if (command) AFKUtil.checkedUnAfk(event.getPlayer());
+ }
+
+ @EventHandler
+ public void onLeave(PlayerQuitEvent event) {
+ AFKUtil.unAfk(event.getPlayer(), true);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/com/redstoner/modules/afk/AFKUtil.java b/src/main/java/com/redstoner/modules/afk/AFKUtil.java
new file mode 100644
index 0000000..3746632
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/afk/AFKUtil.java
@@ -0,0 +1,30 @@
+package com.redstoner.modules.afk;
+
+import com.redstoner.misc.Utils;
+import com.redstoner.modules.datamanager.DataManager;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class AFKUtil {
+ protected static void unAfk(CommandSender sender, boolean silent) {
+ DataManager.setState(sender, "afk", false);
+
+ if (!silent) Utils.broadcast("§7 * ", Utils.getName(sender) + "§7 is no longer AFK", null);
+ }
+
+ protected static boolean isAfk(CommandSender sender) {
+ return DataManager.getState(sender, "afk");
+ }
+
+ protected static boolean isVanished(Player player) {
+ return DataManager.getState(player, "vanished");
+ }
+
+ protected static boolean isSilent(CommandSender sender) {
+ return DataManager.getState(sender, "afk_silent");
+ }
+
+ protected static void checkedUnAfk(Player player) {
+ if (isAfk(player) && !isVanished(player)) unAfk(player, isSilent(player));
+ }
+} \ No newline at end of file