diff options
author | David Panić <david@panic.tk> | 2018-11-10 22:42:49 +0100 |
---|---|---|
committer | David Panić <david@panic.tk> | 2018-11-10 22:42:49 +0100 |
commit | 0b1c2c69fd0a991ef515ded68eb19163df002a70 (patch) | |
tree | c5c77ac8b5d3f5ff67dafd71c427375090c263c0 /src/main/java/com/redstoner/modules/afk | |
parent | fe80557b8a7df5c1d03874931f76e6d88173d302 (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.java | 235 |
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 +} |