mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2024-09-18 10:31:21 +02:00
170 lines
6.2 KiB
Java
170 lines
6.2 KiB
Java
package net.citizensnpcs.commands;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
|
|
import net.citizensnpcs.Citizens;
|
|
import net.citizensnpcs.api.command.Command;
|
|
import net.citizensnpcs.api.command.CommandContext;
|
|
import net.citizensnpcs.api.command.CommandManager.CommandInfo;
|
|
import net.citizensnpcs.api.command.Requirements;
|
|
import net.citizensnpcs.api.command.exception.CommandException;
|
|
import net.citizensnpcs.api.npc.NPC;
|
|
import net.citizensnpcs.api.util.Messaging;
|
|
import net.citizensnpcs.util.Messages;
|
|
import net.citizensnpcs.util.Paginator;
|
|
import net.citizensnpcs.util.StringHelper;
|
|
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.command.CommandSender;
|
|
|
|
import com.google.common.collect.Sets;
|
|
|
|
@Requirements
|
|
public class HelpCommands {
|
|
private final Citizens plugin;
|
|
|
|
public HelpCommands(Citizens plugin) {
|
|
this.plugin = plugin;
|
|
}
|
|
|
|
@Command(
|
|
aliases = { "citizens" },
|
|
usage = "help (page|command)",
|
|
desc = "Citizens help menu",
|
|
modifiers = { "help" },
|
|
min = 1,
|
|
max = 2,
|
|
permission = "citizens.help")
|
|
@Requirements
|
|
public void citizensHelp(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
|
int page = 1;
|
|
try {
|
|
page = args.argsLength() == 2 ? args.getInteger(1) : page;
|
|
} catch (NumberFormatException e) {
|
|
sendSpecificHelp(sender, "citizens", args.getString(1));
|
|
}
|
|
sendHelp(sender, "citizens", page);
|
|
}
|
|
|
|
private List<String> getLines(CommandSender sender, String baseCommand) {
|
|
// Ensures that commands with multiple modifiers are only added once
|
|
Set<CommandInfo> processed = Sets.newHashSet();
|
|
List<String> lines = new ArrayList<String>();
|
|
for (CommandInfo info : plugin.getCommands(baseCommand)) {
|
|
Command command = info.getCommandAnnotation();
|
|
if (processed.contains(info)
|
|
|| (!sender.hasPermission("citizens.admin") && !sender.hasPermission("citizens."
|
|
+ command.permission())))
|
|
continue;
|
|
lines.add(format(command));
|
|
if (command.modifiers().length > 1)
|
|
processed.add(info);
|
|
}
|
|
return lines;
|
|
}
|
|
|
|
@Command(
|
|
aliases = { "npc" },
|
|
usage = "help (page|command)",
|
|
desc = "NPC help menu",
|
|
modifiers = { "help" },
|
|
min = 1,
|
|
max = 2,
|
|
permission = "citizens.npc.help")
|
|
@Requirements
|
|
public void npcHelp(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
|
int page = 1;
|
|
try {
|
|
page = args.argsLength() == 2 ? args.getInteger(1) : page;
|
|
} catch (NumberFormatException e) {
|
|
sendSpecificHelp(sender, "npc", args.getString(1));
|
|
}
|
|
sendHelp(sender, "NPC", page);
|
|
}
|
|
|
|
@Command(
|
|
aliases = { "script" },
|
|
usage = "help (page|command)",
|
|
desc = "Script help menu",
|
|
modifiers = { "help" },
|
|
min = 1,
|
|
max = 2,
|
|
permission = "citizens.script.help")
|
|
@Requirements
|
|
public void scriptHelp(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
|
int page = 1;
|
|
try {
|
|
page = args.argsLength() == 2 ? args.getInteger(1) : page;
|
|
} catch (NumberFormatException e) {
|
|
sendSpecificHelp(sender, "script", args.getString(1));
|
|
}
|
|
sendHelp(sender, "script", page);
|
|
}
|
|
|
|
private void sendHelp(CommandSender sender, String name, int page) throws CommandException {
|
|
Paginator paginator = new Paginator().header(StringHelper.capitalize(name)
|
|
+ Messaging.tr(Messages.COMMAND_HELP_HEADER));
|
|
for (String line : getLines(sender, name.toLowerCase()))
|
|
paginator.addLine(line);
|
|
if (!paginator.sendPage(sender, page))
|
|
throw new CommandException(Messages.COMMAND_PAGE_MISSING, page);
|
|
}
|
|
|
|
private void sendSpecificHelp(CommandSender sender, String rootCommand, String modifier) throws CommandException {
|
|
CommandInfo info = plugin.getCommandInfo(rootCommand, modifier);
|
|
if (info == null)
|
|
throw new CommandException(Messages.COMMAND_MISSING, rootCommand + " " + modifier);
|
|
Messaging.send(sender, format(info.getCommandAnnotation()));
|
|
String help = Messaging.tryTranslate(info.getCommandAnnotation().help());
|
|
if (help.isEmpty())
|
|
return;
|
|
Messaging.send(sender, ChatColor.AQUA + help);
|
|
}
|
|
|
|
@Command(
|
|
aliases = { "template", "tpl" },
|
|
usage = "help (page|command)",
|
|
desc = "Template help menu",
|
|
modifiers = { "help" },
|
|
min = 1,
|
|
max = 2,
|
|
permission = "citizens.templates.help")
|
|
@Requirements
|
|
public void templatesHelp(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
|
int page = 1;
|
|
try {
|
|
page = args.argsLength() == 2 ? args.getInteger(1) : page;
|
|
} catch (NumberFormatException e) {
|
|
sendSpecificHelp(sender, "templates", args.getString(1));
|
|
}
|
|
sendHelp(sender, "templates", page);
|
|
}
|
|
|
|
@Command(
|
|
aliases = { "waypoint", "waypoint", "wp" },
|
|
usage = "help (page|command)",
|
|
desc = "Waypoints help menu",
|
|
modifiers = { "help" },
|
|
min = 1,
|
|
max = 2,
|
|
permission = "citizens.waypoints.help")
|
|
@Requirements
|
|
public void waypointsHelp(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
|
|
int page = 1;
|
|
try {
|
|
page = args.argsLength() == 2 ? args.getInteger(1) : page;
|
|
} catch (NumberFormatException e) {
|
|
sendSpecificHelp(sender, "waypoints", args.getString(1));
|
|
}
|
|
sendHelp(sender, "waypoints", page);
|
|
}
|
|
|
|
private static final String COMMAND_FORMAT = "<7>/<c>%s%s <7>- <e>%s";
|
|
|
|
private static final String format(Command command) {
|
|
return String.format(COMMAND_FORMAT, command.aliases()[0],
|
|
(command.usage().isEmpty() ? "" : " " + command.usage()), Messaging.tryTranslate(command.desc()));
|
|
}
|
|
} |