using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("FixCharWarn")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("FixCharWarn")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("6964290d-06d4-4810-84f0-aaf3de08e041")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace FixCharWarn;
[BepInPlugin("FixCharWarn", "chuxia.FixCharWarn", "1.0.2")]
public class FixCharWarnPlugin : BaseUnityPlugin
{
public static ManualLogSource ManualLog;
public void Awake()
{
ManualLog = ((BaseUnityPlugin)this).Logger;
Harmony.CreateAndPatchAll(typeof(Patches), (string)null);
}
}
public static class Patches
{
private const bool ENABLE_DEBUG_LOG = false;
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
[HarmonyPrefix]
[HarmonyPriority(0)]
[HarmonyWrapSafe]
public static void TMP_Text_textSetter(TMP_Text __instance, ref string value)
{
if (!((Object)(object)__instance.font == (Object)null) && !string.IsNullOrEmpty(value))
{
string text = ReplaceInvalidCharactersTMP(__instance, value);
if ((object)text != value)
{
bool flag = false;
value = text;
}
}
}
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
[HarmonyPrefix]
[HarmonyPriority(0)]
[HarmonyWrapSafe]
public static void Text_textSetter(Text __instance, ref string value)
{
if (!((Object)(object)__instance.font == (Object)null) && !string.IsNullOrEmpty(value))
{
string text = ReplaceInvalidCharactersUI(__instance, value);
if ((object)text != value)
{
bool flag = false;
value = text;
}
}
}
private static string ReplaceInvalidCharactersUI(Text uiText, string input)
{
Font font = uiText.font;
if ((Object)(object)font == (Object)null || string.IsNullOrEmpty(input))
{
return input;
}
StringBuilder stringBuilder = new StringBuilder(input.Length);
foreach (char c in input)
{
if (char.IsControl(c))
{
stringBuilder.Append(c);
}
else if (font.HasCharacter(c))
{
stringBuilder.Append(c);
}
else
{
stringBuilder.Append('□');
}
}
return stringBuilder.ToString();
}
private static string ReplaceInvalidCharactersTMP(TMP_Text textComponent, string input)
{
TMP_FontAsset font = textComponent.font;
if ((Object)(object)font == (Object)null || string.IsNullOrEmpty(input))
{
return input;
}
StringBuilder stringBuilder = new StringBuilder(input.Length);
foreach (char c in input)
{
if (char.IsControl(c))
{
stringBuilder.Append(c);
}
else if (font.HasCharacter(c, true, true))
{
stringBuilder.Append(c);
}
else
{
stringBuilder.Append('□');
}
}
return stringBuilder.ToString();
}
}