summaryrefslogtreecommitdiff
path: root/src/main/java/com/redstoner/modules/afk
diff options
context:
space:
mode:
authorDavid Panić <david@panic.tk>2018-11-10 22:42:49 +0100
committerDavid Panić <david@panic.tk>2018-11-10 22:42:49 +0100
commit0b1c2c69fd0a991ef515ded68eb19163df002a70 (patch)
treec5c77ac8b5d3f5ff67dafd71c427375090c263c0 /src/main/java/com/redstoner/modules/afk
parentfe80557b8a7df5c1d03874931f76e6d88173d302 (diff)
Code cleanup batch 1
Diffstat (limited to 'src/main/java/com/redstoner/modules/afk')
-rw-r--r--src/main/java/com/redstoner/modules/afk/AFK.java235
1 files changed, 100 insertions, 135 deletions
diff --git a/src/main/java/com/redstoner/modules/afk/AFK.java b/src/main/java/com/redstoner/modules/afk/AFK.java
index 9f425ad..23b36ef 100644
--- a/src/main/java/com/redstoner/modules/afk/AFK.java
+++ b/src/main/java/com/redstoner/modules/afk/AFK.java
@@ -1,5 +1,7 @@
package com.redstoner.modules.afk;
+import java.lang.reflect.InvocationTargetException;
+
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -31,205 +33,168 @@ import com.redstoner.modules.datamanager.DataManager;
@Commands(CommandHolderType.File)
@AutoRegisterListener
@Version(major = 4, minor = 0, revision = 6, compatible = 5)
-public class AFK implements Module, Listener
-{
+public class AFK implements Module, Listener {
private CustomListener listener;
- boolean move = true, look = false;
-
+
@Override
- public void firstLoad()
- {
- Module.super.firstLoad();
+ public void firstLoad() {
+ String[] choices = new String[] { "listen", "ignore" };
+
DataManager.setConfig("indicator", "&7[AFK]");
- String[] choices = new String[] {"listen", "ignore"};
+
DataManager.setConfig("move", "listen", choices);
DataManager.setConfig("look", "ignore", choices);
DataManager.setConfig("chat", "listen", choices);
DataManager.setConfig("interact", "listen", choices);
DataManager.setConfig("command", "ignore", choices);
}
-
+
@Override
- public void migrate(Version old)
- {
- Module.super.migrate(old);
- if ((old.major() == 4) && (old.minor() == 0) && (old.revision() == 3))
- {
- String[] choices = new String[] {"listen", "ignore"};
+ public void migrate(Version old) {
+ if (old.major() == 4 && old.minor() == 0 && old.revision() == 3) {
+ String[] choices = new String[] { "listen", "ignore" };
DataManager.setConfig("look", "ignore", choices);
}
}
-
+
@Override
- public void postEnable()
- {
- Module.super.postEnable();
+ public void postEnable() {
listener = new CustomListener();
update_afk_listeners(Bukkit.getConsoleSender());
}
-
+
@Override
- public void onDisable()
- {
- Module.super.onDisable();
+ public void onDisable() {
HandlerList.unregisterAll(listener);
}
-
+
@Command(hook = "afk")
- public boolean afk(CommandSender sender)
- {
+ public boolean afk(CommandSender sender) {
return afk(sender, false, "");
}
-
+
@Command(hook = "afks")
- public boolean afk(CommandSender sender, boolean silent)
- {
+ public boolean afk(CommandSender sender, boolean silent) {
return afk(sender, silent, "");
}
-
- @Command(hook = "afk2")
- public boolean afk(CommandSender sender, boolean silent, String reason)
- {
- if (isafk(sender))
- {
- unafk(sender, silent);
- }
- else
- {
+
+ @Command(hook = "afk2")
+ public boolean afk(CommandSender sender, boolean silent, String reason) {
+ if (AFKUtil.isafk(sender)) {
+ AFKUtil.unafk(sender, silent);
+ } else {
DataManager.setData(sender, "afk_time", System.currentTimeMillis());
DataManager.setData(sender, "afk_reason", reason);
DataManager.setState(sender, "afk_silent", silent);
DataManager.setState(sender, "afk", true);
- if (!silent)
- Utils.broadcast("§7 * ", Utils.getName(sender) + "§7 is now AFK", null);
+
+ if (!silent) Utils.broadcast("§7 * ", Utils.getName(sender) + "§7 is now AFK", null);
}
+
return true;
}
-
- public 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);
+
+ private void registerCustomListenerEvent(Class<? extends Event> event) {
+ Bukkit.getPluginManager().registerEvent(event, listener, EventPriority.MONITOR, listener, Main.plugin);
}
-
- public boolean isafk(CommandSender sender)
- {
- return DataManager.getState(sender, "afk");
+
+ /*
+ * 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();
+ }
}
-
- public boolean isVanished(Player player)
- {
- return DataManager.getState(player, "vanished");
+
+ 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()
- {
+ public boolean update_afk_listeners(CommandSender sender) {
+ Utils.broadcast(null, "Updating afk listeners...", new BroadcastFilter() {
@Override
- public boolean sendTo(CommandSender recipient)
- {
+ public boolean sendTo(CommandSender recipient) {
return recipient.hasPermission("utils.afk.admin");
}
});
- move = DataManager.getConfigOrDefault("move", "listen").equals("listen");
- look = DataManager.getConfigOrDefault("look", "ignore").equals("listen");
- if (move || look)
- Bukkit.getPluginManager().registerEvent(PlayerMoveEvent.class, listener, EventPriority.MONITOR, listener,
- Main.plugin);
- else
- PlayerMoveEvent.getHandlerList().unregister(listener);
- if (DataManager.getConfigOrDefault("chat", "listen").equals("listen"))
- Bukkit.getPluginManager().registerEvent(PlayerInteractEvent.class, listener, EventPriority.MONITOR,
- listener, Main.plugin);
- else
- PlayerInteractEvent.getHandlerList().unregister(listener);
- if (DataManager.getConfigOrDefault("interact", "listen").equals("listen"))
- Bukkit.getPluginManager().registerEvent(AsyncPlayerChatEvent.class, listener, EventPriority.MONITOR,
- listener, Main.plugin);
- else
- AsyncPlayerChatEvent.getHandlerList().unregister(listener);
- if (DataManager.getConfigOrDefault("command", "ignore").equals("listen"))
- Bukkit.getPluginManager().registerEvent(PlayerCommandPreprocessEvent.class, listener, EventPriority.MONITOR,
- listener, Main.plugin);
- else
- PlayerCommandPreprocessEvent.getHandlerList().unregister(listener);
+
+ 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);
+
return true;
}
-
+
@EventHandler
- public void onLeave(PlayerQuitEvent event)
- {
+ public void onLeave(PlayerQuitEvent event) {
DataManager.setState(event.getPlayer(), "afk", false);
}
}
-class CustomListener implements Listener, EventExecutor
-{
+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)
- {
+ 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))
- {
+ boolean looked = (pevent.getFrom().getPitch() != pevent.getTo().getPitch()) || (pevent.getFrom().getYaw() != pevent.getTo().getYaw());
+
+ if ((move && moved) || (look && looked)) {
Player player = pevent.getPlayer();
- if (isafk(player))
- if (!isVanished(player))
- unafk(player);
+
+ if (AFKUtil.isafk(player) && !AFKUtil.isVanished(player)) AFKUtil.unafk(player, AFKUtil.isSilent(player));
}
- }
- else
- {
+ } else {
PlayerEvent pevent = (PlayerEvent) event;
Player player = pevent.getPlayer();
- if (isafk(player))
- if (!isVanished(player))
- unafk(player);
+
+ if (AFKUtil.isafk(player) && !AFKUtil.isVanished(player)) AFKUtil.unafk(player, AFKUtil.isSilent(player));
}
}
}
-
- public void unafk(CommandSender sender)
- {
+
+ 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 ( !isSilent(sender) )
- Utils.broadcast("§7 * ", Utils.getName(sender) + "§7 is no longer AFK", null);
+
+ if (!silent) Utils.broadcast("§7 * ", Utils.getName(sender) + "§7 is no longer AFK", null);
}
-
- public boolean isafk(CommandSender sender)
- {
+
+ protected static boolean isafk(CommandSender sender) {
return DataManager.getState(sender, "afk");
}
-
- public boolean isSilent(CommandSender sender)
- {
- return DataManager.getState(sender, "afk_silent");
- }
-
- public boolean isVanished(Player player)
- {
+
+ protected static boolean isVanished(Player player) {
return DataManager.getState(player, "vanished");
}
-
- public void listenMove(boolean move)
- {
- this.move = move;
- }
-
- public void listenLook(boolean look)
- {
- this.look = look;
+
+ protected static boolean isSilent(CommandSender sender) {
+ return DataManager.getState(sender, "afk_silent");
}
-} \ No newline at end of file
+}