diff --git a/TShockAPI/Localization/EnglishLanguage.cs b/TShockAPI/Localization/EnglishLanguage.cs
index 289ab4b5..1ec4ecea 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,16 @@ namespace TShockAPI.Localization
NpcNames.Add(i, Lang.GetNPCNameValue(i));
}
+ for (var i = 0; i < Terraria.ID.BuffID.Count; 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);
+ var i = (int)field.GetValue(null);
+ Prefixs.Add(i, Lang.prefix[i].Value);
}
}
finally
@@ -114,5 +122,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 1d0c880b..db5e9887 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 >= Terraria.ID.ItemID.Count)
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);
-
- for (int i = 1; i < Terraria.ID.ItemID.Count; i++)
+ var startswith = new List();
+ var contains = new List();
+ for (int i = 1; i < ItemID.Count; 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();
- for (int i = -17; i < Terraria.ID.NPCID.Count; i++)
+ var startswith = new List();
+ var contains = new List();
+ for (int i = -17; i < NPCID.Count; 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;
- for (int i = 1; i < Terraria.ID.BuffID.Count; i++)
+ var startswith = new List();
+ var contains = new List();
+ for (int i = 1; i < BuffID.Count; 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 < Terraria.ID.BuffID.Count; 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("✔|");
}
diff --git a/docs/changelog.md b/docs/changelog.md
index 6e045f2a..bef17eca 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -78,7 +78,7 @@ Use past tense when adding new entries; sign your name off when you add or chang
* If there is no section called "Upcoming changes" below this line, please add one with `## Upcoming changes` as the first line, and then a bulleted item directly after with the first change. -->
## Upcoming changes
-* Your changes could be here!
+* Updated the Utils.FindByIdOrName to follow same logic. Now fuzzy match fallback to `StartsWith` and then `Contains`. (@sgkoishi)
## TShock 5.1.3
* Added support for Terraria 1.4.4.9 via OTAPI 3.1.20. (@SignatureBeef)