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 ShowCapacity v1.0.12
ShowCapacity.dll
Decompiled a year agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using ShowCapacity.Patches; 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("RadiationIsCool")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("RadiationIsCool")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("8ee335db-0cbe-470c-8fbc-69263f01b35a")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] [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 ShowCapacity { [BepInPlugin("Piggy.ShowCapacity", "ShowCapacity", "1.0.12")] public class Plugin : BaseUnityPlugin { private const string modGUID = "Piggy.ShowCapacity"; private const string modName = "ShowCapacity"; private const string modVersion = "1.0.12"; private readonly Harmony harmony = new Harmony("Piggy.ShowCapacity"); private static Plugin Instance; public static ManualLogSource mls; public static int colorRed; public static int colorGreen; public static int colorBlue; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } mls = Logger.CreateLogSource("Piggy.ShowCapacity"); mls.LogInfo((object)"Show Capacity is loaded"); colorRed = ((BaseUnityPlugin)this).Config.Bind<int>("Color", "Red", 0, "Red value in RGB (0-255)").Value; colorGreen = ((BaseUnityPlugin)this).Config.Bind<int>("Color", "Green", 255, "Green value in RGB (0-255)").Value; colorBlue = ((BaseUnityPlugin)this).Config.Bind<int>("Color", "Blue", 255, "Blue value in RGB (0-255)").Value; harmony.PatchAll(typeof(Plugin)); harmony.PatchAll(typeof(HUDManagerPatch)); harmony.PatchAll(typeof(PlayerControllerBPatch)); harmony.PatchAll(typeof(SprayPaintItemPatch)); harmony.PatchAll(typeof(TetraChemicalItemPatch)); } } } namespace ShowCapacity.Patches { [HarmonyPatch(typeof(TetraChemicalItem))] internal static class TetraChemicalItemPatch { private static readonly FieldInfo fuelField = typeof(TetraChemicalItem).GetField("fuel", BindingFlags.Instance | BindingFlags.NonPublic); public static float GetTZPFuel(TetraChemicalItem instance) { return (float)fuelField.GetValue(instance); } } [HarmonyPatch(typeof(SprayPaintItem))] internal static class SprayPaintItemPatch { private static readonly FieldInfo sprayCanTankField = typeof(SprayPaintItem).GetField("sprayCanTank", BindingFlags.Instance | BindingFlags.NonPublic); public static float GetSprayCanTank(SprayPaintItem instance) { return (float)sprayCanTankField.GetValue(instance); } } [HarmonyPatch(typeof(PlayerControllerB))] internal static class PlayerControllerBPatch { private static Image capacityMeter; private static CanvasGroup capacityGroup; private static bool isPlayerHoldingSpray; private static readonly FieldInfo sprayCanTankField = typeof(SprayPaintItem).GetField("sprayCanTank", BindingFlags.Instance | BindingFlags.NonPublic); private static readonly FieldInfo fuelField = typeof(TetraChemicalItem).GetField("fuel", BindingFlags.Instance | BindingFlags.NonPublic); private static TetraChemicalItem tzpScript; private static SprayPaintItem sprayScript; private static GrabbableObject prevHeldObject; [HarmonyPostfix] [HarmonyPatch("Update")] private static void Update_PostFix(ref bool ___isHoldingObject, ref GrabbableObject ___currentlyHeldObjectServer, ref bool ___isCameraDisabled) { if ((Object)(object)capacityMeter == (Object)null) { GameObject val = GameObject.Find("CapacityMeter"); if ((Object)(object)val != (Object)null) { capacityMeter = val.GetComponent<Image>(); capacityGroup = GameObject.Find("Capacities").GetComponent<CanvasGroup>(); capacityGroup.alpha = 0f; } } if (((Object)(object)capacityMeter == (Object)null) | ___isCameraDisabled) { return; } if (___isHoldingObject && (Object)(object)___currentlyHeldObjectServer != (Object)null) { GrabbableObject val2 = ___currentlyHeldObjectServer; if (___currentlyHeldObjectServer is SprayPaintItem) { isPlayerHoldingSpray = true; if ((Object)(object)sprayScript != (Object)(object)val2) { SprayPaintItem component = ((Component)val2).GetComponent<SprayPaintItem>(); sprayScript = component; } else { FieldInfo field = typeof(SprayPaintItem).GetField("isSpraying", BindingFlags.Instance | BindingFlags.NonPublic); if ((Object)(object)prevHeldObject != (Object)(object)val2) { UpdateMeter(sprayScript, sprayCanTankField); prevHeldObject = val2; } if ((Object)(object)sprayScript != (Object)null && (bool)field.GetValue(sprayScript)) { UpdateMeter(sprayScript, sprayCanTankField); } } } else if (___currentlyHeldObjectServer is TetraChemicalItem) { isPlayerHoldingSpray = true; if ((Object)(object)tzpScript != (Object)(object)val2) { TetraChemicalItem component2 = ((Component)val2).GetComponent<TetraChemicalItem>(); tzpScript = component2; } else { FieldInfo field2 = typeof(TetraChemicalItem).GetField("emittingGas", BindingFlags.Instance | BindingFlags.NonPublic); if ((Object)(object)prevHeldObject != (Object)(object)val2) { UpdateMeter(tzpScript, fuelField); prevHeldObject = val2; } if ((Object)(object)tzpScript != (Object)null && (bool)field2.GetValue(tzpScript)) { UpdateMeter(tzpScript, fuelField); } } } else { isPlayerHoldingSpray = false; } } else { isPlayerHoldingSpray = false; } EnableMeter(isPlayerHoldingSpray); } private static void UpdateMeter(object item, FieldInfo field) { if (field != null && item != null) { float num = (float)field.GetValue(item); capacityMeter.fillAmount = num / 1.3f; } } private static void EnableMeter(bool isActive) { if ((Object)(object)capacityMeter != (Object)null) { capacityGroup.alpha = (isActive ? 1 : 0); } } } [HarmonyPatch(typeof(HUDManager))] internal class HUDManagerPatch { [HarmonyPrefix] [HarmonyPatch("Start")] private static void Start_PreFix(HUDManager __instance) { //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) GameObject val = GameObject.Find("Batteries"); if ((Object)(object)val == (Object)null) { Debug.LogError((object)"Batteries object not assigned!"); return; } GameObject val2 = Object.Instantiate<GameObject>(val, val.transform.parent); ((Object)val2).name = "Capacities"; Transform[] componentsInChildren = val2.GetComponentsInChildren<Transform>(true); Image val4 = default(Image); foreach (Transform val3 in componentsInChildren) { if (((Object)val3).name.Contains("Battery")) { ((Object)val3).name = ((Object)val3).name.Replace("Battery", "Capacity"); if (((Object)val3).name == "CapacityIcon") { Object.Destroy((Object)(object)((Component)val3).gameObject); } } if (((Component)val3).TryGetComponent<Image>(ref val4)) { ((Graphic)val4).color = Color32.op_Implicit(new Color32((byte)Plugin.colorRed, (byte)Plugin.colorGreen, (byte)Plugin.colorBlue, (byte)((((Graphic)val4).color.a >= 1f) ? byte.MaxValue : 111))); } } } } }