/** * 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 != null && 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<HelpTopic>((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<HelpTopic>((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(); }
@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(); }