diff --git a/src/Core/CSharp/ScriptInteraction.cs b/src/Core/CSharp/ScriptInteraction.cs
index 541da4d..034b3c9 100644
--- a/src/Core/CSharp/ScriptInteraction.cs
+++ b/src/Core/CSharp/ScriptInteraction.cs
@@ -7,6 +7,7 @@ using System.Linq;
using UnityExplorer.Core.Runtime;
using UnityExplorer.UI.Main.CSConsole;
using UnityExplorer.UI.Main.Home;
+using UnityExplorer.UI.Inspectors;
namespace UnityExplorer.Core.CSharp
{
diff --git a/src/Core/ReflectionUtility.cs b/src/Core/ReflectionUtility.cs
index 06a534a..916d536 100644
--- a/src/Core/ReflectionUtility.cs
+++ b/src/Core/ReflectionUtility.cs
@@ -7,7 +7,7 @@ using System.Reflection;
using BF = System.Reflection.BindingFlags;
using UnityExplorer.Core.Runtime;
-namespace UnityExplorer.Core
+namespace UnityExplorer
{
public static class ReflectionUtility
{
@@ -18,7 +18,7 @@ namespace UnityExplorer.Core
///
/// The object to get the true Type for.
/// The most accurate Type of the object which could be identified.
- public static Type GetType(this object obj)
+ public static Type GetActualType(this object obj)
{
if (obj == null)
return null;
@@ -32,7 +32,7 @@ namespace UnityExplorer.Core
/// The object to cast
/// The object, cast to the underlying Type if possible, otherwise the original object.
public static object Cast(this object obj)
- => ReflectionProvider.Instance.Cast(obj, GetType(obj));
+ => ReflectionProvider.Instance.Cast(obj, GetActualType(obj));
///
/// Cast an object to a Type, if possible.
@@ -105,7 +105,7 @@ namespace UnityExplorer.Core
///
/// Get all base types of the provided Type, including itself.
///
- public static Type[] GetAllBaseTypes(this object obj) => GetAllBaseTypes(GetType(obj));
+ public static Type[] GetAllBaseTypes(this object obj) => GetAllBaseTypes(GetActualType(obj));
///
/// Get all base types of the provided Type, including itself.
diff --git a/src/Core/Runtime/Il2Cpp/Il2CppReflection.cs b/src/Core/Runtime/Il2Cpp/Il2CppReflection.cs
index dd7143f..1816c17 100644
--- a/src/Core/Runtime/Il2Cpp/Il2CppReflection.cs
+++ b/src/Core/Runtime/Il2Cpp/Il2CppReflection.cs
@@ -163,7 +163,7 @@ namespace UnityExplorer.Core.Runtime.Il2Cpp
IntPtr castFromPtr = il2cpp_object_get_class(ilObj.Pointer);
if (!il2cpp_class_is_assignable_from(castToPtr, castFromPtr))
- return obj;
+ return null;
if (RuntimeSpecificsStore.IsInjected(castToPtr))
return UnhollowerBaseLib.Runtime.ClassInjectorBase.GetMonoObjectFromIl2CppPointer(ilObj.Pointer);
diff --git a/src/Core/TestClass.cs b/src/Core/TestClass.cs
new file mode 100644
index 0000000..eebe35a
--- /dev/null
+++ b/src/Core/TestClass.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UnityExplorer
+{
+#if CPP
+ public static class TestClass
+ {
+ public static Il2CppSystem.Collections.Hashtable testHashset;
+
+ static TestClass()
+ {
+ testHashset = new Il2CppSystem.Collections.Hashtable();
+ testHashset.Add("key1", "itemOne");
+ testHashset.Add("key2", "itemTwo");
+ testHashset.Add("key3", "itemThree");
+ }
+ }
+#endif
+}
diff --git a/src/ExplorerCore.cs b/src/ExplorerCore.cs
index 76e4d19..cf65894 100644
--- a/src/ExplorerCore.cs
+++ b/src/ExplorerCore.cs
@@ -12,7 +12,7 @@ namespace UnityExplorer
public class ExplorerCore
{
public const string NAME = "UnityExplorer";
- public const string VERSION = "3.3.4";
+ public const string VERSION = "3.3.5";
public const string AUTHOR = "Sinai";
public const string GUID = "com.sinai.unityexplorer";
@@ -46,6 +46,8 @@ namespace UnityExplorer
UIManager.Init();
Log($"{NAME} {VERSION} initialized.");
+
+ // InspectorManager.Instance.Inspect(typeof(TestClass));
}
public static void Update()
diff --git a/src/Loader/ML/MelonLoaderConfigHandler.cs b/src/Loader/ML/MelonLoaderConfigHandler.cs
index 5dcc654..d900fed 100644
--- a/src/Loader/ML/MelonLoaderConfigHandler.cs
+++ b/src/Loader/ML/MelonLoaderConfigHandler.cs
@@ -21,7 +21,11 @@ namespace UnityExplorer.Loader.ML
{
prefCategory = MelonPreferences.CreateCategory(CTG_NAME, $"{CTG_NAME} Settings");
- MelonPreferences.Mapper.RegisterMapper(KeycodeReader, KeycodeWriter);
+ try
+ {
+ MelonPreferences.Mapper.RegisterMapper(KeycodeReader, KeycodeWriter);
+ }
+ catch { }
}
public override void LoadConfig()
diff --git a/src/UI/CacheObject/CacheMember.cs b/src/UI/CacheObject/CacheMember.cs
index b7e2823..a2eaa75 100644
--- a/src/UI/CacheObject/CacheMember.cs
+++ b/src/UI/CacheObject/CacheMember.cs
@@ -10,7 +10,7 @@ using UnityExplorer.Core.Runtime;
using UnityExplorer.Core;
using UnityExplorer.UI.Utility;
using UnityExplorer.UI.InteractiveValues;
-using UnityExplorer.UI.Main.Home.Inspectors.Reflection;
+using UnityExplorer.UI.Inspectors.Reflection;
namespace UnityExplorer.UI.CacheObject
{
@@ -86,7 +86,7 @@ namespace UnityExplorer.UI.CacheObject
{
try
{
- Type baseType = ReflectionUtility.GetType(IValue.Value) ?? FallbackType;
+ Type baseType = ReflectionUtility.GetActualType(IValue.Value) ?? FallbackType;
if (!ReflectionProvider.Instance.IsReflectionSupported(baseType))
throw new Exception("Type not supported with reflection");
@@ -94,7 +94,7 @@ namespace UnityExplorer.UI.CacheObject
UpdateReflection();
if (IValue.Value != null)
- IValue.Value = IValue.Value.Cast(ReflectionUtility.GetType(IValue.Value));
+ IValue.Value = IValue.Value.Cast(ReflectionUtility.GetActualType(IValue.Value));
}
catch (Exception e)
{
diff --git a/src/UI/CacheObject/CacheObjectBase.cs b/src/UI/CacheObject/CacheObjectBase.cs
index 82db4a6..b9516c7 100644
--- a/src/UI/CacheObject/CacheObjectBase.cs
+++ b/src/UI/CacheObject/CacheObjectBase.cs
@@ -55,7 +55,7 @@ namespace UnityExplorer.UI.CacheObject
// if the type has changed fundamentally, make a new interactivevalue for it
var type = value == null
? FallbackType
- : ReflectionUtility.GetType(value);
+ : ReflectionUtility.GetActualType(value);
var ivalueType = InteractiveValue.GetIValueForType(type);
diff --git a/src/UI/Main/Home/Inspectors/GameObjects/ChildList.cs b/src/UI/Inspectors/GameObjects/ChildList.cs
similarity index 99%
rename from src/UI/Main/Home/Inspectors/GameObjects/ChildList.cs
rename to src/UI/Inspectors/GameObjects/ChildList.cs
index 28c60bb..6372674 100644
--- a/src/UI/Main/Home/Inspectors/GameObjects/ChildList.cs
+++ b/src/UI/Inspectors/GameObjects/ChildList.cs
@@ -7,7 +7,7 @@ using UnityEngine.UI;
using UnityExplorer.Core.Runtime;
using UnityExplorer.UI.Utility;
-namespace UnityExplorer.UI.Main.Home.Inspectors.GameObjects
+namespace UnityExplorer.UI.Inspectors.GameObjects
{
public class ChildList
{
diff --git a/src/UI/Main/Home/Inspectors/GameObjects/ComponentList.cs b/src/UI/Inspectors/GameObjects/ComponentList.cs
similarity index 98%
rename from src/UI/Main/Home/Inspectors/GameObjects/ComponentList.cs
rename to src/UI/Inspectors/GameObjects/ComponentList.cs
index 51610a6..1b9e834 100644
--- a/src/UI/Main/Home/Inspectors/GameObjects/ComponentList.cs
+++ b/src/UI/Inspectors/GameObjects/ComponentList.cs
@@ -8,7 +8,7 @@ using UnityExplorer.Core;
using UnityExplorer.Core.Runtime;
using UnityExplorer.UI.Utility;
-namespace UnityExplorer.UI.Main.Home.Inspectors.GameObjects
+namespace UnityExplorer.UI.Inspectors.GameObjects
{
public class ComponentList
{
@@ -75,7 +75,7 @@ namespace UnityExplorer.UI.Main.Home.Inspectors.GameObjects
var text = s_compListTexts[i];
- text.text = SignatureHighlighter.ParseFullSyntax(ReflectionUtility.GetType(comp), true);
+ text.text = SignatureHighlighter.ParseFullSyntax(ReflectionUtility.GetActualType(comp), true);
var toggle = s_compToggles[i];
#if CPP
diff --git a/src/UI/Main/Home/Inspectors/GameObjects/GameObjectControls.cs b/src/UI/Inspectors/GameObjects/GameObjectControls.cs
similarity index 99%
rename from src/UI/Main/Home/Inspectors/GameObjects/GameObjectControls.cs
rename to src/UI/Inspectors/GameObjects/GameObjectControls.cs
index f8140fb..6dcc577 100644
--- a/src/UI/Main/Home/Inspectors/GameObjects/GameObjectControls.cs
+++ b/src/UI/Inspectors/GameObjects/GameObjectControls.cs
@@ -8,7 +8,7 @@ using UnityExplorer.Core.Input;
using UnityExplorer.Core.Runtime;
using UnityExplorer.Core.Unity;
-namespace UnityExplorer.UI.Main.Home.Inspectors.GameObjects
+namespace UnityExplorer.UI.Inspectors.GameObjects
{
public class GameObjectControls
{
diff --git a/src/UI/Main/Home/Inspectors/GameObjects/GameObjectInspector.cs b/src/UI/Inspectors/GameObjects/GameObjectInspector.cs
similarity index 99%
rename from src/UI/Main/Home/Inspectors/GameObjects/GameObjectInspector.cs
rename to src/UI/Inspectors/GameObjects/GameObjectInspector.cs
index d6f54fe..df01178 100644
--- a/src/UI/Main/Home/Inspectors/GameObjects/GameObjectInspector.cs
+++ b/src/UI/Inspectors/GameObjects/GameObjectInspector.cs
@@ -7,7 +7,7 @@ using UnityEngine.UI;
using UnityExplorer.Core.Runtime;
using UnityExplorer.Core.Unity;
-namespace UnityExplorer.UI.Main.Home.Inspectors.GameObjects
+namespace UnityExplorer.UI.Inspectors.GameObjects
{
public class GameObjectInspector : InspectorBase
{
diff --git a/src/UI/Main/Home/InspectUnderMouse.cs b/src/UI/Inspectors/InspectUnderMouse.cs
similarity index 99%
rename from src/UI/Main/Home/InspectUnderMouse.cs
rename to src/UI/Inspectors/InspectUnderMouse.cs
index 8aa4110..feb4528 100644
--- a/src/UI/Main/Home/InspectUnderMouse.cs
+++ b/src/UI/Inspectors/InspectUnderMouse.cs
@@ -11,6 +11,7 @@ using UnityExplorer.Core.Input;
using UnityExplorer.Core.Runtime;
using UnityExplorer.UI;
using UnityExplorer.UI.Main;
+using UnityExplorer.UI.Inspectors;
namespace UnityExplorer.UI.Main.Home
{
diff --git a/src/UI/Main/Home/Inspectors/InspectorBase.cs b/src/UI/Inspectors/InspectorBase.cs
similarity index 98%
rename from src/UI/Main/Home/Inspectors/InspectorBase.cs
rename to src/UI/Inspectors/InspectorBase.cs
index eb295f4..2e167c0 100644
--- a/src/UI/Main/Home/Inspectors/InspectorBase.cs
+++ b/src/UI/Inspectors/InspectorBase.cs
@@ -3,7 +3,7 @@ using UnityEngine;
using UnityEngine.UI;
using UnityExplorer.Core.Unity;
-namespace UnityExplorer.UI.Main.Home.Inspectors
+namespace UnityExplorer.UI.Inspectors
{
public abstract class InspectorBase
{
diff --git a/src/UI/Main/Home/InspectorManager.cs b/src/UI/Inspectors/InspectorManager.cs
similarity index 97%
rename from src/UI/Main/Home/InspectorManager.cs
rename to src/UI/Inspectors/InspectorManager.cs
index 15801d1..4c85427 100644
--- a/src/UI/Main/Home/InspectorManager.cs
+++ b/src/UI/Inspectors/InspectorManager.cs
@@ -9,12 +9,11 @@ using UnityEngine.SceneManagement;
using UnityEngine.UI;
using UnityExplorer.Core.Runtime;
using UnityExplorer.UI.Main.Home;
-using UnityExplorer.UI.Main.Home.Inspectors;
using UnityExplorer.UI.CacheObject;
-using UnityExplorer.UI.Main.Home.Inspectors.GameObjects;
-using UnityExplorer.UI.Main.Home.Inspectors.Reflection;
+using UnityExplorer.UI.Inspectors.GameObjects;
+using UnityExplorer.UI.Inspectors.Reflection;
-namespace UnityExplorer.UI.Main.Home
+namespace UnityExplorer.UI.Inspectors
{
public class InspectorManager
{
diff --git a/src/UI/Main/Home/Inspectors/Reflection/InstanceInspector.cs b/src/UI/Inspectors/Reflection/InstanceInspector.cs
similarity index 99%
rename from src/UI/Main/Home/Inspectors/Reflection/InstanceInspector.cs
rename to src/UI/Inspectors/Reflection/InstanceInspector.cs
index a0e95d6..d2de92e 100644
--- a/src/UI/Main/Home/Inspectors/Reflection/InstanceInspector.cs
+++ b/src/UI/Inspectors/Reflection/InstanceInspector.cs
@@ -9,7 +9,7 @@ using UnityExplorer.Core;
using UnityExplorer.Core.Config;
using UnityExplorer.Core.Runtime;
-namespace UnityExplorer.UI.Main.Home.Inspectors.Reflection
+namespace UnityExplorer.UI.Inspectors.Reflection
{
public enum MemberScopes
{
diff --git a/src/UI/Main/Home/Inspectors/Reflection/ReflectionInspector.cs b/src/UI/Inspectors/Reflection/ReflectionInspector.cs
similarity index 99%
rename from src/UI/Main/Home/Inspectors/Reflection/ReflectionInspector.cs
rename to src/UI/Inspectors/Reflection/ReflectionInspector.cs
index d2326a7..a48e58b 100644
--- a/src/UI/Main/Home/Inspectors/Reflection/ReflectionInspector.cs
+++ b/src/UI/Inspectors/Reflection/ReflectionInspector.cs
@@ -9,9 +9,11 @@ using UnityExplorer.Core;
using UnityExplorer.Core.Config;
using UnityExplorer.Core.Runtime;
using UnityExplorer.UI.CacheObject;
+using UnityExplorer.UI.Main;
+using UnityExplorer.UI.Main.Home;
using UnityExplorer.UI.Utility;
-namespace UnityExplorer.UI.Main.Home.Inspectors.Reflection
+namespace UnityExplorer.UI.Inspectors.Reflection
{
public class ReflectionInspector : InspectorBase
{
@@ -78,7 +80,7 @@ namespace UnityExplorer.UI.Main.Home.Inspectors.Reflection
if (this is StaticInspector)
m_targetType = target as Type;
else
- m_targetType = ReflectionUtility.GetType(target);
+ m_targetType = ReflectionUtility.GetActualType(target);
m_targetTypeShortName = SignatureHighlighter.ParseFullSyntax(m_targetType, false);
diff --git a/src/UI/Main/Home/Inspectors/Reflection/StaticInspector.cs b/src/UI/Inspectors/Reflection/StaticInspector.cs
similarity index 83%
rename from src/UI/Main/Home/Inspectors/Reflection/StaticInspector.cs
rename to src/UI/Inspectors/Reflection/StaticInspector.cs
index 694c1b0..eeeb537 100644
--- a/src/UI/Main/Home/Inspectors/Reflection/StaticInspector.cs
+++ b/src/UI/Inspectors/Reflection/StaticInspector.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
-namespace UnityExplorer.UI.Main.Home.Inspectors.Reflection
+namespace UnityExplorer.UI.Inspectors.Reflection
{
public class StaticInspector : ReflectionInspector
{
diff --git a/src/UI/InteractiveValues/InteractiveDictionary.cs b/src/UI/InteractiveValues/InteractiveDictionary.cs
index a9ffa66..10de489 100644
--- a/src/UI/InteractiveValues/InteractiveDictionary.cs
+++ b/src/UI/InteractiveValues/InteractiveDictionary.cs
@@ -218,32 +218,37 @@ namespace UnityExplorer.UI.InteractiveValues
private IDictionary EnumerateWithReflection()
{
- var valueType = ReflectionUtility.GetType(Value);
+ var valueType = ReflectionUtility.GetActualType(Value);
- // get keys and values
- var keys = valueType.GetProperty("Keys").GetValue(Value, null);
- var values = valueType.GetProperty("Values").GetValue(Value, null);
-
- // create lists to hold them
var keyList = new List