summaryrefslogtreecommitdiff
path: root/src/main/java/com/redstoner/modules/ignore/Ignore.java
blob: 0596bb910b6c378e09504806e955a8eb629325c2 (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
package com.redstoner.modules.ignore;

import java.lang.reflect.Method;
import java.util.UUID;

import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.json.simple.JSONArray;

import com.nemez.cmdmgr.Command;
import com.nemez.cmdmgr.Command.AsyncType;
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.BroadcastFilter;
import com.redstoner.misc.CommandHolderType;
import com.redstoner.misc.Utils;
import com.redstoner.modules.Module;
import com.redstoner.modules.datamanager.DataManager;

import net.nemez.chatapi.click.Message;

@Commands(CommandHolderType.File)
@AutoRegisterListener
@Version(major = 5, minor = 0, revision = 0, compatible = 4)
public class Ignore implements Module {
	@Command(hook = "unignore", async = AsyncType.ALWAYS)
	public boolean unignore(CommandSender sender, String player) {
		return ignore(sender, player, false);
	}

	@Command(hook = "ignore", async = AsyncType.ALWAYS)
	public boolean ignore(CommandSender sender, String player) {
		return ignore(sender, player, true);
	}

	@Command(hook = "list", async = AsyncType.ALWAYS)
	public boolean list(CommandSender sender) {
		getLogger().message(sender, "§7You are currently ignoring:");

		JSONArray ignores = (JSONArray) DataManager.getOrDefault(sender, "ignores", new JSONArray());

		if (ignores.isEmpty()) {
			new Message(sender, null).appendText(" §7Nobody \\o/").send();
			return true;
		}

		String players;
		OfflinePlayer pi = Bukkit.getOfflinePlayer(UUID.fromString((String) ignores.get(0)));
		players = " §3" + pi.getName() + "§7";

		for (int i = 1; i < ignores.size(); i++) {
			OfflinePlayer p = Bukkit.getOfflinePlayer(UUID.fromString((String) ignores.get(i)));
			players += ", §3" + p.getName() + "§7";
		}

		Message m = new Message(sender, null);
		m.appendText(players);
		m.send();

		return true;
	}

	@SuppressWarnings({ "unchecked", "deprecation" })
	public boolean ignore(CommandSender sender, String player, boolean allowIgnore) {
		JSONArray ignores = (JSONArray) DataManager.getOrDefault(sender, "ignores", new JSONArray());

		Player p = Utils.isUUID(player) ? Bukkit.getPlayer(UUID.fromString(player)) : Bukkit.getPlayer(player);

		OfflinePlayer op = Utils.isUUID(player) ? Bukkit.getOfflinePlayer(UUID.fromString(player)) : Bukkit.getOfflinePlayer(player);

		String pName = p != null ? p.getDisplayName() : op.getName();
		String pUUID = p != null ? p.getUniqueId().toString() : op.getUniqueId().toString();
		String sUUID = ((Player) sender).getUniqueId().toString();

		if (pUUID.equals(sUUID)) {
			getLogger().message(sender, true, "§7You can't ignore yourself :P");
			return true;
		}

		if (ignores.contains(pUUID)) {
			ignores.remove(pUUID);
			getLogger().message(sender, "§7You are no longer ignoring §3" + pName + "§7.");
		} else if (!allowIgnore) {
			getLogger().message(sender, "§7You weren't ignoring §3" + pName + "§7.");
		} else {
			ignores.add(pUUID);
			getLogger().message(sender, "§7You are now ignoring §3" + pName + "§7.");
		}

		DataManager.setData(sender, "ignores", ignores);

		return true;

	}

	public static BroadcastFilter getIgnoredBy(CommandSender sender) {
		try {
			Module mod = ModuleLoader.getModule("Ignore");

			Method m = mod.getClass().getDeclaredMethod("_getIgnoredBy", CommandSender.class);
			m.setAccessible(true);

			return (BroadcastFilter) m.invoke(mod, sender);
		} catch (Exception e) {
			return null;
		}
	}

	@SuppressWarnings("unused")
	private BroadcastFilter _getIgnoredBy(CommandSender sender) {
		return new BroadcastFilter() {
			private final String sUUID = sender instanceof Player ? ((Player) sender).getUniqueId().toString() : "CONSOLE";

			@Override
			public boolean sendTo(CommandSender recipient) {
				if (sUUID.equals("CONSOLE")) return true;

				if ((recipient instanceof Player)) {

					Player player = (Player) recipient;

					if (sender.hasPermission("utils.ignore.override")) return true;

					JSONArray ignores = (JSONArray) DataManager.getOrDefault(recipient, "ignores", new JSONArray());
					return !ignores.contains(sUUID);
				}
				return true;

			}
		};
	}
}