summaryrefslogtreecommitdiff
path: root/src/main/java/com/redstoner/modules/afk/AFK.java
blob: acca16c4f61e59d1e31461c9cb91ee364fa4cdad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package com.redstoner.modules.afk;

import com.nemez.cmdmgr.Command;
import com.redstoner.annotations.AutoRegisterListener;
import com.redstoner.annotations.Commands;
import com.redstoner.annotations.Version;
import com.redstoner.coremods.moduleLoader.ModuleLoader;
import com.redstoner.misc.CommandHolderType;
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 = 5, minor = 1, revision = 0, compatible = 4)
public class AFK implements Module {
	private AFKListener listener;

	@Override
	public void firstLoad() {
		String[] choices = new String[] { "listen", "ignore" };

		DataManager.setConfig("indicator", "&7[AFK]");

		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) {
		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() {
		listener = new AFKListener();

		Bukkit.getServer().getPluginManager().registerEvents(listener, ModuleLoader.getPlugin());
		update_afk_listeners(Bukkit.getConsoleSender());
	}

	@Override
	public void onDisable() {
		HandlerList.unregisterAll(listener);
	}

	@Command(hook = "afk")
	public boolean afk(CommandSender sender) {
		return afk(sender, false, "");
	}

	@Command(hook = "afksilent")
	public boolean afk(CommandSender sender, boolean silent) {
		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 (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 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);
			DataManager.setState(sender, "afk", true);

			if (!silent) Utils.broadcast("§7 * ", Utils.getName(sender) + "§7 is now AFK", null);
		}

		return true;
	}
	
	private boolean getListenSetting(String name, String def) {
		return DataManager.getConfigOrDefault(name, def).equals("listen");
	}

	@Command(hook = "update_afk_listeners")
	public boolean update_afk_listeners(CommandSender sender) {
		Utils.broadcast(null, "Updating afk listeners...", recipient -> recipient.hasPermission("utils.afk.admin"));

		listener.listenTo(
				getListenSetting("move", "listen"),
				getListenSetting("look", "ignore"),
				getListenSetting("chat", "listen"),
				getListenSetting("interact", "listen"),
				getListenSetting("command", "ignore")
		);

		return true;
	}
}