summaryrefslogtreecommitdiff
path: root/src/com/redstoner/modules/essentials/Essentials.java
blob: b7bdf22d0f6417279cd3ee746444c8a9c59efc4c (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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
package com.redstoner.modules.essentials;

import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.UUID;

import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.json.simple.JSONObject;

import com.nemez.cmdmgr.Command;
import com.nemez.cmdmgr.CommandManager;
import com.redstoner.annotations.AutoRegisterListener;
import com.redstoner.annotations.Version;
import com.redstoner.exceptions.PlayerNotFoundException;
import com.redstoner.misc.JsonManager;
import com.redstoner.misc.Main;
import com.redstoner.misc.Utils;
import com.redstoner.modules.Module;

@AutoRegisterListener
@Version(major = 3, minor = 0, revision = 0, compatible = 3)
public class Essentials implements Module
{
	static HashMap<UUID, EssentialsPlayer> players;
	private final File saveFile = new File(Main.plugin.getDataFolder(), "knownPlayers.json");
	private static JSONObject knownNames;
	
	@Override
	public boolean onEnable()
	{
		knownNames = JsonManager.getObject(saveFile);
		if (knownNames == null)
		{
			Utils.warn("Couldn't find existing");
		}
		players = new HashMap<UUID, EssentialsPlayer>();
		for (Player p : Bukkit.getOnlinePlayers())
		{
			players.put(p.getUniqueId(), Essentials.getPlayer(p));
		}
		return true;
	}
	
	@Override
	public void postEnable()
	{
		Utils.info("Creating command links for essentials. This may take a while...");
		CommandManager.registerCommand(this.getClass().getResourceAsStream("Essentials.cmd"), this, Main.plugin);
	}
	
	@Command(hook = "kickDef")
	public void kick(CommandSender sender, String name)
	{
		kick(sender, name, EssentialsDefaults.kick);
	}
	
	@Command(hook = "kick")
	public void kick(CommandSender sender, String name, String reason)
	{
		try
		{
			getPlayer(name).kick(Utils.getName(sender), reason);
		}
		catch (PlayerNotFoundException e)
		{
			Utils.sendErrorMessage(sender, null, e.getMessage());
		}
	}
	
	@Command(hook = "banDef")
	public void ban(CommandSender sender, String name)
	{
		ban(sender, name, EssentialsDefaults.ban);
	}
	
	@Command(hook = "ban")
	public void ban(CommandSender sender, String name, String reason)
	{
		try
		{
			getOfflinePlayer(name).ban(sender.getName(), reason, null);
		}
		catch (PlayerNotFoundException e)
		{
			Utils.sendErrorMessage(sender, null, e.getMessage());
		}
	}
	
	@Command(hook = "tbanDefDR")
	public void tempban(CommandSender sender, String name)
	{
		tempban(sender, name, EssentialsDefaults.tbanD, EssentialsDefaults.tbanR);
	}
	
	@Command(hook = "tbanDefR")
	public void tbanD(CommandSender sender, String name, String duration)
	{
		tempban(sender, name, duration, EssentialsDefaults.tbanR);
	}
	
	@Command(hook = "tbanDefD")
	public void tbanR(CommandSender sender, String name, String reason)
	{
		tempban(sender, name, EssentialsDefaults.tbanD, reason);
	}
	
	@Command(hook = "tban")
	public void tempban(CommandSender sender, String name, String duration, String reason)
	{
		try
		{
			getOfflinePlayer(name).ban(Utils.getName(sender), reason,
					new Date((new Date()).getTime() + Long.parseLong(duration)));
		}
		catch (PlayerNotFoundException | NumberFormatException e)
		{
			Utils.sendErrorMessage(sender, null, e.getMessage());
		}
	}
	
	@EventHandler
	public void onPlayerJoin(PlayerJoinEvent e)
	{
		players.put(e.getPlayer().getUniqueId(), getPlayer(e.getPlayer()));
	}
	
	@EventHandler
	public void onPlayerLeave(PlayerQuitEvent e)
	{
		UUID uuid = e.getPlayer().getUniqueId();
		players.get(uuid).onLeave();
		players.remove(uuid);
	}
	
	public static EssentialsPlayer getPlayer(UUID uuid) throws PlayerNotFoundException
	{
		Player player = Bukkit.getPlayer(uuid);
		if (player == null)
			throw new PlayerNotFoundException();
		return getPlayer(player);
	}
	
	public static EssentialsPlayer getPlayer(Player player)
	{
		if (players.containsKey(player.getUniqueId()))
			return players.get(player.getUniqueId());
		return new EssentialsPlayer(player);
	}
	
	public static EssentialsPlayer getPlayer(String name) throws PlayerNotFoundException
	{
		Player player = Bukkit.getPlayer(name);
		if (player == null)
			throw new PlayerNotFoundException();
		return getPlayer(player);
	}
	
	public static EssentialsOfflinePlayer getOfflinePlayer(UUID uuid) throws PlayerNotFoundException
	{
		OfflinePlayer player = Bukkit.getOfflinePlayer(uuid);
		if (player == null)
			throw new PlayerNotFoundException();
		return getOfflinePlayer(player);
	}
	
	public static EssentialsOfflinePlayer getOfflinePlayer(OfflinePlayer player)
	{
		if (players.containsKey(player.getUniqueId()))
			return players.get(player.getUniqueId());
		return new EssentialsOfflinePlayer(player);
	}
	
	@Deprecated
	public static EssentialsOfflinePlayer getOfflinePlayer(String name) throws PlayerNotFoundException
	{
		OfflinePlayer player = Bukkit.getOfflinePlayer(name);
		if (player == null)
			throw new PlayerNotFoundException();
		return getOfflinePlayer(player);
	}
}