package fr.Alphart.BAT.Modules.Comment;
import static com.google.common.base.Preconditions.checkArgument;
import static fr.Alphart.BAT.I18n.I18n._;
import static fr.Alphart.BAT.I18n.I18n.__;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import com.google.common.base.Joiner;
import fr.Alphart.BAT.BAT;
import fr.Alphart.BAT.Modules.BATCommand;
import fr.Alphart.BAT.Modules.BATCommand.RunAsync;
import fr.Alphart.BAT.Modules.CommandHandler;
import fr.Alphart.BAT.Modules.InvalidModuleException;
import fr.Alphart.BAT.Modules.Comment.CommentEntry.Type;
import fr.Alphart.BAT.Modules.Core.Core;
import fr.Alphart.BAT.Modules.Core.PermissionManager;
import fr.Alphart.BAT.Modules.Core.PermissionManager.Action;
import fr.Alphart.BAT.Utils.FormatUtils;
import fr.Alphart.BAT.Utils.Utils;
public class CommentCommand extends CommandHandler{
private static Comment comment;
protected CommentCommand(final Comment commentModule) {
super(commentModule);
comment = commentModule;
}
@RunAsync
public static class AddCommentCmd extends BATCommand{
public AddCommentCmd() {
super("comment", "<entity> <reason>", "Write a comment about the player.", "bat.comment.create", "note");
// We need this command to handle the /comment help
setMinArgs(1);
}
@Override
public void onCommand(final CommandSender sender, final String[] args, final boolean confirmedCmd) throws IllegalArgumentException {
if (args[0].equals("help")) {
try {
FormatUtils.showFormattedHelp(BAT.getInstance().getModules().getModule("comment").getCommands(),
sender, "COMMENT");
} catch (final InvalidModuleException e) {
e.printStackTrace();
}
return;
}
if(args.length < 2){
throw new IllegalArgumentException();
}
if(!confirmedCmd && Core.getPlayerIP(args[0]).equals("0.0.0.0")){
mustConfirmCommand(sender, "bat " + getName() + " " + Joiner.on(' ').join(args),
_("operationUnknownPlayer", new String[] {args[0]}));
return;
}
checkArgument(comment.hasLastcommentCooledDown(args[0]), _("cooldownUnfinished"));
comment.insertComment(args[0], Utils.getFinalArg(args, 1), Type.NOTE, sender.getName());
sender.sendMessage(__("commentAdded"));
}
}
@RunAsync
public static class ClearCommentCmd extends BATCommand {
public ClearCommentCmd() { super("clearcomment", "<entity> [commentID]", "Clear all the comments and warnings or the specified one of the player.", "bat.comment.clear");}
@Override
public void onCommand(final CommandSender sender, final String[] args, final boolean confirmedCmd) throws IllegalArgumentException {
sender.sendMessage(BAT.__(comment.clearComments(args[0], ((args.length == 2) ? Integer.parseInt(args[1]) : -1) )));
}
}
@RunAsync
public static class WarnCmd extends BATCommand {
public WarnCmd() { super("warn", "<player> <reason>", "Warn a player and add warning note on player's info text.", Action.WARN.getPermission());}
@Override
public void onCommand(CommandSender sender, String[] args, boolean confirmedCmd)
throws IllegalArgumentException {
final ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]);
final String reason = Utils.getFinalArg(args, 1);
if(target == null){
if(!confirmedCmd && Core.getPlayerIP(args[0]).equals("0.0.0.0")){
mustConfirmCommand(sender, getName() + " " + Joiner.on(' ').join(args),
_("operationUnknownPlayer", new String[] {args[0]}));
return;
}
}
if(sender instanceof ProxiedPlayer){
checkArgument(PermissionManager.canExecuteAction(Action.WARN , sender, ((ProxiedPlayer)sender).getServer().getInfo().getName()),
_("noPerm"));
}
checkArgument(comment.hasLastcommentCooledDown(args[0]), _("cooldownUnfinished"));
comment.insertComment(args[0], reason, Type.WARNING, sender.getName());
if(target != null){
target.sendMessage(__("wasWarnedNotif", new String[] {reason}));
}
BAT.broadcast(_("warnBroadcast", new String[]{args[0], sender.getName(), reason}), Action.WARN_BROADCAST.getPermission());
return;
}
}
}