Decompiled source of Structural Weight Balance v1.0.2

Mods/WeightBalanceMod.dll

Decompiled 11 hours ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BoneLib;
using Il2CppSLZ.Marrow;
using MelonLoader;
using UnityEngine;
using WeightBalanceMod;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: MelonInfo(typeof(StructuralWeightMod), "Structural Weight Balance", "1.0.0", "picklerick", null)]
[assembly: MelonGame("Stress Level Zero", "BONELAB")]
[assembly: AssemblyTitle("WeightBalanceMod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("WeightBalanceMod")]
[assembly: AssemblyCopyright("Copyright ©  2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("959d5a07-66f8-4055-9853-c3d0263430ac")]
[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 WeightBalanceMod;

public class StructuralWeightMod : MelonMod
{
	public override void OnUpdate()
	{
		if ((Object)(object)Player.RigManager == (Object)null)
		{
			return;
		}
		PhysicsRig physicsRig = Player.RigManager.physicsRig;
		if ((Object)(object)physicsRig == (Object)null)
		{
			return;
		}
		Hand leftHand = physicsRig.leftHand;
		GameObject val = ((leftHand != null) ? ((Component)leftHand).gameObject : null);
		Hand rightHand = physicsRig.rightHand;
		GameObject val2 = ((rightHand != null) ? ((Component)rightHand).gameObject : null);
		if (!((Object)(object)val == (Object)null) || !((Object)(object)val2 == (Object)null))
		{
			if ((Object)(object)val2 != (Object)null)
			{
				AdjustCenterOfMass(val2);
			}
			if ((Object)(object)val != (Object)null)
			{
				AdjustCenterOfMass(val);
			}
		}
	}

	private void AdjustCenterOfMass(object handObj)
	{
		if (handObj == null)
		{
			return;
		}
		MethodInfo method = handObj.GetType().GetMethod("GetComponentInParent", new Type[1] { typeof(Type) });
		if (method == null)
		{
			return;
		}
		Type type = Type.GetType("UnityEngine.Rigidbody, Il2CppUnityEngine.PhysicsModule") ?? Type.GetType("UnityEngine.Rigidbody, UnityEngine.PhysicsModule");
		if (type == null)
		{
			return;
		}
		object obj = method.Invoke(handObj, new object[1] { type });
		if (obj == null)
		{
			return;
		}
		object obj2 = handObj.GetType().GetProperty("transform")?.GetValue(handObj);
		if (obj2 == null)
		{
			return;
		}
		object obj3 = obj2.GetType().GetProperty("position")?.GetValue(obj2);
		if (obj3 == null)
		{
			return;
		}
		object obj4 = obj.GetType().GetProperty("transform")?.GetValue(obj);
		if (obj4 == null)
		{
			return;
		}
		object obj5 = obj4.GetType().GetProperty("worldToLocalMatrix")?.GetValue(obj4);
		if (obj5 == null)
		{
			return;
		}
		MethodInfo method2 = obj5.GetType().GetMethod("MultiplyPoint3x4");
		if (method2 == null)
		{
			return;
		}
		object obj6 = method2.Invoke(obj5, new object[1] { obj3 });
		if (obj6 != null)
		{
			PropertyInfo property = obj.GetType().GetProperty("centerOfMass");
			if (property != null)
			{
				property.SetValue(obj, obj6);
			}
			else
			{
				obj.GetType().GetField("centerOfMass", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)?.SetValue(obj, obj6);
			}
		}
	}
}