Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-18 20:40:08 +01:00
[Bleeding] Added support for color codes in help.yml. Addresses BUKKIT-1191
Dieser Commit ist enthalten in:
Ursprung
46429c6cb9
Commit
4589e943f6
@ -9,17 +9,34 @@ import java.util.Comparator;
|
|||||||
* that start with a slash come after topics that don't.
|
* that start with a slash come after topics that don't.
|
||||||
*/
|
*/
|
||||||
public class HelpTopicComparator implements Comparator<HelpTopic> {
|
public class HelpTopicComparator implements Comparator<HelpTopic> {
|
||||||
private TopicNameComparator tnc = new TopicNameComparator();
|
|
||||||
|
// Singleton implementations
|
||||||
|
private static final TopicNameComparator tnc = new TopicNameComparator();
|
||||||
|
public static TopicNameComparator topicNameComparatorInstance() {
|
||||||
|
return tnc;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final HelpTopicComparator htc = new HelpTopicComparator();
|
||||||
|
public static HelpTopicComparator helpTopicComparatorInstance() {
|
||||||
|
return htc;
|
||||||
|
}
|
||||||
|
|
||||||
|
private HelpTopicComparator() {}
|
||||||
|
|
||||||
public int compare(HelpTopic lhs, HelpTopic rhs) {
|
public int compare(HelpTopic lhs, HelpTopic rhs) {
|
||||||
return tnc.compare(lhs.getName(), rhs.getName());
|
return tnc.compare(lhs.getName(), rhs.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class TopicNameComparator implements Comparator<String> {
|
public static class TopicNameComparator implements Comparator<String> {
|
||||||
|
private TopicNameComparator(){}
|
||||||
|
|
||||||
public int compare(String lhs, String rhs) {
|
public int compare(String lhs, String rhs) {
|
||||||
if (lhs.startsWith("/") && !rhs.startsWith("/")) {
|
boolean lhsStartSlash = lhs.startsWith("/");
|
||||||
|
boolean rhsStartSlash = rhs.startsWith("/");
|
||||||
|
|
||||||
|
if (lhsStartSlash && !rhsStartSlash) {
|
||||||
return 1;
|
return 1;
|
||||||
} else if (!lhs.startsWith("/") && rhs.startsWith("/")) {
|
} else if (!lhsStartSlash && rhsStartSlash) {
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
return lhs.compareToIgnoreCase(rhs);
|
return lhs.compareToIgnoreCase(rhs);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package org.bukkit.craftbukkit.help;
|
package org.bukkit.craftbukkit.help;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
@ -16,7 +17,8 @@ import java.util.logging.Level;
|
|||||||
*/
|
*/
|
||||||
public class HelpYamlReader {
|
public class HelpYamlReader {
|
||||||
|
|
||||||
private YamlConfiguration helpYaml;
|
private final YamlConfiguration helpYaml;
|
||||||
|
private final char ALT_COLOR_CODE = '&';
|
||||||
|
|
||||||
public HelpYamlReader(Server server) {
|
public HelpYamlReader(Server server) {
|
||||||
File helpYamlFile = new File("help.yml");
|
File helpYamlFile = new File("help.yml");
|
||||||
@ -43,8 +45,8 @@ public class HelpYamlReader {
|
|||||||
if (generalTopics != null) {
|
if (generalTopics != null) {
|
||||||
for (String topicName : generalTopics.getKeys(false)) {
|
for (String topicName : generalTopics.getKeys(false)) {
|
||||||
ConfigurationSection section = generalTopics.getConfigurationSection(topicName);
|
ConfigurationSection section = generalTopics.getConfigurationSection(topicName);
|
||||||
String shortText = section.getString("shortText");
|
String shortText = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("shortText"));
|
||||||
String fullText = section.getString("fullText");
|
String fullText = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("fullText"));
|
||||||
String permission = section.getString("permission");
|
String permission = section.getString("permission");
|
||||||
topics.add(new CustomHelpTopic(topicName, shortText, fullText, permission));
|
topics.add(new CustomHelpTopic(topicName, shortText, fullText, permission));
|
||||||
}
|
}
|
||||||
@ -62,8 +64,8 @@ public class HelpYamlReader {
|
|||||||
if (commandTopics != null) {
|
if (commandTopics != null) {
|
||||||
for (String topicName : commandTopics.getKeys(false)) {
|
for (String topicName : commandTopics.getKeys(false)) {
|
||||||
ConfigurationSection section = commandTopics.getConfigurationSection(topicName);
|
ConfigurationSection section = commandTopics.getConfigurationSection(topicName);
|
||||||
String description = section.getString("shortText");
|
String description = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("shortText"));
|
||||||
String usage = section.getString("fullText");
|
String usage = ChatColor.translateAlternateColorCodes(ALT_COLOR_CODE, section.getString("fullText"));
|
||||||
String permission = section.getString("permission");
|
String permission = section.getString("permission");
|
||||||
amendments.add(new HelpTopicAmendment(topicName, description, usage, permission));
|
amendments.add(new HelpTopicAmendment(topicName, description, usage, permission));
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,6 @@ import org.bukkit.command.defaults.VanillaCommand;
|
|||||||
import org.bukkit.craftbukkit.CraftServer;
|
import org.bukkit.craftbukkit.CraftServer;
|
||||||
import org.bukkit.help.*;
|
import org.bukkit.help.*;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -18,16 +17,16 @@ import java.util.*;
|
|||||||
*/
|
*/
|
||||||
public class SimpleHelpMap implements HelpMap {
|
public class SimpleHelpMap implements HelpMap {
|
||||||
|
|
||||||
private HelpTopic defaultTopic;
|
private final HelpTopic defaultTopic;
|
||||||
private Map<String, HelpTopic> helpTopics;
|
private final Map<String, HelpTopic> helpTopics;
|
||||||
private Set<HelpTopic> pluginIndexes;
|
private final Set<HelpTopic> pluginIndexes;
|
||||||
private Map<Class, HelpTopicFactory<Command>> topicFactoryMap;
|
private final Map<Class, HelpTopicFactory<Command>> topicFactoryMap;
|
||||||
private CraftServer server;
|
private final CraftServer server;
|
||||||
private HelpYamlReader yaml;
|
private HelpYamlReader yaml;
|
||||||
|
|
||||||
public SimpleHelpMap(CraftServer server) {
|
public SimpleHelpMap(CraftServer server) {
|
||||||
this.helpTopics = new TreeMap<String, HelpTopic>(new HelpTopicComparator.TopicNameComparator()); // Using a TreeMap for its explicit sorting on key
|
this.helpTopics = new TreeMap<String, HelpTopic>(HelpTopicComparator.topicNameComparatorInstance()); // Using a TreeMap for its explicit sorting on key
|
||||||
this.pluginIndexes = new TreeSet<HelpTopic>(new HelpTopicComparator());
|
this.pluginIndexes = new TreeSet<HelpTopic>(HelpTopicComparator.helpTopicComparatorInstance());
|
||||||
this.topicFactoryMap = new HashMap<Class, HelpTopicFactory<Command>>();
|
this.topicFactoryMap = new HashMap<Class, HelpTopicFactory<Command>>();
|
||||||
this.server = server;
|
this.server = server;
|
||||||
this.yaml = new HelpYamlReader(server);
|
this.yaml = new HelpYamlReader(server);
|
||||||
@ -77,6 +76,8 @@ public class SimpleHelpMap implements HelpMap {
|
|||||||
* Reads the general topics from help.yml and adds them to the help index.
|
* Reads the general topics from help.yml and adds them to the help index.
|
||||||
*/
|
*/
|
||||||
public synchronized void initializeGeneralTopics() {
|
public synchronized void initializeGeneralTopics() {
|
||||||
|
yaml = new HelpYamlReader(server);
|
||||||
|
|
||||||
// Initialize general help topics from the help.yml file
|
// Initialize general help topics from the help.yml file
|
||||||
for (HelpTopic topic : yaml.getGeneralTopics()) {
|
for (HelpTopic topic : yaml.getGeneralTopics()) {
|
||||||
addTopic(topic);
|
addTopic(topic);
|
||||||
@ -88,7 +89,7 @@ public class SimpleHelpMap implements HelpMap {
|
|||||||
*/
|
*/
|
||||||
public synchronized void initializeCommands() {
|
public synchronized void initializeCommands() {
|
||||||
// ** Load topics from highest to lowest priority order **
|
// ** Load topics from highest to lowest priority order **
|
||||||
List<String> ignoredPlugins = yaml.getIgnoredPlugins();
|
Set<String> ignoredPlugins = new HashSet<String>(yaml.getIgnoredPlugins());
|
||||||
|
|
||||||
// Initialize help topics from the server's command map
|
// Initialize help topics from the server's command map
|
||||||
outer: for (Command command : server.getCommandMap().getCommands()) {
|
outer: for (Command command : server.getCommandMap().getCommands()) {
|
||||||
@ -159,7 +160,7 @@ public class SimpleHelpMap implements HelpMap {
|
|||||||
HelpTopic topic = getHelpTopic("/" + command.getLabel());
|
HelpTopic topic = getHelpTopic("/" + command.getLabel());
|
||||||
if (topic != null) {
|
if (topic != null) {
|
||||||
if (!pluginIndexes.containsKey(pluginName)) {
|
if (!pluginIndexes.containsKey(pluginName)) {
|
||||||
pluginIndexes.put(pluginName, new TreeSet<HelpTopic>(new HelpTopicComparator())); //keep things in topic order
|
pluginIndexes.put(pluginName, new TreeSet<HelpTopic>(HelpTopicComparator.helpTopicComparatorInstance())); //keep things in topic order
|
||||||
}
|
}
|
||||||
pluginIndexes.get(pluginName).add(topic);
|
pluginIndexes.get(pluginName).add(topic);
|
||||||
}
|
}
|
||||||
@ -177,7 +178,7 @@ public class SimpleHelpMap implements HelpMap {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean commandInIgnoredPlugin(Command command, List<String> ignoredPlugins) {
|
private boolean commandInIgnoredPlugin(Command command, Set<String> ignoredPlugins) {
|
||||||
if ((command instanceof BukkitCommand || command instanceof VanillaCommand) && ignoredPlugins.contains("Bukkit")) {
|
if ((command instanceof BukkitCommand || command instanceof VanillaCommand) && ignoredPlugins.contains("Bukkit")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -196,7 +197,7 @@ public class SimpleHelpMap implements HelpMap {
|
|||||||
|
|
||||||
private class IsCommandTopicPredicate implements Predicate<HelpTopic> {
|
private class IsCommandTopicPredicate implements Predicate<HelpTopic> {
|
||||||
|
|
||||||
public boolean apply(@Nullable HelpTopic topic) {
|
public boolean apply(HelpTopic topic) {
|
||||||
return topic.getName().charAt(0) == '/';
|
return topic.getName().charAt(0) == '/';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,36 +1,37 @@
|
|||||||
# This is the help configuration file for Bukkit.
|
# This is the help configuration file for Bukkit.
|
||||||
|
#
|
||||||
# By default you do not need to modify this file. Help topics for all plugin commands are automatically provided by
|
# By default you do not need to modify this file. Help topics for all plugin commands are automatically provided by
|
||||||
# or extracted from your installed plugins. You only need to modify this file if you wish to add new help pages to
|
# or extracted from your installed plugins. You only need to modify this file if you wish to add new help pages to
|
||||||
# your server or override the help pages of existing plugin commands.
|
# your server or override the help pages of existing plugin commands.
|
||||||
# --
|
#
|
||||||
# This file is divided up into the following parts:
|
# This file is divided up into the following parts:
|
||||||
# -- general-topics: lists admin defined topics
|
# -- general-topics: lists admin defined topics
|
||||||
# -- amend-topics: lists topic amendments to apply to existing help topics
|
# -- amend-topics: lists topic amendments to apply to existing help topics
|
||||||
# -- ignore-plugins: lists any plugins that should be excluded from help
|
# -- ignore-plugins: lists any plugins that should be excluded from help
|
||||||
# general-topics and command-topics respectively.
|
#
|
||||||
# Examples are given below. Color codes are allowed. When amending command topic, the string <text> will be replaced
|
# Examples are given below. When amending command topic, the string <text> will be replaced with the existing value
|
||||||
# with the existing value in the help topic.
|
# in the help topic. Color codes can be used in topic text. The color code character is & followed by 0-F.
|
||||||
# --
|
#
|
||||||
# Set this to true to list the individual command help topics in the master help.
|
# Set this to true to list the individual command help topics in the master help.
|
||||||
# command-topics-in-master-index: true
|
# command-topics-in-master-index: true
|
||||||
# --
|
#
|
||||||
# Each general topic will show up as a separate topic in the help index along with all the plugin command topics.
|
# Each general topic will show up as a separate topic in the help index along with all the plugin command topics.
|
||||||
# general-topics:
|
# general-topics:
|
||||||
# rules:
|
# rules:
|
||||||
# shortText: Rules of the server
|
# shortText: Rules of the server
|
||||||
# fullText: |
|
# fullText: |
|
||||||
# 1. Be kind to your fellow players.
|
# &61. Be kind to your fellow players.
|
||||||
# 2. No griefing.
|
# &B2. No griefing.
|
||||||
# 3. No swearing.
|
# &D3. No swearing.
|
||||||
# permission: topics.rules
|
# permission: topics.rules
|
||||||
# --
|
#
|
||||||
# Topic amendments are used to change the content of automatically generated plugin command topics.
|
# Topic amendments are used to change the content of automatically generated plugin command topics.
|
||||||
# amended-topics:
|
# amended-topics:
|
||||||
# /stop:
|
# /stop:
|
||||||
# shortText: Stops the server cold....in its tracks!
|
# shortText: Stops the server cold....in its tracks!
|
||||||
# fullText: <text> - This kills the server.
|
# fullText: <text> - This kills the server.
|
||||||
# permission: you.dont.have
|
# permission: you.dont.have
|
||||||
# --
|
#
|
||||||
# Any plugin in the ignored plugins list will be excluded from help. The name must match the name displayed by
|
# Any plugin in the ignored plugins list will be excluded from help. The name must match the name displayed by
|
||||||
# the /plugins command. Ignore "Bukkit" to remove the standard bukkit commands from the index.
|
# the /plugins command. Ignore "Bukkit" to remove the standard bukkit commands from the index.
|
||||||
# ignore-plugins:
|
# ignore-plugins:
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren