diff --git a/Commands/CommandKeywords.cs b/Commands/CommandKeywords.cs index 9714d2930..29adb1af9 100644 --- a/Commands/CommandKeywords.cs +++ b/Commands/CommandKeywords.cs @@ -1,38 +1,40 @@ /* - Copyright 2011 MCGalaxy - - Dual-licensed under the Educational Community License, Version 2.0 and - the GNU General Public License, Version 3 (the "Licenses"); you may - not use this file except in compliance with the Licenses. You may - obtain a copy of the Licenses at - - http://www.opensource.org/licenses/ecl2.php - http://www.gnu.org/licenses/gpl-3.0.html - - Unless required by applicable law or agreed to in writing, - software distributed under the Licenses are distributed on an "AS IS" - BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - or implied. See the Licenses for the specific language governing - permissions and limitations under the Licenses. -*/ + Copyright 2011 MCGalaxy + + Dual-licensed under the Educational Community License, Version 2.0 and + the GNU General Public License, Version 3 (the "Licenses"); you may + not use this file except in compliance with the Licenses. You may + obtain a copy of the Licenses at + + http://www.opensource.org/licenses/ecl2.php + http://www.gnu.org/licenses/gpl-3.0.html + + Unless required by applicable law or agreed to in writing, + software distributed under the Licenses are distributed on an "AS IS" + BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + or implied. See the Licenses for the specific language governing + permissions and limitations under the Licenses. + */ +using System; using System.Collections.Generic; -namespace MCGalaxy.Commands -{ - public sealed class CommandKeywords - { + +namespace MCGalaxy.Commands { + + public sealed class CommandKeywords { public static List all = new List(); public Command Cmd; public string[] Keywords; - public CommandKeywords(Command cmd, string key) - { + const StringComparison comp = StringComparison.OrdinalIgnoreCase; + + public CommandKeywords(Command cmd, string key) { this.Cmd = cmd; string keyword = key + " " + cmd.name + " " + cmd.type; if (cmd.shortcut.Length > 3) { keyword += " " + cmd.shortcut; } this.Keywords = keyword.Split(' '); all.Add(this); } - public static void SetKeyWords() - { + + public static void SetKeyWords() { new CommandKeywords((new CmdAbort()), "command action mode"); new CommandKeywords((new CmdAbout()), "info block history grief"); new CommandKeywords((new CmdAdminChat()), "admin chat opchat"); @@ -271,55 +273,36 @@ namespace MCGalaxy.Commands new CommandKeywords((new CmdZombieGame()), "zombie game"); new CommandKeywords((new CmdZone()), "area"); } - public void Addcustom(Command cmd, string keywords) - { + + public void Addcustom(Command cmd, string keywords) { new CommandKeywords(cmd, keywords); } - public static string[] Find(string word) - { - List returnthing = new List(); - bool found = false; + + public static string[] Find(string word) { + if (word == "") return null; + List list = new List(); + foreach (CommandKeywords ckw in CommandKeywords.all) - { foreach (string key in ckw.Keywords) - { - if (word.ToLower().Contains(key.ToLower()) && word != "" && key != "") - { - found = true; - returnthing.Add(ckw.Cmd.name); - } - } + { + if (key == "" || key.IndexOf(word, comp) < 0) continue; + if (!list.Contains(ckw.Cmd.name)) list.Add(ckw.Cmd.name); } - if (!found) { return null; } - else { return returnthing.ToArray(); } + return list.Count == 0 ? null : list.ToArray(); } - public static string[] Find(string[] words) - { - List returnthing = CommandKeywords.all; - bool found = false; - foreach (string word in words) + + public static string[] Find(string[] words) { + List list = new List(); + + foreach (CommandKeywords ckw in CommandKeywords.all) + foreach (string key in ckw.Keywords) { - foreach (CommandKeywords ckw in returnthing.ToArray()) - { - bool del = true; - foreach (string key in ckw.Keywords) - { - if (word.ToLower().Contains(key.ToLower()) && word != "" && key != "") - { - del = false; - found = true; - } - } - if (del) { returnthing.Remove(ckw); } + for (int i = 0; i < words.Length; i++) { + if (key == "" || key.IndexOf(words[i], comp) < 0) continue; + if (!list.Contains(ckw.Cmd.name)) list.Add(ckw.Cmd.name); } } - if (!found) { return null; } - else - { - List k = new List(); - foreach (CommandKeywords ck in returnthing) { k.Add(ck.Cmd.name); } - return k.ToArray(); - } + return list.Count == 0 ? null : list.ToArray(); } } } diff --git a/Commands/Information/CmdSearch.cs b/Commands/Information/CmdSearch.cs index 6e80ab39c..310e4a4b8 100644 --- a/Commands/Information/CmdSearch.cs +++ b/Commands/Information/CmdSearch.cs @@ -53,29 +53,33 @@ namespace MCGalaxy.Commands { } static void SearchCommands(Player p, string keyword) { - bool mode = true; + if (keyword.Length <= 2) { + Player.SendMessage(p, "You need to enter at least three characters to search for."); return; + } string[] keywords = keyword.Split(' '); - string[] found = keywords.Length == 1 ? + string[] found = keywords.Length == 1 ? CommandKeywords.Find(keyword) : CommandKeywords.Find(keywords); if (found == null) { Player.SendMessage(p, "No commands found matching keyword(s): '" + keyword + "'"); return; } + StringBuilder cmds = new StringBuilder(); + bool mode = true; Player.SendMessage(p, "&bCommands found: "); foreach (string cmd in found) { - string code = mode ? "&2/" : "&9/"; - Player.SendMessage(p, code + cmd); + cmds.Append(mode ? "%S, &9" : "%S, &2").Append(cmd); mode = !mode; } + Player.SendMessage(p, cmds.ToString(4, cmds.Length - 4)); } static void SearchBlocks(Player p, string keyword) { - StringBuilder blocks = new StringBuilder(); + StringBuilder blocks = new StringBuilder(); bool mode = true; for (byte id = 0; id < 255; id++) { string name = Block.Name(id); if (name.ToLower() != "unknown" && name.Contains(keyword)) { - blocks.Append(mode ? "%S, &9" : "%S, &2").Append(name); + blocks.Append(mode ? "%S, &9" : "%S, &2").Append(name); mode = !mode; } } @@ -122,7 +126,7 @@ namespace MCGalaxy.Commands { foreach (FileInfo file in fi) { string level = file.Name.Replace(".lvl", ""); if (level.IndexOf(keyword, comp) >= 0) - searched.Append(", ").Append(level); + searched.Append(", ").Append(level); } if (searched.Length == 0) { Player.SendMessage(p, "No levels found containing &b" + keyword); return; }