From 8df09cb4a8a8707524390265744e61e3dbe690c6 Mon Sep 17 00:00:00 2001 From: Cai <13110818005@qq.com> Date: Wed, 31 Jul 2024 19:11:50 +0800 Subject: [PATCH] fix: /help, /me, and /p commands can't work in non-English languages --- TShockAPI/Localization/EnglishLanguage.cs | 26 +++++++++++++++++++++++ TShockAPI/TShock.cs | 4 ++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/TShockAPI/Localization/EnglishLanguage.cs b/TShockAPI/Localization/EnglishLanguage.cs index 1ec4ecea..97507141 100644 --- a/TShockAPI/Localization/EnglishLanguage.cs +++ b/TShockAPI/Localization/EnglishLanguage.cs @@ -20,7 +20,9 @@ using System; using System.Collections.Generic; using System.Linq; using Terraria; +using Terraria.Initializers; using Terraria.Localization; +using Terraria.UI.Chat; namespace TShockAPI.Localization { @@ -37,6 +39,8 @@ namespace TShockAPI.Localization private static readonly Dictionary Buffs = new Dictionary(); + private static readonly Dictionary VanillaCommands = new Dictionary(); + internal static void Initialize() { var culture = Language.ActiveCulture; @@ -71,6 +75,15 @@ namespace TShockAPI.Localization var i = (int)field.GetValue(null); Prefixs.Add(i, Lang.prefix[i].Value); } + + ChatInitializer.Load(); + foreach (var command in ChatManager.Commands._localizedCommands) + { + if (VanillaCommands.ContainsKey(command.Value._name)) + continue; + VanillaCommands.Add(command.Value._name,command.Key.Value); + } + ChatManager.Commands._localizedCommands.Clear(); } finally { @@ -136,5 +149,18 @@ namespace TShockAPI.Localization return null; } + + /// + /// Get vanilla command text in English + /// + /// vanilla command name + /// vanilla command text English + public static string GetCommandTextByName(string name) + { + string commandText; + if (VanillaCommands.TryGetValue(name, out commandText)) + return commandText; + return null; + } } } diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 054e31df..48fab88d 100644 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -1497,11 +1497,11 @@ namespace TShockAPI { if (!String.IsNullOrEmpty(text)) { - text = item.Key.Value + ' ' + text; + text = EnglishLanguage.GetCommandTextByName(item.Value._name) + ' ' + text; } else { - text = item.Key.Value; + text = EnglishLanguage.GetCommandTextByName(item.Value._name); } break; }