diff --git a/TShockAPI/Localization/EnglishLanguage.cs b/TShockAPI/Localization/EnglishLanguage.cs index 81c8b933..874d2c94 100644 --- a/TShockAPI/Localization/EnglishLanguage.cs +++ b/TShockAPI/Localization/EnglishLanguage.cs @@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -using System; +using System; using System.Collections.Generic; using System.Linq; using Terraria; @@ -35,6 +35,8 @@ namespace TShockAPI.Localization private static readonly Dictionary Prefixs = new Dictionary(); + private static readonly Dictionary Buffs = new Dictionary(); + internal static void Initialize() { var culture = Language.ActiveCulture; @@ -58,10 +60,15 @@ namespace TShockAPI.Localization NpcNames.Add(i, Lang.GetNPCNameValue(i)); } + for (var i = -17; i < Main.maxBuffTypes; i++) + { + Buffs.Add(i, Lang.GetBuffName(i)); + } + foreach (var field in typeof(Main).Assembly.GetType("Terraria.ID.PrefixID") .GetFields().Where(f => !f.Name.Equals("Count", StringComparison.Ordinal))) { - Prefixs.Add((int) field.GetValue(null), field.Name); + Prefixs.Add((int)field.GetValue(null), field.Name); } } finally @@ -114,5 +121,19 @@ namespace TShockAPI.Localization return null; } + + /// + /// Get buff name in English + /// + /// Buff Id + /// Buff name in English + public static string GetBuffNameById(int id) + { + string buff; + if (Buffs.TryGetValue(id, out buff)) + return buff; + + return null; + } } } diff --git a/TShockAPI/Utils.cs b/TShockAPI/Utils.cs index bf63958f..99140ee7 100644 --- a/TShockAPI/Utils.cs +++ b/TShockAPI/Utils.cs @@ -81,7 +81,7 @@ namespace TShockAPI private static readonly Utils instance = new Utils(); /// Utils - Creates a utilities object. - private Utils() {} + private Utils() { } /// Instance - An instance of the utils class. /// value - the Utils instance @@ -210,8 +210,8 @@ namespace TShockAPI tileY = startTileY; break; } - tileX = startTileX + r.Next(tileXRange*-1, tileXRange); - tileY = startTileY + r.Next(tileYRange*-1, tileYRange); + tileX = startTileX + r.Next(tileXRange * -1, tileXRange); + tileY = startTileY + r.Next(tileYRange * -1, tileYRange); j++; } while (TilePlacementValid(tileX, tileY) && TileSolid(tileX, tileY)); } @@ -253,7 +253,7 @@ namespace TShockAPI { if (type >= Main.maxItemTypes) return new List(); - return new List {GetItemById(type)}; + return new List { GetItemById(type) }; } Item item = GetItemFromTag(text); if (item != null) @@ -280,37 +280,35 @@ namespace TShockAPI /// List of Items public List GetItemByName(string name) { - var found = new List(); - Item item = new Item(); - string nameLower = name.ToLowerInvariant(); - var checkEnglish = Language.ActiveCulture != GameCulture.FromCultureName(GameCulture.CultureName.English); - + var startswith = new List(); + var contains = new List(); for (int i = 1; i < Main.maxItemTypes; i++) { - item.netDefaults(i); - if (!String.IsNullOrWhiteSpace(item.Name)) + var currentName = Lang.GetItemNameValue(i); + if (!string.IsNullOrEmpty(currentName)) { - if (item.Name.ToLowerInvariant() == nameLower) - return new List { item }; - if (item.Name.ToLowerInvariant().StartsWith(nameLower)) - found.Add(item.Clone()); + if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase)) + return new List { GetItemById(i) }; + if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase)) + startswith.Add(i); + else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase)) + contains.Add(i); } - - if (!checkEnglish) + currentName = EnglishLanguage.GetItemNameById(i); + if (!string.IsNullOrEmpty(currentName)) { - continue; - } - - string englishName = EnglishLanguage.GetItemNameById(i).ToLowerInvariant(); - if (!String.IsNullOrEmpty(englishName)) - { - if (englishName == nameLower) - return new List { item }; - if (englishName.StartsWith(nameLower)) - found.Add(item.Clone()); + if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase)) + return new List { GetItemById(i) }; + if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase)) + startswith.Add(i); + else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase)) + contains.Add(i); } } - return found; + + if (startswith.Count != 1) + startswith.AddRange(contains); + return startswith.Select(GetItemById).ToList(); } /// @@ -369,22 +367,35 @@ namespace TShockAPI /// List of matching NPCs public List GetNPCByName(string name) { - var found = new List(); - NPC npc = new NPC(); - string nameLower = name.ToLowerInvariant(); + var startswith = new List(); + var contains = new List(); for (int i = -17; i < Main.maxNPCTypes; i++) { - string englishName = EnglishLanguage.GetNpcNameById(i).ToLowerInvariant(); - - npc.SetDefaults(i); - if (npc.FullName.ToLowerInvariant() == nameLower || npc.TypeName.ToLowerInvariant() == nameLower - || nameLower == englishName) - return new List { npc }; - if (npc.FullName.ToLowerInvariant().StartsWith(nameLower) || npc.TypeName.ToLowerInvariant().StartsWith(nameLower) - || englishName?.StartsWith(nameLower) == true) - found.Add((NPC)npc.Clone()); + var currentName = Lang.GetNPCNameValue(i); + if (!string.IsNullOrEmpty(currentName)) + { + if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase)) + return new List { GetNPCById(i) }; + if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase)) + startswith.Add(i); + else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase)) + contains.Add(i); + } + currentName = EnglishLanguage.GetNpcNameById(i); + if (!string.IsNullOrEmpty(currentName)) + { + if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase)) + return new List { GetNPCById(i) }; + if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase)) + startswith.Add(i); + else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase)) + contains.Add(i); + } } - return found; + + if (startswith.Count != 1) + startswith.AddRange(contains); + return startswith.Select(GetNPCById).ToList(); } /// @@ -414,22 +425,35 @@ namespace TShockAPI /// Matching list of buff ids public List GetBuffByName(string name) { - string nameLower = name.ToLower(); - string buffname; + var startswith = new List(); + var contains = new List(); for (int i = 1; i < Main.maxBuffTypes; i++) { - buffname = Lang.GetBuffName(i); - if (!String.IsNullOrWhiteSpace(buffname) && buffname.ToLower() == nameLower) - return new List {i}; + var currentName = Lang.GetBuffName(i); + if (!string.IsNullOrWhiteSpace(currentName)) + { + if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase)) + return new List { i }; + if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase)) + startswith.Add(i); + else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase)) + contains.Add(i); + } + currentName = EnglishLanguage.GetBuffNameById(i); + if (!string.IsNullOrWhiteSpace(currentName)) + { + if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase)) + return new List { i }; + if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase)) + startswith.Add(i); + else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase)) + contains.Add(i); + } } - var found = new List(); - for (int i = 1; i < Main.maxBuffTypes; i++) - { - buffname = Lang.GetBuffName(i); - if (!String.IsNullOrWhiteSpace(buffname) && buffname.ToLower().StartsWith(nameLower)) - found.Add(i); - } - return found; + + if (startswith.Count != 1) + startswith.AddRange(contains); + return startswith; } /// @@ -449,24 +473,38 @@ namespace TShockAPI /// List of prefix IDs public List GetPrefixByName(string name) { - Item item = new Item(); - item.SetDefaults(0); - string lowerName = name.ToLowerInvariant(); - var found = new List(); + var startswith = new List(); + var contains = new List(); for (int i = FirstItemPrefix; i <= LastItemPrefix; i++) { - item.prefix = (byte)i; - string prefixName = item.AffixName().Trim().ToLowerInvariant(); - string englishName = EnglishLanguage.GetPrefixById(i).ToLowerInvariant(); - if (prefixName == lowerName || englishName == lowerName) - return new List() { i }; - else if (prefixName.StartsWith(lowerName) || englishName?.StartsWith(lowerName) == true) // Partial match - found.Add(i); + var currentName = Lang.prefix[i].ToString(); + if (!string.IsNullOrWhiteSpace(currentName)) + { + if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase)) + return new List { i }; + if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase)) + startswith.Add(i); + else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase)) + contains.Add(i); + } + currentName = EnglishLanguage.GetPrefixById(i); + if (!string.IsNullOrWhiteSpace(currentName)) + { + if (currentName.Equals(name, StringComparison.InvariantCultureIgnoreCase)) + return new List { i }; + if (currentName.StartsWith(name, StringComparison.InvariantCultureIgnoreCase)) + startswith.Add(i); + else if (currentName.Contains(name, StringComparison.InvariantCultureIgnoreCase)) + contains.Add(i); + } } - return found; + + if (startswith.Count != 1) + startswith.AddRange(contains); + return startswith; } - /// + /// /// Gets a prefix by ID or name /// /// ID or name @@ -476,7 +514,7 @@ namespace TShockAPI int type = -1; if (int.TryParse(idOrName, out type) && type >= FirstItemPrefix && type <= LastItemPrefix) { - return new List {type}; + return new List { type }; } return GetPrefixByName(idOrName); } @@ -961,7 +999,7 @@ namespace TShockAPI internal void PrepareLangForDump() { - for(int i = 0; i < Main.recipe.Length; i++) + for (int i = 0; i < Main.recipe.Length; i++) Main.recipe[i] = new Recipe(); } @@ -993,12 +1031,12 @@ namespace TShockAPI foreach (var field in typeof(Permissions).GetFields().OrderBy(f => f.Name)) { output.Append("|[["); - output.Append((string) field.GetValue(null)); + output.Append((string)field.GetValue(null)); output.Append("]]|"); foreach (Group g in TShock.Groups.groups) { - if (g.HasPermission((string) field.GetValue(null))) + if (g.HasPermission((string)field.GetValue(null))) { output.Append("✔|"); }