All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bukkit.help.IndexHelpTopic Maven / Gradle / Ivy

package org.bukkit.help;

import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.util.ChatPaginator;

import java.util.Collection;

/**
 * This help topic generates a list of other help topics. This class is useful
 * for adding your own index help topics. To enforce a particular order, use a
 * sorted collection.
 * 

* If a preamble is provided to the constructor, that text will be displayed * before the first item in the index. */ public class IndexHelpTopic extends HelpTopic { protected String permission; protected String preamble; protected Collection allTopics; public IndexHelpTopic(String name, String shortText, String permission, Collection topics) { this(name, shortText, permission, topics, null); } public IndexHelpTopic(String name, String shortText, String permission, Collection topics, String preamble) { this.name = name; this.shortText = shortText; this.permission = permission; this.preamble = preamble; setTopicsCollection(topics); } /** * Sets the contents of the internal allTopics collection. * * @param topics The topics to set. */ protected void setTopicsCollection(Collection topics) { this.allTopics = topics; } public boolean canSee(CommandSender sender) { if (sender instanceof ConsoleCommandSender) { return true; } if (permission == null) { return true; } return sender.hasPermission(permission); } @Override public void amendCanSee(String amendedPermission) { permission = amendedPermission; } public String getFullText(CommandSender sender) { StringBuilder sb = new StringBuilder(); if (preamble != null) { sb.append(buildPreamble(sender)); sb.append("\n"); } for (HelpTopic topic : allTopics) { if (topic.canSee(sender)) { String lineStr = buildIndexLine(sender, topic).replace("\n", ". "); if (sender instanceof Player && lineStr.length() > ChatPaginator.GUARANTEED_NO_WRAP_CHAT_PAGE_WIDTH) { sb.append(lineStr, 0, ChatPaginator.GUARANTEED_NO_WRAP_CHAT_PAGE_WIDTH - 3); sb.append("..."); } else { sb.append(lineStr); } sb.append("\n"); } } return sb.toString(); } /** * Builds the topic preamble. Override this method to change how the index * preamble looks. * * @param sender The command sender requesting the preamble. * @return The topic preamble. */ protected String buildPreamble(CommandSender sender) { return ChatColor.GRAY + preamble; } /** * Builds individual lines in the index topic. Override this method to * change how index lines are rendered. * * @param sender The command sender requesting the index line. * @param topic The topic to render into an index line. * @return The rendered index line. */ protected String buildIndexLine(CommandSender sender, HelpTopic topic) { StringBuilder line = new StringBuilder(); line.append(ChatColor.GOLD); line.append(topic.getName()); line.append(": "); line.append(ChatColor.WHITE); line.append(topic.getShortText()); return line.toString(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy