下面列出了怎么用org.bukkit.help.HelpTopic的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public List<String> tabComplete(CommandSender sender, String alias, String[] args) {
Validate.notNull(sender, "Sender cannot be null");
Validate.notNull(args, "Arguments cannot be null");
Validate.notNull(alias, "Alias cannot be null");
if (args.length == 1) {
List<String> matchedTopics = new ArrayList<String>();
String searchString = args[0];
for (HelpTopic topic : Bukkit.getServer().getHelpMap().getHelpTopics()) {
String trimmedTopic = topic.getName().startsWith("/") ? topic.getName().substring(1) : topic.getName();
if (trimmedTopic.startsWith(searchString)) {
matchedTopics.add(trimmedTopic);
}
}
return matchedTopics;
}
return ImmutableList.of();
}
/**
* Extracts a list of all index topics from help.yml
*
* @return A list of index topics.
*/
public List<HelpTopic> getIndexTopics() {
List<HelpTopic> topics = new LinkedList<HelpTopic>();
ConfigurationSection indexTopics = helpYaml.getConfigurationSection("index-topics");
if (indexTopics != null) {
for (String topicName : indexTopics.getKeys(false)) {
ConfigurationSection section = indexTopics.getConfigurationSection(topicName);
String shortText = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("shortText", ""));
String preamble = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("preamble", ""));
String permission = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("permission", ""));
List<String> commands = section.getStringList("commands");
topics.add(new CustomIndexHelpTopic(server.getHelpMap(), topicName, shortText, permission, commands, preamble));
}
}
return topics;
}
@Override
public String getFullText(CommandSender sender) {
if (futureTopics != null) {
List<HelpTopic> topics = new LinkedList<HelpTopic>();
for (String futureTopic : futureTopics) {
HelpTopic topic = helpMap.getHelpTopic(futureTopic);
if (topic != null) {
topics.add(topic);
}
}
setTopicsCollection(topics);
futureTopics = null;
}
return super.getFullText(sender);
}
public void registerHelp() {
helps.clear();
final HelpMap help = Bukkit.getHelpMap();
final HelpTopic t = new GenericCommandHelpTopic(bukkitCommand);
help.addTopic(t);
helps.add(t);
final HelpTopic aliases = help.getHelpTopic("Aliases");
if (aliases instanceof IndexHelpTopic) {
aliases.getFullText(Bukkit.getConsoleSender()); // CraftBukkit has a lazy IndexHelpTopic class (org.bukkit.craftbukkit.help.CustomIndexHelpTopic) - maybe its used for aliases as well
try {
final Field topics = IndexHelpTopic.class.getDeclaredField("allTopics");
topics.setAccessible(true);
@SuppressWarnings("unchecked")
final ArrayList<HelpTopic> as = new ArrayList<>((Collection<HelpTopic>) topics.get(aliases));
for (final String alias : activeAliases) {
final HelpTopic at = new CommandAliasHelpTopic("/" + alias, "/" + getLabel(), help);
as.add(at);
helps.add(at);
}
Collections.sort(as, HelpTopicComparator.helpTopicComparatorInstance());
topics.set(aliases, as);
} catch (final Exception e) {
Skript.outdatedError(e);//, "error registering aliases for /" + getName());
}
}
}
public void unregisterHelp() {
Bukkit.getHelpMap().getHelpTopics().removeAll(helps);
final HelpTopic aliases = Bukkit.getHelpMap().getHelpTopic("Aliases");
if (aliases != null && aliases instanceof IndexHelpTopic) {
try {
final Field topics = IndexHelpTopic.class.getDeclaredField("allTopics");
topics.setAccessible(true);
@SuppressWarnings("unchecked")
final ArrayList<HelpTopic> as = new ArrayList<>((Collection<HelpTopic>) topics.get(aliases));
as.removeAll(helps);
topics.set(aliases, as);
} catch (final Exception e) {
Skript.outdatedError(e);//, "error unregistering aliases for /" + getName());
}
}
helps.clear();
}
/**
* Extracts a list of all index topics from help.yml
*
* @return A list of index topics.
*/
public List<HelpTopic> getIndexTopics() {
List<HelpTopic> topics = new LinkedList<HelpTopic>();
ConfigurationSection indexTopics = helpYaml.getConfigurationSection("index-topics");
if (indexTopics != null) {
for (String topicName : indexTopics.getKeys(false)) {
ConfigurationSection section = indexTopics.getConfigurationSection(topicName);
String shortText = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("shortText", ""));
String preamble = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("preamble", ""));
String permission = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("permission", ""));
List<String> commands = section.getStringList("commands");
topics.add(new CustomIndexHelpTopic(server.getHelpMap(), topicName, shortText, permission, commands, preamble));
}
}
return topics;
}
@Override
public String getFullText(CommandSender sender) {
if (futureTopics != null) {
List<HelpTopic> topics = new LinkedList<HelpTopic>();
for (String futureTopic : futureTopics) {
HelpTopic topic = helpMap.getHelpTopic(futureTopic);
if (topic != null) {
topics.add(topic);
}
}
setTopicsCollection(topics);
futureTopics = null;
}
return super.getFullText(sender);
}
protected HelpTopic findPossibleMatches(String searchString) {
int maxDistance = (searchString.length() / 5) + 3;
Set<HelpTopic> possibleMatches = new TreeSet<HelpTopic>(HelpTopicComparator.helpTopicComparatorInstance());
if (searchString.startsWith("/")) {
searchString = searchString.substring(1);
}
for (HelpTopic topic : Bukkit.getServer().getHelpMap().getHelpTopics()) {
String trimmedTopic = topic.getName().startsWith("/") ? topic.getName().substring(1) : topic.getName();
if (trimmedTopic.length() < searchString.length()) {
continue;
}
if (Character.toLowerCase(trimmedTopic.charAt(0)) != Character.toLowerCase(searchString.charAt(0))) {
continue;
}
if (damerauLevenshteinDistance(searchString, trimmedTopic.substring(0, searchString.length())) < maxDistance) {
possibleMatches.add(topic);
}
}
if (possibleMatches.size() > 0) {
return new IndexHelpTopic("Search", null, null, possibleMatches, "Search for: " + searchString);
} else {
return null;
}
}
/**
* Extracts a list of all general help topics from help.yml
*
* @return A list of general topics.
*/
public List<HelpTopic> getGeneralTopics() {
List<HelpTopic> topics = new LinkedList<HelpTopic>();
ConfigurationSection generalTopics = helpYaml.getConfigurationSection("general-topics");
if (generalTopics != null) {
for (String topicName : generalTopics.getKeys(false)) {
ConfigurationSection section = generalTopics.getConfigurationSection(topicName);
String shortText = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("shortText", ""));
String fullText = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("fullText", ""));
String permission = section.getString("permission", "");
topics.add(new CustomHelpTopic(topicName, shortText, fullText, permission));
}
}
return topics;
}
@Override
public String getFullText(CommandSender forWho) {
StringBuilder sb = new StringBuilder(shortText);
HelpTopic aliasForTopic = helpMap.getHelpTopic(aliasFor);
if (aliasForTopic != null) {
sb.append("\n");
sb.append(aliasForTopic.getFullText(forWho));
}
return sb.toString();
}
@Override
public boolean canSee(CommandSender commandSender) {
if (amendedPermission == null) {
HelpTopic aliasForTopic = helpMap.getHelpTopic(aliasFor);
if (aliasForTopic != null) {
return aliasForTopic.canSee(commandSender);
} else {
return false;
}
} else {
return commandSender.hasPermission(amendedPermission);
}
}
@Override
public String getFullText(final CommandSender forWho) {
final StringBuilder sb = new StringBuilder(shortText);
final HelpTopic aliasForTopic = helpMap.getHelpTopic(aliasFor);
if (aliasForTopic != null) {
sb.append("\n");
sb.append(aliasForTopic.getFullText(forWho));
}
return "" + sb.toString();
}
/**
* Extracts a list of all general help topics from help.yml
*
* @return A list of general topics.
*/
public List<HelpTopic> getGeneralTopics() {
List<HelpTopic> topics = new LinkedList<HelpTopic>();
ConfigurationSection generalTopics = helpYaml.getConfigurationSection("general-topics");
if (generalTopics != null) {
for (String topicName : generalTopics.getKeys(false)) {
ConfigurationSection section = generalTopics.getConfigurationSection(topicName);
String shortText = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("shortText", ""));
String fullText = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("fullText", ""));
String permission = section.getString("permission", "");
topics.add(new CustomHelpTopic(topicName, shortText, fullText, permission));
}
}
return topics;
}
@Override
public String getFullText(CommandSender forWho) {
StringBuilder sb = new StringBuilder(shortText);
HelpTopic aliasForTopic = helpMap.getHelpTopic(aliasFor);
if (aliasForTopic != null) {
sb.append("\n");
sb.append(aliasForTopic.getFullText(forWho));
}
return sb.toString();
}
@Override
public boolean canSee(CommandSender commandSender) {
if (amendedPermission == null) {
HelpTopic aliasForTopic = helpMap.getHelpTopic(aliasFor);
if (aliasForTopic != null) {
return aliasForTopic.canSee(commandSender);
} else {
return false;
}
} else {
return commandSender.hasPermission(amendedPermission);
}
}
@Override
public boolean execute(CommandSender sender, String currentAlias, String[] args) {
if (!testPermission(sender)) return true;
String command;
int pageNumber;
int pageHeight;
int pageWidth;
if (args.length == 0) {
command = "";
pageNumber = 1;
} else if (NumberUtils.isDigits(args[args.length - 1])) {
command = StringUtils.join(ArrayUtils.subarray(args, 0, args.length - 1), " ");
try {
pageNumber = NumberUtils.createInteger(args[args.length - 1]);
} catch (NumberFormatException exception) {
pageNumber = 1;
}
if (pageNumber <= 0) {
pageNumber = 1;
}
} else {
command = StringUtils.join(args, " ");
pageNumber = 1;
}
if (sender instanceof ConsoleCommandSender) {
pageHeight = ChatPaginator.UNBOUNDED_PAGE_HEIGHT;
pageWidth = ChatPaginator.UNBOUNDED_PAGE_WIDTH;
} else {
pageHeight = ChatPaginator.CLOSED_CHAT_PAGE_HEIGHT - 1;
pageWidth = ChatPaginator.GUARANTEED_NO_WRAP_CHAT_PAGE_WIDTH;
}
HelpMap helpMap = Bukkit.getServer().getHelpMap();
HelpTopic topic = helpMap.getHelpTopic(command);
if (topic == null) {
topic = helpMap.getHelpTopic("/" + command);
}
if (topic == null) {
topic = findPossibleMatches(command);
}
if (topic == null || !topic.canSee(sender)) {
sender.sendMessage(ChatColor.RED + "No help for " + command);
return true;
}
ChatPaginator.ChatPage page = ChatPaginator.paginate(topic.getFullText(sender), pageNumber, pageWidth, pageHeight);
StringBuilder header = new StringBuilder();
header.append(ChatColor.YELLOW);
header.append("--------- ");
header.append(ChatColor.WHITE);
header.append("Help: ");
header.append(topic.getName());
header.append(" ");
if (page.getTotalPages() > 1) {
header.append("(");
header.append(page.getPageNumber());
header.append("/");
header.append(page.getTotalPages());
header.append(") ");
}
header.append(ChatColor.YELLOW);
for (int i = header.length(); i < ChatPaginator.GUARANTEED_NO_WRAP_CHAT_PAGE_WIDTH; i++) {
header.append("-");
}
sender.sendMessage(header.toString());
sender.sendMessage(page.getLines());
return true;
}
public HelpTopic createTopic(MultipleCommandAlias multipleCommandAlias) {
return new MultipleCommandAliasHelpTopic(multipleCommandAlias);
}
public CustomIndexHelpTopic(HelpMap helpMap, String name, String shortText, String permission, List<String> futureTopics, String preamble) {
super(name, shortText, permission, new HashSet<HelpTopic>(), preamble);
this.helpMap = helpMap;
this.futureTopics = futureTopics;
}
@Override
public HelpTopic createTopic(BukkitCommand command) {
return new BukkitHelpTopic(command);
}
public HelpTopic createTopic(MultipleCommandAlias multipleCommandAlias) {
return new MultipleCommandAliasHelpTopic(multipleCommandAlias);
}
public CustomIndexHelpTopic(HelpMap helpMap, String name, String shortText, String permission, List<String> futureTopics, String preamble) {
super(name, shortText, permission, new HashSet<HelpTopic>(), preamble);
this.helpMap = helpMap;
this.futureTopics = futureTopics;
}