diff --git a/SCANmechjeb/SCANmechjeb.cs b/SCANmechjeb/SCANmechjeb.cs
index f98c2c73..dcb5381a 100644
--- a/SCANmechjeb/SCANmechjeb.cs
+++ b/SCANmechjeb/SCANmechjeb.cs
@@ -35,6 +35,45 @@ class SCANmechjeb : MonoBehaviour
private SCANdata data;
private Vector2d coords = new Vector2d();
private bool shutdown, mjOnboard, mjTechTreeLocked;
+
+ #region Helpers
+
+ ///
+ /// Reflectively fetches MechJebCore's target controller, tolerating the
+ /// 'Target'/'target' field rename across MechJeb versions. Returns null
+ /// (and logs) if the field can't be resolved under any known name.
+ ///
+ private static MechJebModuleTargetController GetMJCoreTarget(MechJebCore mjc)
+ {
+ var t = mjc.GetType();
+ var field = t.GetField("Target") ?? t.GetField("target");
+ if (field == null)
+ {
+ KSPBuildTools.Log.Message(
+ "MechJebCore 'target' field could not be found under any known name; MechJeb support broken.");
+ }
+
+ return field?.GetValue(mjc) as MechJebModuleTargetController;
+ }
+
+ ///
+ /// Reflectively reads the guidance module's hidden flag, tolerating the
+ /// 'Hidden'/'hidden' field rename across MechJeb versions. Returns null
+ /// (and logs) if the field can't be resolved under any known name.
+ ///
+ private static bool? IsMJGuidanceModuleHidden(DisplayModule gm)
+ {
+ var t = gm.GetType();
+ var field = t.GetField("Hidden") ?? t.GetField("hidden");
+ if (field == null)
+ {
+ KSPBuildTools.Log.Message(
+ "MechJebGuidanceModule 'hidden' field could not be found under any known name; MechJeb support broken.");
+ }
+ return field?.GetValue(gm) as bool?;
+ }
+
+ #endregion
private void Start()
{
@@ -227,8 +266,8 @@ private void RefereshAfterVesselChange()
return;
}
- target = mjCore.target;
-
+ target = GetMJCoreTarget(mjCore);
+
if (target == null)
{
SCANcontroller.controller.MechJebLoaded = false;
@@ -256,7 +295,8 @@ private void RefereshAfterVesselChange()
guidanceModule.UnlockCheck();
- if (guidanceModule.hidden)
+ var hidden = IsMJGuidanceModuleHidden(guidanceModule);
+ if (hidden ?? true) // Defaults to a hidden state if the field cannot be found
{
SCANcontroller.controller.MechJebLoaded = false;
way = null;