1 package org.bukkit.command.defaults;
3 import java.util.ArrayList;
4 import java.util.HashMap;
8 import java.util.TreeSet;
10 import org.apache.commons.lang.ArrayUtils;
11 import org.apache.commons.lang.StringUtils;
12 import org.apache.commons.lang.Validate;
13 import org.apache.commons.lang.math.NumberUtils;
14 import org.bukkit.Bukkit;
15 import org.bukkit.ChatColor;
16 import org.bukkit.command.CommandSender;
17 import org.bukkit.command.ConsoleCommandSender;
18 import org.bukkit.help.HelpMap;
19 import org.bukkit.help.HelpTopic;
20 import org.bukkit.help.HelpTopicComparator;
21 import org.bukkit.help.IndexHelpTopic;
22 import org.bukkit.util.ChatPaginator;
24 import com.google.common.collect.ImmutableList;
30 this.
usageMessage =
"/help <pageNumber>\n/help <topic>\n/help <topic> <pageNumber>";
43 if (args.length == 0) {
46 }
else if (NumberUtils.isDigits(args[args.length - 1])) {
47 command = StringUtils.join(ArrayUtils.subarray(args, 0, args.length - 1),
" ");
49 pageNumber = NumberUtils.createInteger(args[args.length - 1]);
50 }
catch (NumberFormatException exception) {
53 if (pageNumber <= 0) {
57 command = StringUtils.join(args,
" ");
80 if (topic == null || !topic.
canSee(sender)) {
87 StringBuilder header =
new StringBuilder();
89 header.append(
"--------- ");
91 header.append(
"Help: ");
94 if (page.getTotalPages() > 1) {
96 header.append(page.getPageNumber());
98 header.append(page.getTotalPages());
114 return input.equalsIgnoreCase(
"help") || input.equalsIgnoreCase(
"?");
119 Validate.notNull(sender,
"Sender cannot be null");
120 Validate.notNull(args,
"Arguments cannot be null");
121 Validate.notNull(alias,
"Alias cannot be null");
123 if (args.length == 1) {
124 List<String> matchedTopics =
new ArrayList<String>();
125 String searchString = args[0];
127 String trimmedTopic = topic.getName().startsWith(
"/") ? topic.getName().substring(1) : topic.getName();
129 if (trimmedTopic.startsWith(searchString)) {
130 matchedTopics.add(trimmedTopic);
133 return matchedTopics;
135 return ImmutableList.of();
139 int maxDistance = (searchString.length() / 5) + 3;
142 if (searchString.startsWith(
"/")) {
143 searchString = searchString.substring(1);
147 String trimmedTopic = topic.
getName().startsWith(
"/") ? topic.getName().substring(1) : topic.getName();
149 if (trimmedTopic.length() < searchString.length()) {
153 if (Character.toLowerCase(trimmedTopic.charAt(0)) != Character.toLowerCase(searchString.charAt(0))) {
158 possibleMatches.add(topic);
162 if (possibleMatches.size() > 0) {
163 return new IndexHelpTopic(
"Search", null, null, possibleMatches,
"Search for: " + searchString);
179 if (s1 == null && s2 == null) {
182 if (s1 != null && s2 == null) {
185 if (s1 == null && s2 != null) {
189 int s1Len = s1.length();
190 int s2Len = s2.length();
191 int[][] H =
new int[s1Len + 2][s2Len + 2];
193 int INF = s1Len + s2Len;
195 for (
int i = 0; i <= s1Len; i++) {
199 for (
int j = 0; j <= s2Len; j++) {
204 Map<Character, Integer> sd =
new HashMap<Character, Integer>();
205 for (
char Letter : (s1 + s2).toCharArray()) {
206 if (!sd.containsKey(Letter)) {
211 for (
int i = 1; i <= s1Len; i++) {
213 for (
int j = 1; j <= s2Len; j++) {
214 int i1 = sd.get(s2.charAt(j - 1));
217 if (s1.charAt(i - 1) == s2.charAt(j - 1)) {
218 H[i + 1][j + 1] = H[i][j];
221 H[i + 1][j + 1] = Math.min(H[i][j], Math.min(H[i + 1][j], H[i][j + 1])) + 1;
224 H[i + 1][j + 1] = Math.min(H[i + 1][j + 1], H[i1][j1] + (i - i1 - 1) + 1 + (j - j1 - 1));
226 sd.put(s1.charAt(i - 1), i);
229 return H[s1Len + 1][s2Len + 1];