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/TShock.cs b/TShockAPI/TShock.cs index 5ad00f95..2eb53c97 100644 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -59,7 +59,7 @@ namespace TShockAPI /// VersionNum - The version number the TerrariaAPI will return back to the API. We just use the Assembly info. public static readonly Version VersionNum = Assembly.GetExecutingAssembly().GetName().Version; /// VersionCodename - The version codename is displayed when the server starts. Inspired by software codenames conventions. - public static readonly string VersionCodename = "ζ Ori"; + public static readonly string VersionCodename = "Thank you, everyone, for your support of TShock all these years! <3"; /// SavePath - This is the path TShock saves its data in. This path is relative to the TerrariaServer.exe (not in ServerPlugins). public static string SavePath = "tshock"; diff --git a/TShockAPI/TShockAPI.csproj b/TShockAPI/TShockAPI.csproj index be3b637d..7bc42215 100644 --- a/TShockAPI/TShockAPI.csproj +++ b/TShockAPI/TShockAPI.csproj @@ -18,7 +18,7 @@ Also, be sure to release on github with the exact assembly version tag as below so that the update manager works correctly (via the Github releases api and mimic) --> - 5.1.2 + 5.1.3 TShock for Terraria Pryaxis & TShock Contributors TShockAPI 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/TShockLauncher/TShockLauncher.csproj b/TShockLauncher/TShockLauncher.csproj index 60558895..28709632 100644 --- a/TShockLauncher/TShockLauncher.csproj +++ b/TShockLauncher/TShockLauncher.csproj @@ -35,7 +35,7 @@ - + PreserveNewest true diff --git a/TerrariaServerAPI b/TerrariaServerAPI index 5ed35f37..e0e2df24 160000 --- a/TerrariaServerAPI +++ b/TerrariaServerAPI @@ -1 +1 @@ -Subproject commit 5ed35f3791e07b87a6e15320cd9e50803c5d50dd +Subproject commit e0e2df24dbc618683cc75595c59bf7f88acada08 diff --git a/docs/changelog.md b/docs/changelog.md index 6a65eecf..fa2610d2 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -80,6 +80,10 @@ Use past tense when adding new entries; sign your name off when you add or chang ## Upcoming changes * Your changes could be here! * Added `WorldTileProvider` to the tshock config with values `default`, `constileation` or `heaptile`. This allows tile providers to be changed in environments where CLI args cannot be altered. See the documentation website for more info about these providers. (@SignatureBeef) +* 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) ## TShock 5.1.2 * Added support for Terraria 1.4.4.8.1 via OTAPI 3.1.19. (@SignatureBeef)