2011-07-24 23:19:12 +02:00
|
|
|
package com.earth2me.essentials.commands;
|
|
|
|
|
2013-10-16 21:59:39 +02:00
|
|
|
import com.earth2me.essentials.CommandSource;
|
2013-08-18 22:02:47 +02:00
|
|
|
import com.earth2me.essentials.OfflinePlayer;
|
2011-07-24 23:19:12 +02:00
|
|
|
import com.earth2me.essentials.User;
|
2013-06-08 23:31:19 +02:00
|
|
|
import com.earth2me.essentials.utils.DateUtil;
|
2016-08-21 03:13:26 +02:00
|
|
|
import net.ess3.api.events.MuteStatusChangeEvent;
|
2011-11-18 18:42:26 +01:00
|
|
|
import org.bukkit.Server;
|
2011-07-24 23:19:12 +02:00
|
|
|
|
2020-03-14 23:12:43 +01:00
|
|
|
import java.util.GregorianCalendar;
|
2017-06-11 02:17:43 +02:00
|
|
|
import java.util.List;
|
2015-04-15 06:06:16 +02:00
|
|
|
import java.util.logging.Level;
|
|
|
|
|
|
|
|
import static com.earth2me.essentials.I18n.tl;
|
|
|
|
|
|
|
|
public class Commandmute extends EssentialsCommand {
|
|
|
|
public Commandmute() {
|
|
|
|
super("mute");
|
|
|
|
}
|
2011-07-24 23:19:12 +02:00
|
|
|
|
2015-04-15 06:06:16 +02: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);
|
2020-10-03 19:46:05 +02:00
|
|
|
} catch (final PlayerNotFoundException e) {
|
2015-04-15 06:06:16 +02:00
|
|
|
nomatch = true;
|
|
|
|
user = ess.getUser(new OfflinePlayer(args[0], ess.getServer()));
|
|
|
|
}
|
2020-08-11 20:09:22 +02:00
|
|
|
if (!user.getBase().isOnline() && sender.isPlayer()) {
|
|
|
|
if (!sender.isAuthorized("essentials.mute.offline", ess)) {
|
2015-04-15 06:06:16 +02:00
|
|
|
throw new Exception(tl("muteExemptOffline"));
|
|
|
|
}
|
2020-08-11 20:09:22 +02:00
|
|
|
} else if (user.isAuthorized("essentials.mute.exempt")) {
|
2020-10-03 19:46:05 +02:00
|
|
|
throw new Exception(tl("muteExempt"));
|
2015-04-15 06:06:16 +02:00
|
|
|
}
|
2020-03-14 23:12:43 +01:00
|
|
|
|
|
|
|
long muteTimestamp = 0;
|
2020-10-03 19:46:05 +02:00
|
|
|
final String time;
|
2020-04-23 17:28:08 +02:00
|
|
|
String muteReason = null;
|
2020-03-14 23:12:43 +01:00
|
|
|
|
|
|
|
if (args.length > 1) {
|
|
|
|
time = args[1];
|
|
|
|
try {
|
|
|
|
muteTimestamp = DateUtil.parseDateDiff(time, true);
|
|
|
|
muteReason = getFinalArg(args, 2);
|
2020-10-03 19:46:05 +02:00
|
|
|
} catch (final Exception e) {
|
2020-03-14 23:12:43 +01:00
|
|
|
muteReason = getFinalArg(args, 1);
|
|
|
|
}
|
|
|
|
final long maxMuteLength = ess.getSettings().getMaxMute() * 1000;
|
2020-10-03 19:46:05 +02:00
|
|
|
if (maxMuteLength > 0 && ((muteTimestamp - GregorianCalendar.getInstance().getTimeInMillis()) > maxMuteLength) && sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.mute.unlimited")) {
|
2020-03-14 23:12:43 +01:00
|
|
|
sender.sendMessage(tl("oversizedMute"));
|
|
|
|
throw new NoChargeException();
|
|
|
|
}
|
|
|
|
}
|
2020-10-03 19:46:05 +02:00
|
|
|
|
2019-03-15 12:58:30 +01:00
|
|
|
final boolean willMute = (args.length > 1) || !user.getMuted();
|
2016-08-21 03:13:26 +02:00
|
|
|
final User controller = sender.isPlayer() ? ess.getUser(sender.getPlayer()) : null;
|
2020-04-23 17:28:08 +02:00
|
|
|
final MuteStatusChangeEvent event = new MuteStatusChangeEvent(user, controller, willMute, muteTimestamp, muteReason);
|
2016-08-21 03:13:26 +02:00
|
|
|
ess.getServer().getPluginManager().callEvent(event);
|
2020-10-03 19:46:05 +02:00
|
|
|
|
2016-08-21 03:13:26 +02:00
|
|
|
if (!event.isCancelled()) {
|
2020-04-23 17:28:08 +02:00
|
|
|
if (muteReason != null) {
|
2017-12-27 01:09:46 +01:00
|
|
|
user.setMuteReason(muteReason.isEmpty() ? null : muteReason);
|
2017-09-04 06:13:00 +02:00
|
|
|
user.setMuted(true);
|
2015-04-15 06:06:16 +02:00
|
|
|
} else {
|
2016-08-21 03:13:26 +02:00
|
|
|
user.setMuted(!user.getMuted());
|
2017-12-27 01:09:46 +01:00
|
|
|
if (!user.getMuted()) {
|
|
|
|
user.setMuteReason(null);
|
2017-09-04 06:13:00 +02:00
|
|
|
}
|
2016-08-21 03:13:26 +02:00
|
|
|
}
|
|
|
|
user.setMuteTimeout(muteTimestamp);
|
|
|
|
final boolean muted = user.getMuted();
|
2020-10-03 19:46:05 +02:00
|
|
|
final String muteTime = DateUtil.formatDateDiff(muteTimestamp);
|
2016-08-21 03:13:26 +02:00
|
|
|
|
|
|
|
if (nomatch) {
|
|
|
|
sender.sendMessage(tl("userUnknown", user.getName()));
|
2015-04-15 06:06:16 +02:00
|
|
|
}
|
2016-08-21 03:13:26 +02:00
|
|
|
|
|
|
|
if (muted) {
|
|
|
|
if (muteTimestamp > 0) {
|
2017-12-27 01:09:46 +01:00
|
|
|
if (!user.hasMuteReason()) {
|
2017-09-04 06:02:56 +02:00
|
|
|
sender.sendMessage(tl("mutedPlayerFor", user.getDisplayName(), muteTime));
|
|
|
|
user.sendMessage(tl("playerMutedFor", muteTime));
|
2017-11-26 07:55:05 +01:00
|
|
|
} else {
|
2017-12-20 07:35:51 +01:00
|
|
|
sender.sendMessage(tl("mutedPlayerForReason", user.getDisplayName(), muteTime, user.getMuteReason()));
|
|
|
|
user.sendMessage(tl("playerMutedForReason", muteTime, user.getMuteReason()));
|
2017-09-04 06:02:56 +02:00
|
|
|
}
|
2016-08-21 03:13:26 +02:00
|
|
|
} else {
|
2017-12-27 01:09:46 +01:00
|
|
|
if (!user.hasMuteReason()) {
|
2017-09-04 06:02:56 +02:00
|
|
|
sender.sendMessage(tl("mutedPlayer", user.getDisplayName()));
|
|
|
|
user.sendMessage(tl("playerMuted"));
|
2017-12-27 01:09:46 +01:00
|
|
|
} else {
|
2017-12-20 07:35:51 +01:00
|
|
|
sender.sendMessage(tl("mutedPlayerReason", user.getDisplayName(), user.getMuteReason()));
|
|
|
|
user.sendMessage(tl("playerMutedReason", user.getMuteReason()));
|
2017-09-04 06:02:56 +02:00
|
|
|
}
|
2016-08-21 03:13:26 +02:00
|
|
|
}
|
|
|
|
final String message;
|
|
|
|
if (muteTimestamp > 0) {
|
2017-12-27 01:09:46 +01:00
|
|
|
if (!user.hasMuteReason()) {
|
2017-09-04 06:02:56 +02:00
|
|
|
message = tl("muteNotifyFor", sender.getSender().getName(), user.getName(), muteTime);
|
2017-12-27 01:09:46 +01:00
|
|
|
} else {
|
|
|
|
message = tl("muteNotifyForReason", sender.getSender().getName(), user.getName(), muteTime, user.getMuteReason());
|
2017-09-04 06:02:56 +02:00
|
|
|
}
|
2016-08-21 03:13:26 +02:00
|
|
|
} else {
|
2017-12-27 01:09:46 +01:00
|
|
|
if (!user.hasMuteReason()) {
|
2017-09-04 06:02:56 +02:00
|
|
|
message = tl("muteNotify", sender.getSender().getName(), user.getName());
|
2017-12-27 01:09:46 +01:00
|
|
|
} else {
|
|
|
|
message = tl("muteNotifyReason", sender.getSender().getName(), user.getName(), user.getMuteReason());
|
2017-09-04 06:02:56 +02:00
|
|
|
}
|
2016-08-21 03:13:26 +02:00
|
|
|
}
|
2022-08-18 18:35:53 +02:00
|
|
|
ess.getLogger().log(Level.INFO, message);
|
2016-08-21 03:13:26 +02:00
|
|
|
ess.broadcastMessage("essentials.mute.notify", message);
|
2016-06-18 15:00:51 +02:00
|
|
|
} else {
|
2016-08-21 03:13:26 +02:00
|
|
|
sender.sendMessage(tl("unmutedPlayer", user.getDisplayName()));
|
|
|
|
user.sendMessage(tl("playerUnmuted"));
|
2016-06-18 15:00:51 +02:00
|
|
|
}
|
2015-04-15 06:06:16 +02:00
|
|
|
}
|
|
|
|
}
|
2017-06-11 02:17:43 +02:00
|
|
|
|
|
|
|
@Override
|
2020-10-03 19:46:05 +02:00
|
|
|
protected List<String> getTabCompleteOptions(final Server server, final CommandSource sender, final String commandLabel, final String[] args) {
|
2017-06-11 02:17:43 +02:00
|
|
|
if (args.length == 1) {
|
|
|
|
return getPlayers(server, sender);
|
|
|
|
} else {
|
|
|
|
return COMMON_DATE_DIFFS; // Date diff can span multiple words
|
|
|
|
}
|
|
|
|
}
|
2013-03-19 13:32:46 +01:00
|
|
|
}
|