Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of FixJPTranslations v1.2.0
FixJPTranslations.dll
Decompiled 4 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Text; using BepInEx; using BepInEx.Logging; using Newtonsoft.Json.Linq; using R2API; using R2API.Utils; using RoR2; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("FixJPTranslations")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("FixJPTranslations")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("d9e39f98-5a1f-466e-8058-73ab4ea683f6")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyVersion("1.0.0.0")] namespace FixJPTranslations; [BepInPlugin("com.example.fixjp", "Fix JP Translations", "1.2.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class FixJpPlugin : BaseUnityPlugin { internal static ManualLogSource Logger; private string JsonPath => Path.Combine(Paths.ConfigPath, "FixJPTranslations.ja-JP.json"); public void Awake() { Logger = ((BaseUnityPlugin)this).Logger; EnsureJsonExists(); Language.onCurrentLanguageChanged += Apply; RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(Apply)); Run.onRunStartGlobal += delegate { Apply(); }; Apply(); } private void OnDestroy() { Language.onCurrentLanguageChanged -= Apply; RoR2Application.onLoad = (Action)Delegate.Remove(RoR2Application.onLoad, new Action(Apply)); Run.onRunStartGlobal -= delegate { Apply(); }; } private void Apply() { try { if (!File.Exists(JsonPath)) { Logger.LogWarning((object)("JSON が見つかりません: " + JsonPath)); return; } string json = File.ReadAllText(JsonPath, Encoding.UTF8); Dictionary<string, string> dictionary = LoadTokenMap(json); if (dictionary.Count == 0) { Logger.LogInfo((object)"上書き対象が 0 件です(strings が空の可能性)。"); return; } LanguageAPI.AddOverlay(dictionary, "ja"); Logger.LogInfo((object)$"FixJPTranslations: overlay 適用 {dictionary.Count} 件 (current={Language.currentLanguage?.name})"); } catch (Exception ex) { Logger.LogWarning((object)("Apply 失敗: " + ex.Message)); } } private static Dictionary<string, string> LoadTokenMap(string json) { Dictionary<string, string> dictionary = new Dictionary<string, string>(); try { JObject val = JObject.Parse(json); JToken val2 = default(JToken); if (val.TryGetValue("strings", ref val2)) { JObject val3 = (JObject)(object)((val2 is JObject) ? val2 : null); if (val3 != null) { foreach (JProperty item in val3.Properties()) { string name = item.Name; string value = ((object)item.Value)?.ToString() ?? ""; if (!string.IsNullOrWhiteSpace(name)) { dictionary[name] = value; } } } } } catch (Exception ex) { Logger.LogWarning((object)("JSONパース失敗: " + ex.Message)); } return dictionary; } private void EnsureJsonExists() { try { string directoryName = Path.GetDirectoryName(JsonPath); if (!Directory.Exists(directoryName)) { Directory.CreateDirectory(directoryName); } if (!File.Exists(JsonPath)) { File.WriteAllText(JsonPath, "{\r\n \"strings\": {\r\n \"SAMPLE\": \"サンプル: ここに翻訳を入れてください\"\r\n }\r\n}", Encoding.UTF8); Logger.LogInfo((object)("JSONファイルを自動生成しました: " + JsonPath)); } } catch (Exception ex) { Logger.LogWarning((object)("JSON自動生成に失敗: " + ex.Message)); } } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CmdFixJpTest(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count < 2) { Debug.Log((object)"usage: fixjp_test <TOKEN>"); return; } string text = ((ConCommandArgs)(ref args))[1]; string @string = Language.GetString(text); Debug.Log((object)("TOKEN=" + text + " >> '" + @string + "' (lang=" + Language.currentLanguage?.name + ")")); } [ConCommand(/*Could not decode attribute arguments.*/)] private static void CmdFixJpFind(ConCommandArgs args) { if (((ConCommandArgs)(ref args)).Count < 2) { Debug.Log((object)"usage: fixjp_find <needle>"); return; } string value = ((ConCommandArgs)(ref args))[1]; Language currentLanguage = Language.currentLanguage; if (currentLanguage == null) { Debug.Log((object)"currentLanguage is null"); return; } int num = 0; foreach (KeyValuePair<string, string> item in currentLanguage.stringsByToken) { string value2 = item.Value; if (!string.IsNullOrEmpty(value2) && value2.Contains(value)) { Debug.Log((object)("HIT: " + item.Key + " = " + value2)); if (++num >= 50) { break; } } } Debug.Log((object)$"search done. hits={num}, lang={currentLanguage.name}"); } }