113 lines
5.0 KiB
Java
113 lines
5.0 KiB
Java
package me.totalfreedom.totalfreedommod.command;
|
|
|
|
import me.totalfreedom.totalfreedommod.command.handling.CommandParameters;
|
|
import me.totalfreedom.totalfreedommod.command.handling.CommandPermissions;
|
|
import me.totalfreedom.totalfreedommod.command.handling.FreedomCommand;
|
|
import me.totalfreedom.totalfreedommod.command.handling.SourceType;
|
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
|
import org.bukkit.command.Command;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.entity.Player;
|
|
|
|
import java.util.List;
|
|
|
|
@CommandPermissions(permission = "blockpvp", source = SourceType.BOTH)
|
|
@CommandParameters(description = "Toggle PVP mode for everyone or a certain player.", usage = "/<command> [<player> | list | purge | all]", aliases = "pvpblock,pvpmode")
|
|
public class Command_blockpvp extends FreedomCommand
|
|
{
|
|
@Override
|
|
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, String[] args, final boolean senderIsConsole)
|
|
{
|
|
if (args.length == 0)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
switch (args[0].toLowerCase())
|
|
{
|
|
// List
|
|
case "list" ->
|
|
{
|
|
List<String> restricted = server.getOnlinePlayers().stream().filter(player ->
|
|
plugin.pl.getPlayer(player).isPvpBlocked()).map(Player::getName).toList();
|
|
|
|
if (restricted.isEmpty())
|
|
{
|
|
msgNew("Nobody currently has their PVP abilities restricted.");
|
|
} else
|
|
{
|
|
msgNew("PVP abilities are restricted for these player(s): <players>",
|
|
Placeholder.unparsed("players", FUtil.listToString(restricted)));
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
// Purge
|
|
case "purge" ->
|
|
{
|
|
FUtil.adminAction(sender.getName(), "Restoring PVP abilities for all players", true);
|
|
List<? extends Player> affected = server.getOnlinePlayers().stream().filter(player -> plugin.pl.getPlayer(player).isPvpBlocked()).toList();
|
|
affected.forEach(player ->
|
|
{
|
|
msgNew(player, "<green>Your PVP abilities have been restored.");
|
|
plugin.pl.getPlayer(player).setPvpBlocked(false);
|
|
});
|
|
msgNew("Restored PVP abilities for <count> players.", Placeholder.unparsed("count", String.valueOf(affected.size())));
|
|
}
|
|
|
|
// All
|
|
case "all" ->
|
|
{
|
|
FUtil.adminAction(sender.getName(), "Restricting PVP capabilities for all non-admins", true);
|
|
List<? extends Player> affected = server.getOnlinePlayers().stream().filter(player -> !plugin.al.isAdmin(player)).toList();
|
|
affected.forEach(player ->
|
|
{
|
|
msgNew(player, "<red>Your PVP abilities have been restricted.");
|
|
plugin.pl.getPlayer(player).setPvpBlocked(true);
|
|
});
|
|
msgNew("Restricted PVP abilities for <count> players.", Placeholder.unparsed("count", String.valueOf(affected.size())));
|
|
}
|
|
|
|
// Specific players
|
|
default ->
|
|
{
|
|
final Player p = getPlayer(args[0]);
|
|
if (p == null)
|
|
{
|
|
msg(PLAYER_NOT_FOUND);
|
|
return true;
|
|
}
|
|
|
|
final FPlayer pd = plugin.pl.getPlayer(p);
|
|
if (pd.isPvpBlocked())
|
|
{
|
|
FUtil.adminAction(sender.getName(), "Restoring PVP capabilities for " + p.getName(), true);
|
|
pd.setPvpBlocked(false);
|
|
msgNew("Enabled the ability to PVP for <player>.", Placeholder.unparsed("player", p.getName()));
|
|
msgNew(p, "<green>Your PVP abilities have been restored.");
|
|
} else
|
|
{
|
|
if (plugin.al.isAdmin(p))
|
|
{
|
|
msgNew("<red><player> is an admin, and cannot have their PVP disabled.", Placeholder.unparsed("player", p.getName()));
|
|
return true;
|
|
}
|
|
|
|
FUtil.adminAction(sender.getName(), "Restricting PVP for " + p.getName(), true);
|
|
pd.setPvpBlocked(true);
|
|
plugin.pul.logPunishment(new Punishment(p.getName(), FUtil.getIp(p), sender.getName(), PunishmentType.BLOCKPVP, null));
|
|
|
|
msgNew(p, "<red>Your PVP abilities have been restricted.");
|
|
msgNew("Restricted PVP abilities for <player>. ", Placeholder.unparsed("player", p.getName()));
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
} |