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

org.bukkit.craftbukkit.help.HelpYamlReader Maven / Gradle / Ivy

package org.bukkit.craftbukkit.help;

import com.google.common.base.Charsets;
import org.bukkit.ChatColor;
import org.bukkit.Server;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.help.HelpTopic;

import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;

/**
 * HelpYamlReader is responsible for processing the contents of the help.yml file.
 */
public class HelpYamlReader {

  private final char ALT_COLOR_CODE = '&';
  private final Server server;
  private YamlConfiguration helpYaml;

  public HelpYamlReader(Server server) {
    this.server = server;

    File helpYamlFile = new File("help.yml");
    YamlConfiguration defaultConfig = YamlConfiguration.loadConfiguration(new InputStreamReader(getClass().getClassLoader().getResourceAsStream("configurations/help.yml"), Charsets.UTF_8));

    try {
      helpYaml = YamlConfiguration.loadConfiguration(helpYamlFile);
      helpYaml.options().copyDefaults(true);
      helpYaml.setDefaults(defaultConfig);

      try {
        if (!helpYamlFile.exists()) {
          helpYaml.save(helpYamlFile);
        }
      } catch (IOException ex) {
        server.getLogger().log(Level.SEVERE, "Could not save " + helpYamlFile, ex);
      }
    } catch (Exception ex) {
      server.getLogger().severe("Failed to load help.yml. Verify the yaml indentation is correct. Reverting to default help.yml.");
      helpYaml = defaultConfig;
    }
  }

  /**
   * Extracts a list of all general help topics from help.yml
   *
   * @return A list of general topics.
   */
  public List getGeneralTopics() {
    List topics = new LinkedList();
    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;
  }

  /**
   * Extracts a list of all index topics from help.yml
   *
   * @return A list of index topics.
   */
  public List getIndexTopics() {
    List topics = new LinkedList();
    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 commands = section.getStringList("commands");
        topics.add(new CustomIndexHelpTopic(server.getHelpMap(), topicName, shortText, permission, commands, preamble));
      }
    }
    return topics;
  }

  /**
   * Extracts a list of topic amendments from help.yml
   *
   * @return A list of amendments.
   */
  public List getTopicAmendments() {
    List amendments = new LinkedList();
    ConfigurationSection commandTopics = helpYaml.getConfigurationSection("amended-topics");
    if (commandTopics != null) {
      for (String topicName : commandTopics.getKeys(false)) {
        ConfigurationSection section = commandTopics.getConfigurationSection(topicName);
        String description = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("shortText", ""));
        String usage = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("fullText", ""));
        String permission = section.getString("permission", "");
        amendments.add(new HelpTopicAmendment(topicName, description, usage, permission));
      }
    }
    return amendments;
  }

  public List getIgnoredPlugins() {
    return helpYaml.getStringList("ignore-plugins");
  }

  public boolean commandTopicsInMasterIndex() {
    return helpYaml.getBoolean("command-topics-in-master-index", true);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy