package cn.yescallop.essentialsnk.command.defaults; import cn.nukkit.Player; import cn.nukkit.command.CommandSender; import cn.nukkit.utils.TextFormat; import cn.yescallop.essentialsnk.EssentialsAPI; import cn.yescallop.essentialsnk.Language; import cn.yescallop.essentialsnk.command.CommandBase; import cn.yescallop.essentialsnk.util.duration.LMLDurationParser; import java.time.Duration; import java.util.Arrays; import java.util.regex.Pattern; public class MuteCommand extends CommandBase { private static Pattern p = Pattern.compile("^[0-9]+$"); public MuteCommand(EssentialsAPI api) { super("mute", api); this.setAliases(new String[]{"silence"}); } public boolean execute(CommandSender sender, String label, String[] args) { if (!this.testPermission(sender)) { return false; } if (args.length < 1) { this.sendUsage(sender); return false; } Player player = api.getServer().getPlayer(args[0]); if (player == null) { sender.sendMessage(TextFormat.RED + Language.translate("commands.generic.player.notfound", args[0])); return false; } if (sender == player) { sender.sendMessage(TextFormat.RED + Language.translate("commands.mute.self")); return false; } if (args.length > 1) { Duration duration; try { /* /mute lmlstarqaq 0 0 1 */ if (args.length == 5 && isPositiveInteger(args[1]) && isPositiveInteger(args[2]) && isPositiveInteger(args[3]) && isPositiveInteger(args[4])) duration = Duration.ZERO .plusDays(Integer.parseInt(args[1])) .plusHours(Integer.parseInt(args[2])) .plusMinutes(Integer.parseInt(args[3])) .plusSeconds(Integer.parseInt(args[4])); else { String arg = String.join(" ", Arrays.copyOfRange(args, 1, args.length)).trim(); duration = LMLDurationParser.parse(arg); } } catch (Exception e) { sender.sendMessage(TextFormat.RED + Language.translate("commands.generic.number.invalid")); return false; } if (duration == null) { sender.sendMessage(TextFormat.RED + Language.translate("commands.generic.time.invalidtext")); return false; } if (duration.isZero()) { sender.sendMessage(TextFormat.RED + Language.translate("commands.mute.zero")); return false; } String message = api.getDurationString(duration); if (!api.mute(player, duration)) { sender.sendMessage(TextFormat.RED + Language.translate("commands.mute.range")); return false; } sender.sendMessage(Language.translate("commands.mute.success", player.getDisplayName(), message)); player.sendMessage(Language.translate("commands.mute.other", message)); } else { // args.length == 1 api.unmute(player); sender.sendMessage(Language.translate("commands.mute.unmute.success", player.getDisplayName())); player.sendMessage(Language.translate("commands.mute.unmute.other")); } return true; } private boolean isPositiveInteger(String a) { return p.matcher(a).find(); } }