2011-07-24 21:19:12 +00:00
|
|
|
package com.earth2me.essentials.commands;
|
|
|
|
|
2013-10-16 19:59:39 +00:00
|
|
|
import com.earth2me.essentials.CommandSource;
|
2013-08-18 20:02:47 +00:00
|
|
|
import com.earth2me.essentials.OfflinePlayer;
|
2011-07-24 21:19:12 +00:00
|
|
|
import com.earth2me.essentials.User;
|
2013-06-08 21:31:19 +00:00
|
|
|
import com.earth2me.essentials.utils.DateUtil;
|
2016-08-21 01:13:26 +00:00
|
|
|
import net.ess3.api.events.MuteStatusChangeEvent;
|
2011-11-18 17:42:26 +00:00
|
|
|
import org.bukkit.Server;
|
2011-07-24 21:19:12 +00:00
|
|
|
|
2017-06-11 00:17:43 +00:00
|
|
|
import java.util.List;
|
2015-04-15 04:06:16 +00:00
|
|
|
import java.util.logging.Level;
|
|
|
|
|
|
|
|
import static com.earth2me.essentials.I18n.tl;
|
|
|
|
|
2011-07-24 21:19:12 +00:00
|
|
|
|
2015-04-15 04:06:16 +00:00
|
|
|
public class Commandmute extends EssentialsCommand {
|
|
|
|
public Commandmute() {
|
|
|
|
super("mute");
|
|
|
|
}
|
2011-07-24 21:19:12 +00:00
|
|
|
|
2015-04-15 04:06:16 +00:00
|
|
|
@Override
|
|
|
|
public void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception {
|
|
|
|
boolean nomatch = false;
|
|
|
|
if (args.length < 1) {
|
|
|
|
throw new NotEnoughArgumentsException();
|
|
|
|
}
|
|
|
|
User user;
|
|
|
|
try {
|
|
|
|
user = getPlayer(server, args, 0, true, true);
|
|
|
|
} catch (PlayerNotFoundException e) {
|
|
|
|
nomatch = true;
|
|
|
|
user = ess.getUser(new OfflinePlayer(args[0], ess.getServer()));
|
|
|
|
}
|
|
|
|
if (!user.getBase().isOnline()) {
|
|
|
|
if (sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.mute.offline")) {
|
|
|
|
throw new Exception(tl("muteExemptOffline"));
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (user.isAuthorized("essentials.mute.exempt") && sender.isPlayer()) {
|
|
|
|
throw new Exception(tl("muteExempt"));
|
|
|
|
}
|
|
|
|
}
|
2016-08-21 01:13:26 +00:00
|
|
|
|
|
|
|
final boolean willMute = (args.length > 1) ? true : !user.getMuted();
|
|
|
|
final User controller = sender.isPlayer() ? ess.getUser(sender.getPlayer()) : null;
|
|
|
|
final MuteStatusChangeEvent event = new MuteStatusChangeEvent(user, controller, willMute);
|
|
|
|
ess.getServer().getPluginManager().callEvent(event);
|
|
|
|
|
|
|
|
if (!event.isCancelled()) {
|
|
|
|
long muteTimestamp = 0;
|
2013-11-07 02:22:32 +00:00
|
|
|
|
2016-08-21 01:13:26 +00:00
|
|
|
if (args.length > 1) {
|
2017-09-04 04:13:00 +00:00
|
|
|
final String time = args[1];
|
|
|
|
String muteReason;
|
|
|
|
try {
|
|
|
|
muteTimestamp = DateUtil.parseDateDiff(time, true);
|
|
|
|
muteReason = getFinalArg (args, 2);
|
|
|
|
} catch (Exception e) {
|
|
|
|
user.setMuted ((!user.getMuted ()));
|
|
|
|
muteReason = getFinalArg (args, 1);
|
|
|
|
}
|
|
|
|
|
2017-09-03 03:04:16 +00:00
|
|
|
user.setMuteReason (muteReason);
|
2017-09-04 04:13:00 +00:00
|
|
|
user.setMuted(true);
|
|
|
|
|
2015-04-15 04:06:16 +00:00
|
|
|
} else {
|
2016-08-21 01:13:26 +00:00
|
|
|
user.setMuted(!user.getMuted());
|
2017-09-04 04:13:00 +00:00
|
|
|
if (!user.getMuted ()) {
|
|
|
|
user.setMuteReason ("");
|
|
|
|
}
|
2016-08-21 01:13:26 +00:00
|
|
|
}
|
|
|
|
user.setMuteTimeout(muteTimestamp);
|
|
|
|
final boolean muted = user.getMuted();
|
|
|
|
String muteTime = DateUtil.formatDateDiff(muteTimestamp);
|
|
|
|
|
|
|
|
if (nomatch) {
|
|
|
|
sender.sendMessage(tl("userUnknown", user.getName()));
|
2015-04-15 04:06:16 +00:00
|
|
|
}
|
2016-08-21 01:13:26 +00:00
|
|
|
|
|
|
|
if (muted) {
|
|
|
|
if (muteTimestamp > 0) {
|
2017-09-04 04:02:56 +00:00
|
|
|
if (user.getMuteReason ().equals ("")) {
|
|
|
|
sender.sendMessage(tl("mutedPlayerFor", user.getDisplayName(), muteTime));
|
|
|
|
user.sendMessage(tl("playerMutedFor", muteTime));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
sender.sendMessage(tl("mutedPlayerFor", user.getDisplayName(), muteTime) + tl("muteFormat",user.getMuteReason()));
|
|
|
|
user.sendMessage(tl("playerMutedFor", muteTime) + tl("muteFormat",user.getMuteReason()));
|
|
|
|
}
|
2016-08-21 01:13:26 +00:00
|
|
|
} else {
|
2017-09-04 04:02:56 +00:00
|
|
|
if (user.getMuteReason ().equals ("")) {
|
|
|
|
sender.sendMessage(tl("mutedPlayer", user.getDisplayName()));
|
|
|
|
/** Send the player a message, why they were muted **/
|
|
|
|
user.sendMessage(tl("playerMuted"));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
sender.sendMessage(tl("mutedPlayer", user.getDisplayName()) + tl("muteFormat",user.getMuteReason()));
|
|
|
|
/** Send the player a message, why they were muted **/
|
|
|
|
user.sendMessage(tl("playerMuted")+ tl("muteFormat",user.getMuteReason()));
|
|
|
|
}
|
2016-08-21 01:13:26 +00:00
|
|
|
}
|
|
|
|
final String message;
|
|
|
|
if (muteTimestamp > 0) {
|
2017-09-04 04:02:56 +00:00
|
|
|
if (user.getMuteReason ().equals ("")) {
|
|
|
|
message = tl("muteNotifyFor", sender.getSender().getName(), user.getName(), muteTime);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
message = (tl("muteNotifyFor", sender.getSender().getName(), user.getName(), muteTime) + tl("muteFormat",user.getMuteReason()));
|
|
|
|
}
|
2016-08-21 01:13:26 +00:00
|
|
|
} else {
|
2017-09-04 04:02:56 +00:00
|
|
|
if (user.getMuteReason ().equals ("")) {
|
|
|
|
message = tl("muteNotify", sender.getSender().getName(), user.getName());
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
message = (tl("muteNotify", sender.getSender().getName(), user.getName()) + tl("muteFormat",user.getMuteReason()));
|
|
|
|
}
|
2016-08-21 01:13:26 +00:00
|
|
|
}
|
|
|
|
server.getLogger().log(Level.INFO, message);
|
|
|
|
ess.broadcastMessage("essentials.mute.notify", message);
|
2016-06-18 13:00:51 +00:00
|
|
|
} else {
|
2016-08-21 01:13:26 +00:00
|
|
|
sender.sendMessage(tl("unmutedPlayer", user.getDisplayName()));
|
|
|
|
user.sendMessage(tl("playerUnmuted"));
|
2016-06-18 13:00:51 +00:00
|
|
|
}
|
2015-04-15 04:06:16 +00:00
|
|
|
}
|
|
|
|
}
|
2017-06-11 00:17:43 +00:00
|
|
|
|
|
|
|
@Override
|
|
|
|
protected List<String> getTabCompleteOptions(Server server, CommandSource sender, String commandLabel, String[] args) {
|
|
|
|
if (args.length == 1) {
|
|
|
|
return getPlayers(server, sender);
|
|
|
|
} else {
|
|
|
|
return COMMON_DATE_DIFFS; // Date diff can span multiple words
|
|
|
|
}
|
|
|
|
}
|
2013-03-19 12:32:46 +00:00
|
|
|
}
|