Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of ServersideQoL Signs v2.3.0
ServersideQoL.Signs.dll
Decompiled 3 weeks agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using Microsoft.CodeAnalysis; using ServersideQoL.Utilities; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("ArgusMagnus")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyCopyright("ArgusMagnus")] [assembly: AssemblyDescription("Show in-game time on signs, set default sign color and put signs showing the remaining fermentation time on fermenters")] [assembly: AssemblyFileVersion("2.3.0.0")] [assembly: AssemblyInformationalVersion("2.3.0+2e3f9ec58eb6242e0f6159ce758d539a6d41fdf7")] [assembly: AssemblyProduct("ServersideQoL.Signs")] [assembly: AssemblyTitle("ServersideQoL.Signs")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/ArgusMagnus/ValheimServersideQoL")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("2.3.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [CompilerGenerated] internal sealed class <>z__ReadOnlyArray<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T> { int ICollection.Count => _items.Length; bool ICollection.IsSynchronized => false; object ICollection.SyncRoot => this; object IList.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } bool IList.IsFixedSize => true; bool IList.IsReadOnly => true; int IReadOnlyCollection<T>.Count => _items.Length; T IReadOnlyList<T>.this[int index] => _items[index]; int ICollection<T>.Count => _items.Length; bool ICollection<T>.IsReadOnly => true; T IList<T>.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } public <>z__ReadOnlyArray(T[] items) { _items = items; } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)_items).GetEnumerator(); } void ICollection.CopyTo(Array array, int index) { ((ICollection)_items).CopyTo(array, index); } int IList.Add(object value) { throw new NotSupportedException(); } void IList.Clear() { throw new NotSupportedException(); } bool IList.Contains(object value) { return ((IList)_items).Contains(value); } int IList.IndexOf(object value) { return ((IList)_items).IndexOf(value); } void IList.Insert(int index, object value) { throw new NotSupportedException(); } void IList.Remove(object value) { throw new NotSupportedException(); } void IList.RemoveAt(int index) { throw new NotSupportedException(); } IEnumerator<T> IEnumerable<T>.GetEnumerator() { return ((IEnumerable<T>)_items).GetEnumerator(); } void ICollection<T>.Add(T item) { throw new NotSupportedException(); } void ICollection<T>.Clear() { throw new NotSupportedException(); } bool ICollection<T>.Contains(T item) { return ((ICollection<T>)_items).Contains(item); } void ICollection<T>.CopyTo(T[] array, int arrayIndex) { ((ICollection<T>)_items).CopyTo(array, arrayIndex); } bool ICollection<T>.Remove(T item) { throw new NotSupportedException(); } int IList<T>.IndexOf(T item) { return ((IList<T>)_items).IndexOf(item); } void IList<T>.Insert(int index, T item) { throw new NotSupportedException(); } void IList<T>.RemoveAt(int index) { throw new NotSupportedException(); } } namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [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 ServersideQoL.Signs { public sealed class Config : ConfigBase<Config> { public sealed class AdvancedConfig { public sealed class ProcessingDelaysConfig { public float TimeSigns { get; init; } = 0.5f; } public ProcessingDelaysConfig ProcessingDelays { get; init; } = new ProcessingDelaysConfig(); } internal const string NotSetDefaultColor = "black"; public override ConfigEntry<bool> Enabled { get; } = ConfigBase<Config>.BindEx<bool>(cfg, true, "Enables/disables the entire mod", (IAcceptableValueBase<bool>)null, (Deprecated<Config>)null, "Enabled"); public ConfigEntry<string> DefaultColor { get; } = ConfigBase<Config>.BindEx<string>(cfg, "black", "Default color for signs", (IAcceptableValueBase<string>)(object)new AcceptableValueList<string>(new string[8] { "black", "blue", "green", "orange", "purple", "red", "white", "yellow" }), (Deprecated<Config>)null, "DefaultColor"); public ConfigEntry<bool> TimeSigns { get; } = ConfigBase<Config>.BindEx<bool>(cfg, true, FormattableString.Invariant($"True to update sign texts which contain time emojis (any of {string.Concat(SignProcessor.ClockEmojis)}) with the in-game time"), (IAcceptableValueBase<bool>)null, (Deprecated<Config>)null, "TimeSigns"); public ConfigEntry<string> TimeSignsPlaceholder { get; } = ConfigBase<Config>.BindEx<string>(cfg, "", "Optional text that will be recognized in addition to time emojis and replaced with the in-game time on signs", (IAcceptableValueBase<string>)null, (Deprecated<Config>)null, "TimeSignsPlaceholder"); public ConfigEntry<bool> FermenterSigns { get; } = ConfigBase<Config>.BindEx<bool>(cfg, false, "True to automatically put a sign on the tap side of fermenters, showing the content and the remaining fermentation time", (IAcceptableValueBase<bool>)null, (Deprecated<Config>)null, "FermenterSigns"); public YamlConfigEntry<AdvancedConfig> Advanced { get; } = ConfigBase<Config>.BindYaml<AdvancedConfig>(cfg, "Advanced"); public Config(ConfigFile cfg, Logger logger) : base(cfg, logger) { } } [Processor("0daf063a-639c-4797-9a0d-c8fd7e7e420c")] [RunBefore<SignProcessor>] public sealed class FermenterSignProcessor : Processor<FermenterSignProcessor.PrefabInfo> { public sealed record PrefabInfo(Fermenter Fermenter) : ProcessorPrefabInfo() { public (Vector3 Direction, float Distance, float Height) Placement { get; } = GetPlacement(Fermenter); private static (Vector3, float, float) GetPlacement(Fermenter fermenter) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) Transform transform = ((Component)fermenter).transform; Vector3 val = (Object.op_Implicit((Object)(object)fermenter.m_tapSwitch) ? transform.InverseTransformPoint(((Component)fermenter.m_tapSwitch).transform.position) : Vector3.forward); Vector3 val2 = default(Vector3); ((Vector3)(ref val2))..ctor(val.x, 0f, val.z); val2 = ((((Vector3)(ref val2)).sqrMagnitude > 0.0001f) ? ((Vector3)(ref val2)).normalized : Vector3.forward); Vector3 val3 = default(Vector3); ((Vector3)(ref val3))..ctor(val2.z, 0f, 0f - val2.x); float num = float.MaxValue; float num2 = float.MinValue; float num3 = 0f; MeshFilter[] componentsInChildren = ((Component)fermenter).GetComponentsInChildren<MeshFilter>(true); foreach (MeshFilter val4 in componentsInChildren) { if (Object.op_Implicit((Object)(object)val4.sharedMesh)) { Bounds bounds = val4.sharedMesh.bounds; for (int j = 0; j < 8; j++) { Vector3 val5 = ((Bounds)(ref bounds)).center + Vector3.Scale(((Bounds)(ref bounds)).extents, new Vector3((float)(((j & 1) != 0) ? 1 : (-1)), (float)(((j & 2) != 0) ? 1 : (-1)), (float)(((j & 4) != 0) ? 1 : (-1)))); val5 = transform.InverseTransformPoint(((Component)val4).transform.TransformPoint(val5)); num = Mathf.Min(num, val5.y); num2 = Mathf.Max(num2, val5.y); num3 = Mathf.Max(num3, Mathf.Abs(Vector3.Dot(val5, val3))); } } } if (num > num2) { return (val2, 0.6f, 0.8f); } return (val2, num3 + 0.05f, (num + num2) / 2f); } [CompilerGenerated] public override string ToString() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("PrefabInfo"); stringBuilder.Append(" { "); if (((ProcessorPrefabInfo)this).PrintMembers(stringBuilder)) { stringBuilder.Append(' '); } stringBuilder.Append('}'); return stringBuilder.ToString(); } [CompilerGenerated] protected override bool PrintMembers(StringBuilder builder) { if (((ProcessorPrefabInfo)this).PrintMembers(builder)) { builder.Append(", "); } builder.Append("Fermenter = "); builder.Append(Fermenter); builder.Append(", Placement = "); builder.Append(Placement.ToString()); return true; } [CompilerGenerated] public override int GetHashCode() { return (((ProcessorPrefabInfo)this).GetHashCode() * -1521134295 + EqualityComparer<Fermenter>.Default.GetHashCode(Fermenter)) * -1521134295 + EqualityComparer<(Vector3, float, float)>.Default.GetHashCode(Placement); } [CompilerGenerated] public sealed override bool Equals(ProcessorPrefabInfo? other) { return ((object)this).Equals((object?)other); } [CompilerGenerated] public bool Equals(PrefabInfo? other) { if ((object)this != other) { if (((ProcessorPrefabInfo)this).Equals((ProcessorPrefabInfo)(object)other) && EqualityComparer<Fermenter>.Default.Equals(Fermenter, other.Fermenter)) { return EqualityComparer<(Vector3, float, float)>.Default.Equals(Placement, other.Placement); } return false; } return true; } [CompilerGenerated] private PrefabInfo(PrefabInfo original) : base((ProcessorPrefabInfo)(object)original) { Fermenter = original.Fermenter; Placement = original.Placement; } } public const string Id = "0daf063a-639c-4797-9a0d-c8fd7e7e420c"; private const float UpdateInterval = 5f; private readonly Dictionary<ServersideQoLZDO, ServersideQoLZDO> _signsByFermenters = new Dictionary<ServersideQoLZDO, ServersideQoLZDO>(); protected override void Initialize() { foreach (ServersideQoLZDO value in _signsByFermenters.Values) { value.Destroy(); } _signsByFermenters.Clear(); } protected override bool ClaimExclusive(ServersideQoLZDO zdo) { return false; } protected override ProcessResult Process(ServersideQoLZDO zdo, IReadOnlyList<Peer> peers, PrefabInfo prefabInfo) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_0307: Unknown result type (might be due to invalid IL or missing references) //IL_02f1: Unknown result type (might be due to invalid IL or missing references) //IL_02f6: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_02a1: Unknown result type (might be due to invalid IL or missing references) if (ConfigBase<Config>.Instance.FermenterSigns.Value) { ZDOVars vars = zdo.Vars; PlayerID val = default(PlayerID); val = ((ZDOVars)(ref vars)).GetCreator(val); if (((PlayerID)(ref val)).Value != 0L) { if (!_signsByFermenters.TryGetValue(zdo, out ServersideQoLZDO value)) { (Vector3 Direction, float Distance, float Height) placement = prefabInfo.Placement; Vector3 item = placement.Direction; float item2 = placement.Distance; float item3 = placement.Height; item = zdo.ZDO.GetRotation() * item; Vector3 val2 = zdo.ZDO.GetPosition() + item * item2; val2.y += item3; Vector3 val3 = val2; int sign = Prefabs.Sign; Quaternion val4 = Quaternion.LookRotation(item); value = ((Processor)this).PlacePiece(val3, sign, ((Quaternion)(ref val4)).eulerAngles.y); value.Fields<WearNTear>().Set((Func<Expression<Func<WearNTear, bool>>>)(() => (WearNTear x) => x.m_supports), false, "C:\\repos\\Valheim.ServersideQoL\\ServersideQoL.Signs\\FermenterSignProcessor.cs", 72); _signsByFermenters.Add(zdo, value); zdo.Destroyed += OnFermenterDestroyed; } ProcessResult result = (ProcessResult)0; vars = zdo.Vars; int content = ((ZDOVars)(ref vars)).GetContent(0); string text; if (content == 0) { text = Localization.instance.Localize("$piece_container_empty"); } else { ItemConversion val5 = ((IEnumerable<ItemConversion>)prefabInfo.Fermenter.m_conversion).FirstOrDefault((Func<ItemConversion, bool>)((ItemConversion x) => StringExtensionMethods.GetStableHashCode(((Object)((Component)x.m_from).gameObject).name) == content)); if (val5 == null) { text = "Invalid"; } else { string text2 = Localization.instance.Localize(val5.m_from.m_itemData.m_shared.m_name); float num = zdo.Fields<Fermenter>().GetFloat((Func<Expression<Func<Fermenter, float>>>)(() => (Fermenter x) => x.m_fermentationDuration), "C:\\repos\\Valheim.ServersideQoL\\ServersideQoL.Signs\\FermenterSignProcessor.cs", 89); vars = zdo.Vars; DateTime startTime = ((ZDOVars)(ref vars)).GetStartTime(default(DateTime)); if (startTime.Ticks != 0L) { num -= (float)(ZNet.instance.GetTime() - startTime).TotalSeconds; } if (num < 0f) { text = text2 + "<br>" + Localization.instance.Localize("$piece_fermenter_ready"); } else { TimeSpan timeSpan = TimeSpan.FromSeconds(Mathf.Ceil(num)); text = FormattableString.Invariant($"{text2}<br>{(int)timeSpan.TotalMinutes}:{timeSpan.Seconds:D2}"); result = ((Processor)this).ScheduleReprocessing(Mathf.Min(5f, num + 0.1f)); } } } vars = value.Vars; string text3 = ((ZDOVars)(ref vars)).GetText(""); Match match = Processor.Instance<SignProcessor>().DefaultColorRegex.Match(text3); if (match != null && match.Success) { text = match.Value + text; } if (text3 != text) { vars = value.Vars; ((ZDOVars)(ref vars)).SetText(text, "C:\\repos\\Valheim.ServersideQoL\\ServersideQoL.Signs\\FermenterSignProcessor.cs", 109); } return result; } } return (ProcessResult)2; } private void OnFermenterDestroyed(ServersideQoLZDO zdo) { if (_signsByFermenters.Remove(zdo, out ServersideQoLZDO value)) { value.Destroy(); } } } [Processor("806bdb85-c857-4154-a246-a0b1d0917987")] public sealed class SignProcessor : Processor<ProcessorPrefabInfo<Sign>> { public const string Id = "806bdb85-c857-4154-a246-a0b1d0917987"; private Regex _clockRegex; private string? _timeText; internal static IReadOnlyList<string> ClockEmojis { get; } = new <>z__ReadOnlyArray<string>(new string[24] { "\ud83d\udd5b", "\ud83d\udd67", "\ud83d\udd50", "\ud83d\udd5c", "\ud83d\udd51", "\ud83d\udd5d", "\ud83d\udd52", "\ud83d\udd5e", "\ud83d\udd53", "\ud83d\udd5f", "\ud83d\udd54", "\ud83d\udd60", "\ud83d\udd55", "\ud83d\udd61", "\ud83d\udd56", "\ud83d\udd62", "\ud83d\udd57", "\ud83d\udd63", "\ud83d\udd58", "\ud83d\udd64", "\ud83d\udd59", "\ud83d\udd65", "\ud83d\udd5a", "\ud83d\udd66" }); internal Regex DefaultColorRegex { get; } = new Regex("<color=[^>]+ d>"); [MemberNotNull("_clockRegex")] protected override void Initialize() { _clockRegex = (string.IsNullOrEmpty(ConfigBase<Config>.Instance.TimeSignsPlaceholder.Value) ? new Regex("(?:" + string.Join("|", ClockEmojis.Select(Regex.Escape)) + ")(?:\\s*\\d\\d\\:\\d\\d)?") : new Regex("(?:" + string.Join("|", ClockEmojis.Prepend(ConfigBase<Config>.Instance.TimeSignsPlaceholder.Value).Select(Regex.Escape)) + ")(?:\\s*\\d\\d\\:\\d\\d)?")); } protected override void PreProcess(PeersEnumerable peers) { _timeText = null; } protected override ProcessResult Process(ServersideQoLZDO zdo, IReadOnlyList<Peer> peers, ProcessorPrefabInfo<Sign> prefabInfo) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) Config instance = ConfigBase<Config>.Instance; ProcessResult result = (ProcessResult)0; ZDOVars vars = zdo.Vars; string text = ((ZDOVars)(ref vars)).GetText(""); if (instance.TimeSigns.Value) { string text2 = _clockRegex.Replace(text, delegate { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) result = ((Processor)this).ScheduleReprocessing(ConfigBase<Config>.Instance.Advanced.Value.ProcessingDelays.TimeSigns); if (_timeText == null) { float dayFraction = EnvMan.instance.GetDayFraction(); int index = (int)Math.Floor((float)(ClockEmojis.Count * 2) * dayFraction) % ClockEmojis.Count; TimeSpan timeSpan = TimeSpan.FromDays(dayFraction); _timeText = $"{ClockEmojis[index]} {timeSpan:hh\\:mm}"; } return _timeText; }); if (text2 != text) { vars = zdo.Vars; ((ZDOVars)(ref vars)).SetText(text = text2, "C:\\repos\\Valheim.ServersideQoL\\ServersideQoL.Signs\\SignProcessor.cs", 52); } } bool found = false; string text3 = DefaultColorRegex.Replace(text, delegate { found = true; string value2 = ConfigBase<Config>.Instance.DefaultColor.Value; return (value2 != null && value2.Length > 0 && !(value2 == "black")) ? ("<color=\"" + ConfigBase<Config>.Instance.DefaultColor.Value + "\" d>") : ""; }, 1); if (!found) { string value = ConfigBase<Config>.Instance.DefaultColor.Value; if (value != null && value.Length > 0 && !(value == "black")) { text3 = "<color=\"" + ConfigBase<Config>.Instance.DefaultColor.Value + "\" d>" + text; } } if (text3 != text) { vars = zdo.Vars; ((ZDOVars)(ref vars)).SetText(text = text3, "C:\\repos\\Valheim.ServersideQoL\\ServersideQoL.Signs\\SignProcessor.cs", 71); } return result; } } [BepInPlugin("ArgusMagnus.ServersideQoL.Signs", "ServersideQoL.Signs", "2.3.0")] public sealed class SignsPlugin : ServersideQoLPluginBase<SignsPlugin, Config> { public const string Author = "ArgusMagnus"; public const string PluginName = "ServersideQoL.Signs"; public const string PluginGuid = "ArgusMagnus.ServersideQoL.Signs"; public const string PluginVersion = "2.3.0"; public const string PluginInformationalVersion = "2.3.0"; private DateTimeOffset BuildTimestamp { get; } = new DateTimeOffset(639273810398967363L, default(TimeSpan)); protected override Config CreateConfigSingleton(ConfigFile configFile, Logger logger) { return new Config(configFile, logger); } protected override void RegisterProcessors(IProcessorCollection processors) { processors.Add<SignProcessor>().Add<FermenterSignProcessor>(); } private void Awake() { } } }