forked from EssentialsX/Essentials
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCommandmute.java
More file actions
145 lines (129 loc) · 6.24 KB
/
Commandmute.java
File metadata and controls
145 lines (129 loc) · 6.24 KB
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
package com.earth2me.essentials.commands;
import com.earth2me.essentials.CommandSource;
import com.earth2me.essentials.OfflinePlayerStub;
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.DateUtil;
import net.ess3.api.TranslatableException;
import net.ess3.api.events.MuteStatusChangeEvent;
import org.bukkit.Server;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.Level;
import static com.earth2me.essentials.I18n.tlLiteral;
public class Commandmute extends EssentialsCommand {
public Commandmute() {
super("mute");
}
@Override
public void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception {
final boolean isUnmute = commandLabel.toLowerCase(java.util.Locale.ENGLISH).contains("unmute");
boolean nomatch = false;
if (args.length < 1) {
throw new NotEnoughArgumentsException();
}
User user;
try {
user = getPlayer(server, args, 0, true, true);
} catch (final PlayerNotFoundException e) {
nomatch = true;
user = ess.getUser(new OfflinePlayerStub(args[0], ess.getServer()));
}
if (isUnmute && !user.getMuted()) {
sender.sendTl("playerNotMuted", user.getDisplayName());
return;
}
if (!user.getBase().isOnline() && sender.isPlayer()) {
if (!sender.isAuthorized("essentials.mute.offline")) {
throw new TranslatableException("muteExemptOffline");
}
} else if (!isUnmute && user.isAuthorized("essentials.mute.exempt")) {
throw new TranslatableException("muteExempt");
}
long muteTimestamp = 0;
final String time;
String muteReason = null;
if (!isUnmute && args.length > 1) {
time = args[1];
try {
muteTimestamp = DateUtil.parseDateDiff(time, true);
muteReason = getFinalArg(args, 2);
} catch (final Exception e) {
muteReason = getFinalArg(args, 1);
}
final long maxMuteLength = ess.getSettings().getMaxMute() * 1000;
if (maxMuteLength > 0 && ((muteTimestamp - GregorianCalendar.getInstance().getTimeInMillis()) > maxMuteLength) && sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.mute.unlimited")) {
sender.sendTl("oversizedMute");
throw new NoChargeException();
}
}
final boolean willMute = !isUnmute && ((args.length > 1) || !user.getMuted());
final User controller = sender.isPlayer() ? ess.getUser(sender.getPlayer()) : null;
final MuteStatusChangeEvent event = new MuteStatusChangeEvent(user, controller, willMute, muteTimestamp, muteReason);
ess.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
if (muteReason != null) {
user.setMuteReason(muteReason.isEmpty() ? null : muteReason);
user.setMuted(true);
} else {
user.setMuted(!user.getMuted());
if (!user.getMuted()) {
user.setMuteReason(null);
}
}
user.setMuteTimeout(muteTimestamp);
final boolean muted = user.getMuted();
final String muteTime = DateUtil.formatDateDiff(muteTimestamp);
if (nomatch) {
sender.sendTl("userUnknown", user.getName());
}
if (muted) {
if (muteTimestamp > 0) {
if (!user.hasMuteReason()) {
sender.sendTl("mutedPlayerFor", user.getDisplayName(), muteTime);
user.sendTl("playerMutedFor", muteTime);
} else {
sender.sendTl("mutedPlayerForReason", user.getDisplayName(), muteTime, user.getMuteReason());
user.sendTl("playerMutedForReason", muteTime, user.getMuteReason());
}
} else {
if (!user.hasMuteReason()) {
sender.sendTl("mutedPlayer", user.getDisplayName());
user.sendTl("playerMuted");
} else {
sender.sendTl("mutedPlayerReason", user.getDisplayName(), user.getMuteReason());
user.sendTl("playerMutedReason", user.getMuteReason());
}
}
final String tlKey;
final Object[] objects;
if (user.hasMuteReason()) {
if (muteTimestamp > 0) {
tlKey = "muteNotifyForReason";
objects = new Object[]{sender.getSender().getName(), user.getName(), muteTime, user.getMuteReason()};
} else {
tlKey = "muteNotify";
objects = new Object[]{sender.getSender().getName(), user.getName(), user.getMuteReason()};
}
} else {
tlKey = muteTimestamp > 0 ? "muteNotifyFor" : "muteNotify";
objects = new Object[]{sender.getSender().getName(), user.getName(), muteTime};
}
ess.getLogger().log(Level.INFO, ess.getAdventureFacet().miniToLegacy(tlLiteral(tlKey, objects)));
ess.broadcastTl(null, "essentials.mute.notify", tlKey, objects);
} else {
sender.sendTl("unmutedPlayer", user.getDisplayName());
user.sendTl("playerUnmuted");
ess.getLogger().log(Level.INFO, ess.getAdventureFacet().miniToLegacy(tlLiteral("unmuteNotify", sender.getSender().getName(), user.getName())));
ess.broadcastTl(null, "essentials.mute.notify", "unmuteNotify", new Object[]{sender.getSender().getName(), user.getName()});
}
}
}
@Override
protected List<String> getTabCompleteOptions(final Server server, final CommandSource sender, final String commandLabel, final String[] args) {
if (args.length == 1) {
return getPlayers(sender);
} else {
return COMMON_DATE_DIFFS; // Date diff can span multiple words
}
}
}