diff options
author | David <david@panic.tk> | 2018-11-07 23:50:06 +0100 |
---|---|---|
committer | David <david@panic.tk> | 2018-11-07 23:50:06 +0100 |
commit | 604cf01967ede98bf5024e4926bb0777fc4e8eee (patch) | |
tree | e2fa63d7e683769ee3bf3eddc75280648e92eb04 /src/main/java/com/redstoner/modules/afk | |
parent | e86c52ef7c0e1e33c6af0e8674b038976bec11cc (diff) |
Converted Modules to gradle
Diffstat (limited to 'src/main/java/com/redstoner/modules/afk')
-rw-r--r-- | src/main/java/com/redstoner/modules/afk/AFK.cmd | 24 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/afk/AFK.java | 235 |
2 files changed, 259 insertions, 0 deletions
diff --git a/src/main/java/com/redstoner/modules/afk/AFK.cmd b/src/main/java/com/redstoner/modules/afk/AFK.cmd new file mode 100644 index 0000000..6f9385d --- /dev/null +++ b/src/main/java/com/redstoner/modules/afk/AFK.cmd @@ -0,0 +1,24 @@ +command afk { + alias eafk; + alias away; + alias eaway; + [empty] { + run afk; + perm utils.afk; + } + [optional:-s] { + run afks -s; + perm utils.afk; + } + [optional:-s] [string:reason...] { + run afk2 -s reason; + perm utils.afk; + } +} + +command update_afk_listeners { + [empty] { + run update_afk_listeners; + perm utils.afk.admin; + } +}
\ No newline at end of file diff --git a/src/main/java/com/redstoner/modules/afk/AFK.java b/src/main/java/com/redstoner/modules/afk/AFK.java new file mode 100644 index 0000000..810c0bb --- /dev/null +++ b/src/main/java/com/redstoner/modules/afk/AFK.java @@ -0,0 +1,235 @@ +package com.redstoner.modules.afk; + +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.misc.CommandHolderType; +import com.redstoner.misc.Main; +import com.redstoner.misc.Utils; +import com.redstoner.modules.Module; +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 +{ + private CustomListener listener; + boolean move = true, look = false; + + @Override + public void firstLoad() + { + Module.super.firstLoad(); + 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"}; + DataManager.setConfig("look", "ignore", choices); + } + } + + @Override + public void postEnable() + { + Module.super.postEnable(); + listener = new CustomListener(); + update_afk_listeners(Bukkit.getConsoleSender()); + } + + @Override + public void onDisable() + { + Module.super.onDisable(); + HandlerList.unregisterAll(listener); + } + + @Command(hook = "afk") + public boolean afk(CommandSender sender) + { + return afk(sender, false, ""); + } + + @Command(hook = "afks") + 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 + { + 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); + } + 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); + } + + public boolean isafk(CommandSender sender) + { + return DataManager.getState(sender, "afk"); + } + + public boolean isVanished(Player player) + { + return DataManager.getState(player, "vanished"); + } + + @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"); + } + }); + 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); + return true; + } + + @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 (isafk(player)) + if (!isVanished(player)) + unafk(player); + } + } + else + { + PlayerEvent pevent = (PlayerEvent) event; + Player player = pevent.getPlayer(); + if (isafk(player)) + if (!isVanished(player)) + unafk(player); + } + } + } + + public void unafk(CommandSender sender) + { + DataManager.setState(sender, "afk", false); + if ( !isSilent(sender) ) + Utils.broadcast("§7 * ", Utils.getName(sender) + "§7 is no longer AFK", null); + } + + public 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) + { + return DataManager.getState(player, "vanished"); + } + + public void listenMove(boolean move) + { + this.move = move; + } + + public void listenLook(boolean look) + { + this.look = look; + } +} |