2016-03-02 19:28:01 +00:00
|
|
|
package me.totalfreedom.totalfreedommod.command;
|
2015-10-19 17:43:46 +00:00
|
|
|
|
2023-04-10 06:18:06 +00:00
|
|
|
import me.totalfreedom.totalfreedommod.command.handling.*;
|
2018-03-03 04:29:08 +00:00
|
|
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
|
|
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
2015-10-19 17:43:46 +00:00
|
|
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
2023-03-28 05:23:34 +00:00
|
|
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
2016-05-12 19:40:39 +00:00
|
|
|
import org.apache.commons.lang3.ArrayUtils;
|
2019-07-31 16:19:23 +00:00
|
|
|
import org.apache.commons.lang3.StringUtils;
|
2015-10-19 17:43:46 +00:00
|
|
|
import org.bukkit.command.Command;
|
|
|
|
import org.bukkit.command.CommandSender;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
|
2023-03-30 03:00:35 +00:00
|
|
|
import java.util.*;
|
|
|
|
|
2023-04-10 06:18:06 +00:00
|
|
|
@Intercept("mute")
|
2023-03-31 05:14:57 +00:00
|
|
|
@CommandPermissions(permission = "mute", source = SourceType.BOTH)
|
2023-03-28 05:23:34 +00:00
|
|
|
@CommandParameters(description = "Mutes a player with brute force.", usage = "/<command> <[-q] <player> [reason] | list | purge | all>", aliases = "stfu")
|
2020-04-22 08:23:51 +00:00
|
|
|
public class Command_mute extends FreedomCommand
|
2015-10-19 17:43:46 +00:00
|
|
|
{
|
|
|
|
@Override
|
2015-11-22 18:26:47 +00:00
|
|
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
2015-10-19 17:43:46 +00:00
|
|
|
{
|
2016-05-12 19:40:39 +00:00
|
|
|
if (args.length == 0)
|
2015-10-19 17:43:46 +00:00
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2022-11-13 13:19:10 +00:00
|
|
|
switch (args[0].toLowerCase())
|
2015-10-19 17:43:46 +00:00
|
|
|
{
|
2022-11-13 13:19:10 +00:00
|
|
|
case "list" ->
|
2015-10-19 17:43:46 +00:00
|
|
|
{
|
2023-03-28 05:23:34 +00:00
|
|
|
List<String> muted = server.getOnlinePlayers().stream().filter(player -> plugin.pl.getPlayer(player).isMuted()).map(player -> player.getName()).toList();
|
2022-11-13 13:19:10 +00:00
|
|
|
|
2023-03-28 05:23:34 +00:00
|
|
|
if (muted.isEmpty())
|
|
|
|
{
|
|
|
|
msgNew("Nobody is currently muted.");
|
2023-03-30 03:00:35 +00:00
|
|
|
} else
|
2023-03-28 05:23:34 +00:00
|
|
|
{
|
|
|
|
msgNew("Muted players: <players>", Placeholder.unparsed("players", FUtil.listToString(muted)));
|
|
|
|
}
|
2015-10-19 17:43:46 +00:00
|
|
|
}
|
2022-11-13 13:19:10 +00:00
|
|
|
case "purge" ->
|
2015-10-19 17:43:46 +00:00
|
|
|
{
|
2022-11-13 13:19:10 +00:00
|
|
|
FUtil.adminAction(sender.getName(), "Unmuting all players", true);
|
|
|
|
List<? extends Player> list = server.getOnlinePlayers().stream().filter(player ->
|
|
|
|
plugin.pl.getPlayer(player).isMuted()).toList();
|
2016-05-12 19:40:39 +00:00
|
|
|
|
2022-11-13 13:19:10 +00:00
|
|
|
list.forEach(player ->
|
2015-10-19 17:43:46 +00:00
|
|
|
{
|
2022-11-13 13:19:10 +00:00
|
|
|
plugin.pl.getPlayer(player).setMuted(false);
|
2023-03-28 05:23:34 +00:00
|
|
|
FUtil.playerTitle(player, "<red>You have been unmuted.", "<yellow>Be sure to follow the rules!");
|
2022-11-13 13:19:10 +00:00
|
|
|
});
|
2016-05-12 19:40:39 +00:00
|
|
|
|
2023-03-28 05:23:34 +00:00
|
|
|
msgNew("Unmuted <count> player<plural>.",
|
|
|
|
Placeholder.unparsed("count", String.valueOf(list.size())),
|
|
|
|
Placeholder.unparsed("plural", list.size() != 1 ? "s" : ""));
|
2015-10-19 17:43:46 +00:00
|
|
|
}
|
2022-11-13 13:19:10 +00:00
|
|
|
case "all" ->
|
2016-08-26 10:39:56 +00:00
|
|
|
{
|
2022-11-13 13:19:10 +00:00
|
|
|
FUtil.adminAction(sender.getName(), "Muting all non-admins", true);
|
|
|
|
List<? extends Player> list = server.getOnlinePlayers().stream().filter(player ->
|
|
|
|
!plugin.al.isAdmin(player)).toList();
|
2016-05-12 19:40:39 +00:00
|
|
|
|
2022-11-13 13:19:10 +00:00
|
|
|
list.forEach(player ->
|
|
|
|
{
|
|
|
|
plugin.pl.getPlayer(player).setMuted(true);
|
2023-03-28 05:23:34 +00:00
|
|
|
FUtil.playerTitle(player, "<red>You have been globally muted.", "<yellow>Please be patient and you will be unmuted shortly.");
|
2022-11-13 13:19:10 +00:00
|
|
|
});
|
2015-10-19 17:43:46 +00:00
|
|
|
|
2023-03-28 05:23:34 +00:00
|
|
|
msgNew("Muted <count> player<plural>.",
|
|
|
|
Placeholder.unparsed("count", String.valueOf(list.size())),
|
|
|
|
Placeholder.unparsed("plural", list.size() != 1 ? "s" : ""));
|
2020-01-11 22:44:13 +00:00
|
|
|
}
|
2022-11-13 13:19:10 +00:00
|
|
|
default ->
|
2022-01-23 12:26:22 +00:00
|
|
|
{
|
2022-11-13 13:19:10 +00:00
|
|
|
boolean quiet = args[0].equalsIgnoreCase("-q");
|
2020-04-23 11:18:03 +00:00
|
|
|
|
2022-11-13 13:19:10 +00:00
|
|
|
// Handling the -q parameter
|
2023-03-28 05:23:34 +00:00
|
|
|
if (quiet)
|
2022-11-13 13:19:10 +00:00
|
|
|
{
|
|
|
|
if (args.length == 1) return false;
|
|
|
|
args = ArrayUtils.subarray(args, 1, args.length);
|
|
|
|
}
|
2015-10-19 17:43:46 +00:00
|
|
|
|
2022-11-13 13:19:10 +00:00
|
|
|
// Handling the (optional) reason
|
|
|
|
String reason = args.length > 1 ? StringUtils.join(args, " ", 1, args.length) : null;
|
2015-10-19 17:43:46 +00:00
|
|
|
|
2022-11-13 13:19:10 +00:00
|
|
|
// Showtime
|
|
|
|
Optional.ofNullable(getPlayer(args[0])).ifPresentOrElse(player ->
|
|
|
|
{
|
|
|
|
if (plugin.al.isAdmin(player))
|
|
|
|
{
|
2023-03-28 05:23:34 +00:00
|
|
|
msgNew("<red><player> is an admin, and as such can't be muted.", Placeholder.unparsed("player", player.getName()));
|
2022-11-13 13:19:10 +00:00
|
|
|
return;
|
2023-03-30 03:00:35 +00:00
|
|
|
} else if (plugin.pl.getPlayer(player).isMuted())
|
2022-11-13 13:19:10 +00:00
|
|
|
{
|
2023-03-28 05:23:34 +00:00
|
|
|
msgNew("<red><player> is already muted.", Placeholder.unparsed("player", player.getName()));
|
2022-11-13 13:19:10 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Don't broadcast the mute if it was quiet
|
|
|
|
if (!quiet)
|
|
|
|
{
|
|
|
|
FUtil.adminAction(sender.getName(), "Muting " + player.getName(), true);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mutes the player
|
|
|
|
plugin.pl.getPlayer(player).setMuted(true);
|
|
|
|
|
|
|
|
// Notify the player that they have been muted
|
2023-03-28 05:23:34 +00:00
|
|
|
FUtil.playerTitle(player, "<red>You have been muted.", "<yellow>Be sure to follow the rules!");
|
|
|
|
msgNew(player, "<red>You have been muted by <yellow><sender>", Placeholder.unparsed("sender", sender.getName()));
|
2022-11-13 13:19:10 +00:00
|
|
|
|
|
|
|
// Give them the reason if one is present.
|
|
|
|
if (reason != null)
|
|
|
|
{
|
2023-03-28 05:23:34 +00:00
|
|
|
msgNew(player, "<red>Reason: <yellow><reason>", Placeholder.unparsed("reason", reason));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (quiet)
|
|
|
|
{
|
|
|
|
msgNew("Muted <player>.", Placeholder.unparsed("player", player.getName()));
|
2023-03-30 03:00:35 +00:00
|
|
|
} else
|
2023-03-28 05:23:34 +00:00
|
|
|
{
|
|
|
|
msgNew("Quietly muted <player>.", Placeholder.unparsed("player", player.getName()));
|
2022-11-13 13:19:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(),
|
|
|
|
PunishmentType.MUTE, reason));
|
|
|
|
}, () -> msg(PLAYER_NOT_FOUND));
|
|
|
|
}
|
2020-04-22 08:23:51 +00:00
|
|
|
}
|
|
|
|
|
2015-10-19 17:43:46 +00:00
|
|
|
return true;
|
|
|
|
}
|
2019-01-29 04:57:41 +00:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
|
|
|
|
{
|
2020-12-04 00:28:53 +00:00
|
|
|
if (!plugin.al.isAdmin(sender))
|
2019-01-29 04:57:41 +00:00
|
|
|
{
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (args.length == 1)
|
|
|
|
{
|
|
|
|
List<String> arguments = new ArrayList<>();
|
|
|
|
arguments.addAll(FUtil.getPlayerList());
|
|
|
|
arguments.addAll(Arrays.asList("list", "purge", "all"));
|
|
|
|
return arguments;
|
|
|
|
}
|
|
|
|
|
|
|
|
return Collections.emptyList();
|
|
|
|
}
|
2022-01-23 12:26:22 +00:00
|
|
|
}
|