summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/ReflectionUtils.kt21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ReflectionUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/ReflectionUtils.kt
index 2cf613b39..5ef72ddd7 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/ReflectionUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/ReflectionUtils.kt
@@ -1,5 +1,7 @@
package at.hannibal2.skyhanni.utils
+import net.minecraftforge.fml.common.Loader
+import net.minecraftforge.fml.common.ModContainer
import java.lang.reflect.Constructor
import java.lang.reflect.Field
import java.lang.reflect.Modifier
@@ -59,4 +61,23 @@ object ReflectionUtils {
javaClass.getDeclaredField("modifiers").makeAccessible().set(this, modifiers and (Modifier.FINAL.inv()))
return this
}
+
+ fun StackTraceElement.getClassInstance(): Class<*> {
+ return Class.forName(this.className)
+ }
+
+ private val packageLookup by lazy {
+ Loader.instance().modList
+ .flatMap { mod -> mod.ownedPackages.map { it to mod } }
+ .toMap()
+ }
+
+ val Class<*>.shPackageName
+ get() =
+ canonicalName.substringBeforeLast('.')
+
+ fun Class<*>.getModContainer(): ModContainer? {
+ return packageLookup[shPackageName]
+ }
+
}