Essentials/Essentials/src/main/java/com/earth2me/essentials/commands/Commandmute.java

138 lines
5.7 KiB
Java
Raw Normal View History

2011-07-24 23:19:12 +02:00
package com.earth2me.essentials.commands;
import com.earth2me.essentials.CommandSource;
import com.earth2me.essentials.OfflinePlayerStub;
2011-07-24 23:19:12 +02:00
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.AdventureUtil;
2013-06-08 23:31:19 +02:00
import com.earth2me.essentials.utils.DateUtil;
import net.ess3.api.TranslatableException;
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
import java.util.GregorianCalendar;
import java.util.List;
2015-04-15 06:06:16 +02:00
import java.util.logging.Level;
import static com.earth2me.essentials.I18n.tlLiteral;
2015-04-15 06:06:16 +02:00
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 OfflinePlayerStub(args[0], ess.getServer()));
2015-04-15 06:06:16 +02:00
}
if (!user.getBase().isOnline() && sender.isPlayer()) {
if (!sender.isAuthorized("essentials.mute.offline")) {
throw new TranslatableException("muteExemptOffline");
2015-04-15 06:06:16 +02:00
}
} else if (user.isAuthorized("essentials.mute.exempt")) {
throw new TranslatableException("muteExempt");
2015-04-15 06:06:16 +02:00
}
long muteTimestamp = 0;
2020-10-03 19:46:05 +02:00
final String time;
String muteReason = null;
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) {
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")) {
sender.sendTl("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();
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);
2020-10-03 19:46:05 +02:00
if (!event.isCancelled()) {
if (muteReason != null) {
user.setMuteReason(muteReason.isEmpty() ? null : muteReason);
user.setMuted(true);
2015-04-15 06:06:16 +02:00
} else {
user.setMuted(!user.getMuted());
if (!user.getMuted()) {
user.setMuteReason(null);
}
}
user.setMuteTimeout(muteTimestamp);
final boolean muted = user.getMuted();
2020-10-03 19:46:05 +02:00
final String muteTime = DateUtil.formatDateDiff(muteTimestamp);
if (nomatch) {
sender.sendTl("userUnknown", user.getName());
2015-04-15 06:06:16 +02:00
}
if (muted) {
if (muteTimestamp > 0) {
if (!user.hasMuteReason()) {
sender.sendTl("mutedPlayerFor", user.getDisplayName(), muteTime);
user.sendTl("playerMutedFor", muteTime);
2017-11-26 07:55:05 +01:00
} 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, AdventureUtil.miniToLegacy(tlLiteral(tlKey, objects)));
ess.broadcastTl(null, "essentials.mute.notify", tlKey, objects);
} else {
sender.sendTl("unmutedPlayer", user.getDisplayName());
user.sendTl("playerUnmuted");
}
2015-04-15 06:06:16 +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) {
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
}