using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using Microsoft.CodeAnalysis;
using On;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("assembly_valheim")]
[assembly: AssemblyCompany("ImageChat")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("My first plugin")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("ImageChat")]
[assembly: AssemblyTitle("ImageChat")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace ImageChat
{
[BepInPlugin("ImageChat", "ImageChat", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
public static Dictionary<string, Sprite> spriteMap = new Dictionary<string, Sprite>();
private void Awake()
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Expected O, but got Unknown
((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin ImageChat is loaded!");
Chat.UpdateWorldTextField += new hook_UpdateWorldTextField(OnUpdateTextField);
}
private void OnUpdateTextField(orig_UpdateWorldTextField orig, Chat self, WorldTextInstance wt)
{
Debug.Log((object)"OnUpdateTextField fired.");
Uri uRLFromChat = GetURLFromChat(wt.m_text);
if (uRLFromChat == null)
{
Debug.Log((object)"URI was null, returning with vanilla behaviour.");
orig.Invoke(self, wt);
}
else
{
((TMP_Text)wt.m_textMeshField).text = "";
((MonoBehaviour)this).StartCoroutine(HandleTextDisplay(uRLFromChat, wt));
}
}
private IEnumerator HandleTextDisplay(Uri uri, WorldTextInstance wt)
{
if (spriteMap.ContainsKey(uri.AbsoluteUri))
{
Debug.Log((object)"Sprite map contained our image already, using that instead.");
yield return SetupText(spriteMap[uri.AbsoluteUri], wt);
}
else
{
UnityWebRequest www = UnityWebRequestTexture.GetTexture(uri);
Debug.Log((object)("Making WWW req for: " + uri.AbsolutePath));
yield return www.SendWebRequest();
_ = www.result;
if (true)
{
Debug.Log((object)"WWW result was not null, setting up sprite");
Texture2D tex = DownloadHandlerTexture.GetContent(www);
Sprite sprite = Sprite.Create(tex, new Rect(0f, 0f, (float)((Texture)tex).width, (float)((Texture)tex).height), new Vector2(0.5f, 0.5f), 100f);
spriteMap[uri.AbsolutePath] = sprite;
yield return SetupText(sprite, wt);
}
}
yield return null;
}
private IEnumerator SetupText(Sprite sprite, WorldTextInstance wt)
{
Transform root = wt.m_gui.transform.Find("Text");
Object.Destroy((Object)(object)((Component)root).GetComponent<TextMeshProUGUI>());
yield return (object)new WaitForSeconds(0.08f);
Image image = ((Component)root).gameObject.AddComponent<Image>();
((Graphic)image).color = Color.white;
image.sprite = sprite;
((Transform)((Graphic)image).rectTransform).localScale = new Vector3(0.5f, 2.5f, 0f);
((Transform)((Graphic)image).rectTransform).localPosition = new Vector3(0f, 90f, 0f);
}
private Uri GetURLFromChat(string text)
{
string[] array = text.Split(' ');
foreach (string uriString in array)
{
if (Uri.IsWellFormedUriString(uriString, UriKind.RelativeOrAbsolute) && CheckValidImageFormat(text))
{
Uri uri = new Uri(uriString);
if (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)
{
return uri;
}
}
}
return null;
}
private bool CheckValidImageFormat(string text)
{
return text.Contains(".png") || text.Contains(".jpg");
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "ImageChat";
public const string PLUGIN_NAME = "ImageChat";
public const string PLUGIN_VERSION = "1.0.0";
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}